Гид по технологиям

Запуск EC2-инстансов через AWS CLI

• 7 min read • AWS • Обновлено 22 Nov 2025
Запуск EC2-инстансов через AWS CLI
Запуск EC2-инстансов через AWS CLI

Быстрые ссылки

  • Что потребуется
  • Создание инстансов из командной строки
  • Настройка install-скрипта (user-data)
  • Создание кастомного AMI
  • Шпаргалка команд и чек-листы

AWS Logo

Изображение: логотип AWS для иллюстрации.

Что потребуется

Перед автоматизацией убедитесь, что у вас есть:

  • Установленный и настроенный AWS CLI (версия v2 рекомендована).
  • IAM-пользователь или роль с правами на операции EC2: запуск инстансов (ec2:RunInstances), создание security group, изменение правил безопасности, создание AMI и просмотр ресурсов.
  • Существующая или новая пара ключей (Key Pair) для доступа по SSH. Лучше использовать одну пару ключей для набора инстансов, чтобы упростить доступ.
  • Security Group с необходимыми правилами (SSH, HTTP, приложения). Правило открывает порт для всех инстансов в группе.
  • AMI (Amazon Machine Image) — базовый образ для запуска. Это может быть стандартный образ (Amazon Linux 2, Ubuntu LTS) или ваш кастомный AMI с предустановленным софтом.
  • Subnet ID и зона доступности (Availability Zone). Желательно запускать связанные инстансы в одной подсети и одной зоне, чтобы избежать межзоновых transfer-расходов.

Важно: строго ограничивайте доступ по SSH (порт 22) по CIDR, если это возможно. Для административного доступа рассмотрите использование SSM Session Manager вместо прямого SSH.

Примеры команд для security group

Создать новую security group:

aws ec2 create-security-group --group-name NewSecurityGroup --description "Created from CLI"

Открыть порт 22 для всех (не рекомендовано в продакшене):

aws ec2 authorize-security-group-ingress --group-name NewSecurityGroup --protocol tcp --port 22 --cidr 0.0.0.0/0

Получить информацию о security group (включая ID):

aws ec2 describe-security-groups --group-names EC2SecurityGroup

Найдите ID группы (GroupId) — он потребуется при запуске инстанса.

Как найти Subnet ID и AMI

Subnet ID можно получить в консоли EC2 или из CLI. Пример с использованием jq (возвращает SubnetId первого найденного инстанса):

aws ec2 describe-instances | jq '.Reservations[0].Instances[0].NetworkInterfaces[0].SubnetId'

Найти AMI по фильтру (пример для Amazon Linux 2):

aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" --query 'Images[].{ID:ImageId,Name:Name}' --output table

Выведите список ключевых пар:

aws ec2 describe-key-pairs

Создание инстансов из командной строки

Основная команда для запуска инстансов — run-instances. Ниже — полный пример с основными флагами и объяснениями.

aws ec2 run-instances \
  --image-id ami-00000000 \
  --count 1 \
  --instance-type t2.micro \
  --key-name MyKeyPair \
  --security-group-ids sg-00000000 \
  --subnet-id subnet-00000000 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=cli-generated}]'

Что важно заменить:

  • --image-id — ID AMI, который вы будете использовать.
  • --key-name — имя пары ключей для SSH.
  • --security-group-ids — ID security group.
  • --subnet-id — Subnet ID.
  • --tag-specifications — теги для удобства поиска и биллинга.

Команда вернёт большой JSON с данными об инстансе. Пример фрагмента ответа (сокращён):

{
  "OwnerId": "123456789012",
  "ReservationId": "r-5875ca20",
  "Groups": [ { "GroupName": "my-sg", "GroupId": "sg-903004f8" } ],
  "Instances": [
    {
      "InstanceId": "i-5203422c",
      "ImageId": "ami-173d747e",
      "InstanceType": "t2.micro",
      "SubnetId": "subnet-6e7f829e",
      "KeyName": "MyKeyPair",
      "PrivateIpAddress": "10.0.1.114",
      "Placement": { "AvailabilityZone": "us-west-2b" },
      "Tags": [ { "Key": "Name", "Value": "MyInstance" } ]
    }
  ]
}

Советы по работе с выводом:

  • Пайпьте вывод в файл для последующего анализа: > output.json.
  • Используйте jq, Python или Node.js для автоматического извлечения полей, например InstanceId или PublicIpAddress.

Пример — получить ID и публичный IP первого инстанса в ответе:

cat output.json | jq -r '.Instances[0].InstanceId'
cat output.json | jq -r '.Instances[0].PublicIpAddress'

Доступ по SSH возможен через публичный IP (если он присвоен) или по приватному IP через VPN/прыжковый сервер.

Настройка install-скрипта (user-data)

User-data позволяет передать скрипт, который выполнится при первом запуске инстанса. Это удобно для автоматической установки и настройки приложений.

Пример команды с передачей файла user-data:

aws ec2 run-instances \
  --image-id ami-00000000 \
  --count 1 \
  --instance-type t2.micro \
  --key-name MyKeyPair \
  --security-group-ids sg-00000000 \
  --subnet-id subnet-00000000 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=cli-generated}]' \
  --user-data file://startup_script.sh

Пример простого startup_script.sh для Amazon Linux 2 (cloud-init совместимый):

#!/bin/bash
# Обновляем систему и устанавливаем nginx
yum update -y
amazon-linux-extras install -y nginx1
systemctl enable nginx
systemctl start nginx
# Записываем метаданные запуска
echo "Launched at $(date)" > /var/www/html/launch.txt

Пример для Ubuntu (использует apt):

#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx

Важные моменты:

  • User-data выполняется только при первом запуске (по умолчанию). Для повторного выполнения потребуется специальная конфигурация cloud-init.
  • Скрипт должен начинаться с shebang (#!/bin/bash) для корректного исполнения.
  • Логи выполнения обычно доступны в /var/log/cloud-init.log и /var/log/cloud-init-output.log.

Создание кастомного AMI

Кастомный AMI упрощает масштабирование: на новый инстанс уже будет установлен и настроен нужный софт. Основные шаги:

  1. Создайте инстанс из базового AMI (например, Amazon Linux 2).
  2. Установите и настройте необходимый софт. Проверьте, что всё работает.
  3. Очистите секреты и временные данные (SSH-хост-ключи, логи, креденшелы).
  4. При необходимости удалите swap или очистите его и занулите свободное место для уменьшения размера образа.
  5. Создайте образ через консоль или CLI.

Создание AMI через CLI (без перезагрузки):

aws ec2 create-image --instance-id i-0123456789abcdef0 --name "my-app-ami-$(date +%Y%m%d)" --description "AMI с предустановленным приложением" --no-reboot

Если вы используете --no-reboot, убедитесь, что файловая система в консистентном состоянии. Команда создаст снимок (snapshot) и затем AMI. После этого AMI появится в разделе AMI в консоли.

Используйте AMI ID в --image-id при запуске новых инстансов или в Launch Template/Auto Scaling Group.

Безопасность и лучшие практики

Important: никогда не храните долгоживущие секреты прямо в AMI. Используйте IAM роли и секретные менеджеры (AWS Secrets Manager, Parameter Store).

Рекомендации:

  • Ограничивайте доступ по SSH по CIDR или используйте SSM Session Manager.
  • Выдавайте минимально необходимые IAM-права (принцип наименьших привилегий).
  • Отключайте пароли и используйте только ключи SSH/SSM.
  • Логируйте и мониторьте доступы (CloudTrail, CloudWatch).

Альтернативные подходы

  • Launch Templates / Launch Configurations — позволяют централизовать параметры запуска и использовать их в Auto Scaling.
  • Auto Scaling Groups — автоматическое масштабирование наборов инстансов.
  • Infrastructure as Code (CloudFormation, Terraform) — для воспроизводимой инфраструктуры.
  • EC2 Image Builder — автоматизация создания и обновления AMI.

Когда это не подойдёт / Ограничения

  • Для сложных многокомпонентных приложений лучше использовать Terraform/CloudFormation для управления связями между ресурсами.
  • Если нужно постоянное управление конфигурацией, рассмотрите использование конфигурационных менеджеров (Ansible, Chef, Puppet) или контейнеризации (Docker, ECS, EKS).
  • Инстансы в разных AZ могут не подходить для низкозатратного обмена трафиком — учитывайте стоимость межзонового трафика.

Чек-листы и шаблоны

Мини-методология запуска инстанса (шаги):

  1. Подготовка: проверка IAM прав, key pair, security group, subnet, AMI.
  2. Тестовый запуск: запустить один инстанс с user-data и убедиться в доступности.
  3. Валидация: SSH/SSM доступ, нужные службы запущены, теги корректны.
  4. Создание AMI (если требуется).
  5. Документирование ID AMI и шаблонов запуска.

Чек-лист для DevOps:

  • Проверены IAM-права
  • Наличие key pair
  • Security group с минимальными правилами
  • Subnet и AZ проверены
  • User-data протестирован
  • Логи cloud-init проверены

Чек-лист для безопасность:

  • Ограничен SSH по CIDR
  • Используются IAM роли вместо встраивания секретов
  • CloudTrail и CloudWatch настроены

Шаблон команды (шпаргалка):

  • Создать SG:
aws ec2 create-security-group --group-name MySG --description "Created from CLI"
  • Добавить правило:
aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 --protocol tcp --port 22 --cidr 203.0.113.0/24
  • Запустить инстанс:
aws ec2 run-instances --image-id ami-00000000 --count 1 --instance-type t2.micro --key-name MyKey --security-group-ids sg-00000000 --subnet-id subnet-00000000
  • Создать AMI:
aws ec2 create-image --instance-id i-0123456789abcdef0 --name "my-ami" --no-reboot
  • Описать инстансы:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"

Отладка — типовые ошибки и решения

  • UnauthorizedOperation: проверьте IAM-политику и права.
  • InvalidAMIID.NotFound: неверный AMI ID или AMI в другом регионе.
  • KeyPairNotFound: указана несуществующая пара ключей.
  • InsufficientInstanceCapacity: попробуйте другую зону или тип инстанса.
  • SubnetNotFound or InvalidSubnetID: неверный Subnet ID или регион не совпадает.

Проверка статуса инстанса:

aws ec2 describe-instance-status --instance-ids i-0123456789abcdef0

Проверки логов cloud-init на инстансе для диагностики проблем user-data:

sudo cat /var/log/cloud-init-output.log
sudo cat /var/log/cloud-init.log

Критерии приёмки

  • Инстанс в состоянии running.
  • Доступен по SSH или через SSM.
  • Приложение/служба запущены и отвечают на запросы.
  • Теги присутствуют и соответствуют стандарту.
  • Если создавался AMI — образ отображается в разделе AMI и может быть использован для запуска новых инстансов.

Мини-словарь (1 строка)

  • AMI — образ виртуальной машины для EC2; содержит ОС и файлы.
  • Subnet — подсеть в VPC; определяет подсеть и AZ.
  • Security Group — виртуальный firewall для инстансов.
  • Key Pair — пара SSH-ключей для доступа.
  • User-data — скрипт, выполняемый при первом запуске инстанса.

Create custom AMI

Изображение: окно создания пользовательского AMI в консоли EC2.

Рекомендации по миграции и совместимости

  • AMI привязан к региону. Для использования образа в другом регионе экспортируйте или копируйте AMI.
  • Обновляйте AMI регулярно, чтобы включать обновления безопасности.
  • Для масштабирования используйте Launch Template с указанием ID AMI.

Примеры использования в пайплайне CI/CD

  • Сборка и тестирование сервера на временном инстансе.
  • После успешных тестов создаётся новый AMI и деплойится в Auto Scaling Group.
  • EC2 Image Builder позволяет автоматизировать этот процесс с тестами и сканированием безопасности.

Итоговое резюме

Автоматизация запуска EC2-инстансов через AWS CLI даёт гибкость и скорость. Используйте user-data для простых настроек, AMI для быстрого масштабирования и Launch Templates/Auto Scaling для управления группами инстансов. Всегда проверяйте права IAM и применяйте лучшие практики безопасности.

Notes: держите документацию по используемым ID и шаблонам в репозитории инфраструктуры.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро