Создать EC2 с Python и Boto3
Введение
В этой статье мы покажем, как создать EC2‑инстанс с помощью Python и библиотеки Boto3, используя метод create_instances. Boto3 предоставляет множество методов для работы с сервисом EC2 — официальную документацию по API Boto3 можно найти на сайте AWS. Перед началом предполагается базовое знание EC2 и Python.
Важно: если вы не знакомы с EC2 и хотите сначала создать VM из AWS Console, изучите основы через официальную документацию AWS для начинающих.
Что потребуется
- Аккаунт AWS (создайте, если ещё нет).
- Базовое понимание EC2.
- Python установлен на компьютере.
- Доступ к ключам (access key id и secret access key) или — лучше — роль IAM при запуске внутри EC2/CI.
Коротко о том, что сделаем
- Установим Boto3 и зависимости.
- Разберём метод create_instances и обязательные параметры.
- Напишем конфигурационный файл и скрипт ec2.py, запустим создание инстанса.
Установка Boto3 и зависимостей
На современных дистрибутивах Python обычно уже установлен. Чтобы проверить версию Python, выполните:
which python
/usr/bin/python --version
OR
python --versionЕсли pip не установлен (например, в минимальной Ubuntu), обновите списки пакетов и установите pip:
sudo apt update
sudo apt install python-pipПроверить pip:
pip --versionУстановить Boto3:
pip install boto3
Проверить установленный пакет:
pip show boto3
Метод create_instances — что нужно знать
Чтобы создать простой EC2‑инстанс, мы используем ec2.create_instances(…). Метод поддерживает большое количество параметров (см. синтаксис ниже). Для простого старта нам нужны лишь несколько обязательных параметров — ImageId, MinCount, MaxCount, InstanceType и KeyName.
Request Syntax (пример полного синтаксиса):
instance = ec2.create_instances(
BlockDeviceMappings=[
{
'DeviceName': 'string',
'VirtualName': 'string',
'Ebs': {
'DeleteOnTermination': True|False,
'Iops': 123,
'SnapshotId': 'string',
'VolumeSize': 123,
'VolumeType': 'standard'|'io1'|'gp2'|'sc1'|'st1',
'KmsKeyId': 'string',
'Encrypted': True|False
},
'NoDevice': 'string'
},
],
ImageId='string',
InstanceType='t1.micro'|'t2.micro'|...,
Ipv6AddressCount=123,
Ipv6Addresses=[ ... ],
KernelId='string',
KeyName='string',
MaxCount=123,
MinCount=123,
...
)Мы не будем использовать все параметры. Рассмотрим обязательные и рекомендуемые для простого запуска:
- ImageId: ID AMI, используемой для создания инстанса. Обязателен.
- MinCount: минимальное число запускаемых инстансов. Обязателен.
- MaxCount: максимальное число запускаемых инстансов. Обязателен.
- InstanceType: тип инстанса (например, t2.micro). По умолчанию — m1.small, но лучше указывать явно.
- KeyName: имя ключа SSH (key pair). Без него вы не сможете подключиться по SSH, поэтому укажите ранее созданный key pair.
Подготовка конфигурации
В примере мы читаем значения из файла config.properties. Убедитесь, что заменили aws_access_key_id_value и aws_secret_access_key_value на свои данные (или используйте более безопасный метод хранения, например IAM роли или переменные окружения).
Создайте файл config.properties:
aws_access_key_id_value='ACCESS-KEY-OF-THE-AWS-ACCOUNT'
aws_secret_access_key_value='SECRETE-KEY-OF-THE-AWS-ACCOUNT'
region_name_value='us-west-2'
ImageId_value = 'ami-08692d171e3cf02d6'
MinCount_value = 1
MaxCount_value = 1
InstanceType_value = 't2.micro'
KeyName_value = 'my-key'
Важно: хранение секретных ключей в plaintext небезопасно. Для production используйте IAM роли на EC2, AWS Secrets Manager, SSM Parameter Store или переменные окружения.
Скрипт ec2.py
Создайте файл ec2.py со следующим содержимым — он читает config.properties и вызывает create_instances:
import boto3
def getVarFromFile(filename):
import imp
f = open(filename)
global data
data = imp.load_source('data', '', f)
f.close()
getVarFromFile('config.properties')
ec2 = boto3.resource(
'ec2',
aws_access_key_id=data.aws_access_key_id_value,
aws_secret_access_key=data.aws_secret_access_key_value,
region_name=data.region_name_value
)
instance = ec2.create_instances(
ImageId = data.ImageId_value,
MinCount = data.MinCount_value,
MaxCount = data.MaxCount_value,
InstanceType = data.InstanceType_value,
KeyName = data.KeyName_value)
print (instance[0].id)
Запустите скрипт:
python ec2.pyНа экран будет выведен ID созданного инстанса (например, i-0abcdef1234567890). Проверьте консоль AWS по этому ID — инстанс должен появиться, а статус проверки (Status Check) будет инициализироваться.

Важные замечания
Важно: перед созданием инстанса проверьте следующие моменты:
- В указанном регионе доступна выбранная AMI (ImageId).
- Ваша учётная запись имеет лимиты на запуск инстансов нужного типа.
- Сетевые настройки (Security Group, Subnet) по умолчанию могут блокировать SSH; при необходимости укажите SecurityGroupIds или SecurityGroups.
- Для автоматического назначения публичного IP используйте параметр AssociatePublicIpAddress или запустите в публичном субнете.
Когда этот подход не подходит
- Для production‑инфраструктуры рекомендуется Infrastructure as Code (Terraform/CloudFormation), а не ad‑hoc скрипты с хранением ключей в файлах.
- Если нужно масштабирование, балансировка нагрузки и управление конфигурацией — используйте Auto Scaling, Load Balancer и конфигурационные менеджеры.
- Для минимизации рисков безопасности не храните секреты в репозитории.
Альтернативные подходы
- AWS CLI: aws ec2 run-instances — удобно в скриптах sh/CI.
- Terraform: описывает инфраструктуру в коде и управляет состоянием.
- CloudFormation: декларативные шаблоны в AWS.
- AWS SDK для других языков (Node.js, Go, Java) — если проект на другом языке.
Быстрый чек-лист перед запуском (роль‑ориентированный)
Для разработчика:
- Указан корректный ImageId и Region.
- KeyPair доступен и приватный ключ сохранён.
Для инженера безопасности:
- Никогда не сохранять секреты в репозиториях.
- Ограничить доступ Security Group по IP.
Для оператора:
- Проверить лимиты аккаунта.
- Настроить мониторинг и логи.
Критерии приёмки
- Скрипт создаёт инстанс и возвращает валидный instance ID.
- Инстанс запускается без ошибок в консоли AWS.
- Возможность подключения по SSH (если указан KeyName и настроен Security Group).
Небольшой SOP для быстрого воспроизведения (Playbook)
- Подготовить config.properties с корректными значениями.
- Убедиться, что Boto3 установлена: pip show boto3.
- Запустить python ec2.py.
- Скопировать instance ID и проверить в AWS Console.
- Настроить теги, security groups и мониторинг по необходимости.
Тест-кейсы и приёмка
- TC1: Параметры корректны — ожидается новый instance ID и статус running.
- TC2: Неправильный ImageId — запрос вернёт ошибку; скрипт должен корректно её обработать (добавьте try/except при необходимости).
- TC3: Нет прав у ключей — проверка обработки ошибок авторизации.
Риски и смягчения
- Риск: утечка ключей — Решение: использовать IAM роли или Secrets Manager.
- Риск: запуск слишком многих инстансов — Решение: выставлять MinCount/MaxCount и лимиты.
- Риск: неверные security group — Решение: протестировать подключение в закрытой среде.
Короткий глоссарий
- AMI: образ Amazon Machine Image — шаблон диска для инстанса.
- Key Pair: SSH ключи для доступа к инстансу.
- Instance Type: конфигурация CPU/память/сетевой пропускной способности.
- IAM Role: роль AWS для доступа к ресурсам без хранения ключей.
Заключение
Мы рассмотрели, как запустить простой EC2‑инстанс через Python и Boto3: что нужно установить, какие параметры обязательны и как выглядят базовый конфиг и скрипт. Этот подход удобен для быстрых прототипов и автоматизированных задач. Для production‑решений рассмотрите использование IAM ролей, Infrastructure as Code и более строгие практики управления секретами.
Резюме:
- Используйте ImageId, MinCount, MaxCount, InstanceType, KeyName.
- Не храните секреты в plaintext.
- Для устойчивой инфраструктуры применяйте Terraform/CloudFormation и IAM роли.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone