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

Создание VPC в AWS с помощью Boto3 и Python

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

Кратко

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

Введение

Схема VPC и зависимых компонентов

Boto3 — это официальный SDK Amazon Web Services (AWS) для Python. Он даёт API для создания, настройки и управления сервисами AWS (EC2, RDS, S3 и т.д.). В этой статье мы поэтапно установим Boto3 и создадим простую VPC с публичной подсетью и зависимыми компонентами: интернет-шлюзом, таблицей маршрутов и привязкой подсети.

Важно: предполагается базовое понимание VPC и базовые знания Python. Если вы не знакомы с VPC, сначала изучите создание VPC через консоль AWS.

Предварительные требования

  1. Учетная запись AWS
  2. Базовое понимание VPC
  3. Базовое знание Python
  4. Python и pip доступны в системе

Что мы сделаем

  1. Установим Boto3
  2. Разберём нужные методы Boto3 для VPC
  3. Напишем и запустим Python-скрипт, который создаёт VPC, интернет-шлюз, таблицу маршрутов и публичную подсеть

Установка Boto3

На Ubuntu Python обычно уже установлен. Проверьте версию Python:

which python /usr/bin/python –version

ИЛИ

python –version

Проверка версии Python

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

sudo apt update

Обновление пакетов

sudo apt install python-pip

Установка pip для Python

Проверка pip:

pip –version

Проверка версии pip

Установка Boto3:

pip install boto3

Проверка установленного пакета:

pip show 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 создана в AWS с помощью Python

Видно созданный VPC с указанным CIDR и тегом Name. Проверьте также связанные компоненты.

Проверка и отладка

  1. Проверьте журналы вывода скрипта — он печатает id созданных ресурсов.
  2. В консоли AWS убедитесь, что ресурсы созданы в том же регионе (region_name).
  3. Ошибки прав доступа: если получите AccessDenied, проверьте IAM-политику — нужны права на ec2:CreateVpc, ec2:CreateSubnet, ec2:CreateInternetGateway, ec2:CreateRouteTable, ec2:AttachInternetGateway и т.д.
  4. Если 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.

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

  1. CloudFormation / AWS CDK: для инфраструктуры как кода лучше использовать CloudFormation или AWS CDK — это облегчает повторяемость и версионирование.
  2. Terraform: кросс-платформенное средство для описания инфраструктуры, широко используемое в командах DevOps.
  3. Использование Boto3 с клиентом (boto3.client(‘ec2’)) вместо resource — даёт более близкий к API контроль.

Когда этот подход не подходит

  • Вы хотите декларативный, повторяемый процесс развертывания — лучше CloudFormation/CDK/Terraform.
  • Нужна сложная сеть с NAT Gateway, несколькими AZ и приватными подсетями — скрипт нужно расширить или использовать IaC.

Мини‑методология: как безопасно автоматизировать создание VPC

  1. Разработайте шаблон: CIDR, AZ, публичные/приватные подсети.
  2. Протестируйте локально с временными ресурсами в отдельном тестовом аккаунте.
  3. Перенесите логику в IaC (CloudFormation/CDK/Terraform) после валидации.
  4. Настройте CI/CD с проверками безопасности и тестами.

Ролевые чек‑листы

  • Для разработчика:

    • проверить локальную установку Python и Boto3
    • запускать скрипт в тестовом аккаунте
    • не хранить ключи в репозитории
  • Для инженера безопасности:

    • проверить IAM-политику и минимум прав
    • убедиться в шифровании и контроле доступа к учетным данным
  • Для DevOps:

    • автоматизировать тесты создания и удаления инфраструктуры
    • интегрировать в CI/CD, использовать IaC для повторяемости

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

  1. VPC создана с указанным CIDR.
  2. Internet Gateway создан и прикреплён к VPC.
  3. Таблица маршрутов содержит маршрут 0.0.0.0/0 на IGW.
  4. Подсеть создана и привязана к таблице маршрутов.
  5. Ресурсы существуют в ожидаемом регионе.

Частые ошибки и способы их устранения

  • 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 и соответствующими маршрутами.

Поделиться: 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 — руководство