Создание VPC в AWS с помощью Boto3 и Python
Кратко
Кратко: статья объясняет, как установить Boto3 и использовать его для создания VPC с публичной подсетью, интернет-шлюзом и таблицей маршрутов. Приведён рабочий пример на Python и проверочные шаги. Важное замечание: не храните секретные ключи в коде — используйте IAM-роли или aws configure.
Введение

Boto3 — это официальный SDK Amazon Web Services (AWS) для Python. Он даёт API для создания, настройки и управления сервисами AWS (EC2, RDS, S3 и т.д.). В этой статье мы поэтапно установим Boto3 и создадим простую VPC с публичной подсетью и зависимыми компонентами: интернет-шлюзом, таблицей маршрутов и привязкой подсети.
Важно: предполагается базовое понимание VPC и базовые знания Python. Если вы не знакомы с VPC, сначала изучите создание VPC через консоль AWS.
Предварительные требования
- Учетная запись AWS
- Базовое понимание VPC
- Базовое знание Python
- Python и pip доступны в системе
Что мы сделаем
- Установим Boto3
- Разберём нужные методы Boto3 для VPC
- Напишем и запустим Python-скрипт, который создаёт VPC, интернет-шлюз, таблицу маршрутов и публичную подсеть
Установка Boto3
На Ubuntu Python обычно уже установлен. Проверьте версию Python:
which python /usr/bin/python –version
ИЛИ
python –version

Если нет pip, обновите локальные репозитории и установите pip (пример для Ubuntu):
sudo apt update

sudo apt install python-pip

Проверка pip:
pip –version

Установка Boto3:
pip install boto3
Проверка установленного пакета:
pip show boto3

Какие методы понадобятся
Для создания VPC и зависимых компонентов мы будем использовать следующие методы Boto3 (EC2 resource / client API):
- create_vpc
- create_route_table (через VPC resource)
- create_internet_gateway
- create_subnet
- associate_with_subnet (для привязки таблицы маршрутов к подсети)
Ниже приведены синтаксисы методов, чтобы вы знали допустимые параметры. Не обязательно использовать все параметры — это обзор.
Синтаксис create_vpc
response = client.create_vpc(
CidrBlock='string',
AmazonProvidedIpv6CidrBlock=True|False,
Ipv6Pool='string',
Ipv6CidrBlock='string',
DryRun=True|False,
InstanceTenancy='default'|'dedicated'|'host',
Ipv6CidrBlockNetworkBorderGroup='string'
)CidrBlock — обязательный параметр: IPv4-диапазон сети VPC в нотации CIDR.
Синтаксис create_route_table
route_table = ec2.create_route_table(
DryRun=True|False,
VpcId='string'
)VpcId — обязательный параметр: ID VPC, в котором создаётся таблица маршрутов.
Синтаксис create_internet_gateway
response = client.create_internet_gateway(
DryRun=True|False
)Каждому VPC можно прикрепить интернет-шлюз для доступа в интернет.
Синтаксис create_subnet
subnet = ec2.create_subnet(
AvailabilityZone='string',
AvailabilityZoneId='string',
CidrBlock='string',
Ipv6CidrBlock='string',
OutpostArn='string',
VpcId='string',
DryRun=True|False
)CidrBlock — IPv4-диапазон подсети в нотации CIDR. VpcId — ID VPC.
Синтаксис associate_with_subnet
route_table_association = route_table.associate_with_subnet(
DryRun=True|False,
SubnetId='string',
GatewayId='string'
)SubnetId — ID подсети, либо GatewayId — ID интернет-шлюза или виртуального приватного шлюза.
Пример: скрипт vpc.py
Создайте файл vpc.py и вставьте следующий код. ВАЖНО: не храните реальные учетные данные в коде. Лучше использовать aws configure или IAM-роли. В примере показано, куда подставить access_key при локальной отладке.
vpc.py
import boto3
# Рекомендация: не храните ключи в коде. Используйте aws configure или IAM-роли.
ec2 = boto3.resource('ec2', aws_access_key_id='ACCESS-KEY-OF-THE-AWS-ACCOUNT',
aws_secret_access_key='SECRETE-KEY-OF-THE-AWS-ACCOUNT',
region_name='AWS-Region')
# Создаём VPC
vpc = ec2.create_vpc(CidrBlock='192.168.0.0/16')
# Присваиваем имя VPC
vpc.create_tags(Tags=[{"Key": "Name", "Value": "my_vpc"}])
vpc.wait_until_available()
print(vpc.id)
# Создаём и прикрепляем Internet Gateway
ig = ec2.create_internet_gateway()
vpc.attach_internet_gateway(InternetGatewayId=ig.id)
print(ig.id)
# Создаём таблицу маршрутов и публичный маршрут к Internet Gateway
route_table = vpc.create_route_table()
route = route_table.create_route(
DestinationCidrBlock='0.0.0.0/0',
GatewayId=ig.id
)
print(route_table.id)
# Создаём подсеть
subnet = ec2.create_subnet(CidrBlock='192.168.1.0/24', VpcId=vpc.id)
print(subnet.id)
# Привязываем таблицу маршрутов к подсети
route_table.associate_with_subnet(SubnetId=subnet.id)
Запустите скрипт:
python vpc.py
Проверьте в консоли AWS: VPC, Subnet, Internet Gateway, Route Table должны появиться.

Видно созданный VPC с указанным CIDR и тегом Name. Проверьте также связанные компоненты.
Проверка и отладка
- Проверьте журналы вывода скрипта — он печатает id созданных ресурсов.
- В консоли AWS убедитесь, что ресурсы созданы в том же регионе (region_name).
- Ошибки прав доступа: если получите AccessDenied, проверьте IAM-политику — нужны права на ec2:CreateVpc, ec2:CreateSubnet, ec2:CreateInternetGateway, ec2:CreateRouteTable, ec2:AttachInternetGateway и т.д.
- Если CIDR уже занят — выберите другой CIDR для VPC или подсети.
Безопасность и рекомендации
Important: никогда не храните aws_access_key_id и aws_secret_access_key в открытом исходном коде. Рекомендации:
- Для инфраструктуры в AWS используйте IAM Role (EC2 Instance Profile) или сервисные роли для Lambda/ECS.
- Для локальной разработки используйте aws configure (файл ~/.aws/credentials) или переменные окружения AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.
- Ограничьте IAM-политику по принципу наименьших привилегий (least privilege).
- Для продакшна рассмотрите использование AWS Organizations, SCP и ролей с MFA.
Альтернативные подходы
- CloudFormation / AWS CDK: для инфраструктуры как кода лучше использовать CloudFormation или AWS CDK — это облегчает повторяемость и версионирование.
- Terraform: кросс-платформенное средство для описания инфраструктуры, широко используемое в командах DevOps.
- Использование Boto3 с клиентом (boto3.client(‘ec2’)) вместо resource — даёт более близкий к API контроль.
Когда этот подход не подходит
- Вы хотите декларативный, повторяемый процесс развертывания — лучше CloudFormation/CDK/Terraform.
- Нужна сложная сеть с NAT Gateway, несколькими AZ и приватными подсетями — скрипт нужно расширить или использовать IaC.
Мини‑методология: как безопасно автоматизировать создание VPC
- Разработайте шаблон: CIDR, AZ, публичные/приватные подсети.
- Протестируйте локально с временными ресурсами в отдельном тестовом аккаунте.
- Перенесите логику в IaC (CloudFormation/CDK/Terraform) после валидации.
- Настройте CI/CD с проверками безопасности и тестами.
Ролевые чек‑листы
Для разработчика:
- проверить локальную установку Python и Boto3
- запускать скрипт в тестовом аккаунте
- не хранить ключи в репозитории
Для инженера безопасности:
- проверить IAM-политику и минимум прав
- убедиться в шифровании и контроле доступа к учетным данным
Для DevOps:
- автоматизировать тесты создания и удаления инфраструктуры
- интегрировать в CI/CD, использовать IaC для повторяемости
Критерии приёмки
- VPC создана с указанным CIDR.
- Internet Gateway создан и прикреплён к VPC.
- Таблица маршрутов содержит маршрут 0.0.0.0/0 на IGW.
- Подсеть создана и привязана к таблице маршрутов.
- Ресурсы существуют в ожидаемом регионе.
Частые ошибки и способы их устранения
- AccessDenied: добавьте необходимые права в IAM-политику.
- ResourceAlreadyExists/CIDR overlapping: используйте другой CIDR.
- Регион не совпадает: проверьте параметр region_name и настройки консоли.
- Скрипт зависает: проверьте ожидание доступности ресурса (wait_until_available) и сеть.
Короткий словарь
- VPC: виртуальная приватная сеть в AWS.
- CIDR: нотация сети IPv4 (например, 192.168.0.0/16).
- IGW: Internet Gateway — шлюз для доступа VPC в интернет.
- Subnet: подсеть внутри VPC.
- Route Table: таблица маршрутов для подсетей.
Заключение
Мы прошли путь от установки Boto3 до создания VPC с публичной подсетью, интернет-шлюзом и таблицей маршрутов. Этот пример — базовая отправная точка. Для продакшна переносите логику в IaC (CloudFormation/CDK/Terraform), используйте IAM-роли и автоматические проверки безопасности.
Краткое резюме:
- Установите Boto3 и проверьте Python/pip.
- Используйте показанный скрипт как шаблон и не храните ключи в коде.
- Для масштабируемости и повторяемости переходите на IaC и CI/CD.
Notes: если нужна версия с приватными подсетями и NAT Gateway, дополните скрипт созданием NAT Gateway и соответствующими маршрутами.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone