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

Изображение: логотип 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 упрощает масштабирование: на новый инстанс уже будет установлен и настроен нужный софт. Основные шаги:
- Создайте инстанс из базового AMI (например, Amazon Linux 2).
- Установите и настройте необходимый софт. Проверьте, что всё работает.
- Очистите секреты и временные данные (SSH-хост-ключи, логи, креденшелы).
- При необходимости удалите swap или очистите его и занулите свободное место для уменьшения размера образа.
- Создайте образ через консоль или 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 могут не подходить для низкозатратного обмена трафиком — учитывайте стоимость межзонового трафика.
Чек-листы и шаблоны
Мини-методология запуска инстанса (шаги):
- Подготовка: проверка IAM прав, key pair, security group, subnet, AMI.
- Тестовый запуск: запустить один инстанс с user-data и убедиться в доступности.
- Валидация: SSH/SSM доступ, нужные службы запущены, теги корректны.
- Создание AMI (если требуется).
- Документирование 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 — скрипт, выполняемый при первом запуске инстанса.

Изображение: окно создания пользовательского 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 и шаблонам в репозитории инфраструктуры.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента