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

Создать EC2 с Python и Boto3

5 min read AWS Обновлено 25 Nov 2025
Создать EC2 с Python и Boto3
Создать EC2 с Python и Boto3

Введение

В этой статье мы покажем, как создать EC2‑инстанс с помощью Python и библиотеки Boto3, используя метод create_instances. Boto3 предоставляет множество методов для работы с сервисом EC2 — официальную документацию по API Boto3 можно найти на сайте AWS. Перед началом предполагается базовое знание EC2 и Python.

Важно: если вы не знакомы с EC2 и хотите сначала создать VM из AWS Console, изучите основы через официальную документацию AWS для начинающих.

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

  1. Аккаунт AWS (создайте, если ещё нет).
  2. Базовое понимание EC2.
  3. Python установлен на компьютере.
  4. Доступ к ключам (access key id и secret access key) или — лучше — роль IAM при запуске внутри EC2/CI.

Коротко о том, что сделаем

  1. Установим Boto3 и зависимости.
  2. Разберём метод create_instances и обязательные параметры.
  3. Напишем конфигурационный файл и скрипт 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

Скриншот установки Boto3

Проверить установленный пакет:

pip show boto3

Скриншот информации о пакете 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'

Скриншот config.properties

Важно: хранение секретных ключей в 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 скрипта

Запустите скрипт:

python ec2.py

На экран будет выведен ID созданного инстанса (например, i-0abcdef1234567890). Проверьте консоль AWS по этому ID — инстанс должен появиться, а статус проверки (Status Check) будет инициализироваться.

Скриншот созданного VM в AWS через Boto3

Важные замечания

Важно: перед созданием инстанса проверьте следующие моменты:

  • В указанном регионе доступна выбранная 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)

  1. Подготовить config.properties с корректными значениями.
  2. Убедиться, что Boto3 установлена: pip show boto3.
  3. Запустить python ec2.py.
  4. Скопировать instance ID и проверить в AWS Console.
  5. Настроить теги, 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 роли.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство