Создание VPC с подсетями приложения

AWSBeginner
Практиковаться сейчас

Введение

Приложению доставки посылок нужны отдельные диапазоны адресов для публичного сервиса и внутренних рабочих процессов. Вы создадите VPC, разместите две непересекающиеся подсети в разных зонах доступности и проверите план адресации в AWS View.

Вы уже должны уметь выполнять команды AWS CLI и читать идентификаторы ресурсов. CLI настроен для этой новой среды. В конце вы удалите только созданные вами ресурсы.

Связь с сертификацией

Эта лабораторная работа даёт практику по следующим темам экзаменов.

Создание VPC для доставки

На этом шаге вы выберете общий диапазон адресов приложения и создадите его VPC.

Virtual Private Cloud (VPC) — изолированная сеть для ресурсов одного региона AWS. Её блок CIDR определяет адреса, доступные подсетям. Запись IPv4 CIDR объединяет начальный адрес и длину префикса: 10.20.0.0/16 охватывает адреса от 10.20.0.0 до 10.20.255.255. Чем меньше число префикса, тем больше битов остаётся для адресов, поэтому /16 больше, чем /24.

Выполняйте команды в подготовленном Terminal и откройте соседнюю вкладку AWS View. Она читает то же состояние ресурсов, что и CLI, и показывает созданные сетевые ресурсы. Держите оба интерфейса доступными.

Начните с рабочего каталога:

cd /home/labex/project

Перед изменениями прочитайте список существующих VPC. --query выбирает поля ID и CIDR, а --output table упрощает сравнение:

aws ec2 describe-vpcs --query 'Vpcs[].{ID:VpcId,CIDR:CidrBlock}' --output table

Эталонная сеть использует 10.99.0.0/16. Могут отображаться и другие существующие VPC. Не изменяйте их: вы создадите и затем удалите собственную сеть 10.20.0.0/16.

Группа команд EC2 включает сетевые операции VPC. --cidr-block задаёт диапазон, а --tag-specifications добавляет теги Name и Project при создании. Кавычки объединяют значение со скобками и запятыми в один аргумент.

Выражение оболочки $(...) выполняет команду и захватывает её вывод. Присваивание переменной VPC_ID сохраняет созданный идентификатор для последующих команд. --query 'Vpc.VpcId' --output text возвращает только этот ID:

VPC_ID=$(aws ec2 create-vpc \
  --cidr-block 10.20.0.0/16 \
  --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=delivery-network},{Key=Project,Value=parcel}]' \
  --query 'Vpc.VpcId' \
  --output text)

Команда с захваченным выводом не печатает результат. Прочитайте ресурс по сохранённому ID. "$VPC_ID" подставляет значение одним аргументом:

aws ec2 describe-vpcs \
  --vpc-ids "$VPC_ID" \
  --query 'Vpcs[].{ID:VpcId,CIDR:CidrBlock,State:State}' \
  --output table

CIDR равен 10.20.0.0/16, состояние — available. В AWS View появляется delivery-network с тем же CIDR и пока без подсетей приложения. Не закрывайте этот Terminal, чтобы сохранить ID.

Добавление подсети публичного сервиса

На этом шаге вы выделите меньший диапазон внутри VPC и разместите его в зоне доступности.

Подсеть — часть диапазона адресов VPC. Каждая подсеть принадлежит ровно одной зоне доступности (AZ) этого региона; сама VPC охватывает регион. Имя вроде us-east-1a определяет размещение ресурсов подсети.

Зарезервируйте 10.20.1.0/24 для будущего публичного сервиса. Диапазон охватывает 10.20.1.0–10.20.1.255 и входит в 10.20.0.0/16. В обычной IPv4-подсети AWS резервирует первые четыре адреса и последний, оставляя в этом /24 251 адрес для назначения. Не назначайте зарезервированные адреса рабочим нагрузкам.

Посмотрите имена доступных зон. Регион был настроен при запуске среды:

aws ec2 describe-availability-zones \
  --query 'AvailabilityZones[].{Zone:ZoneName,State:State}' \
  --output table

Для этой подсети используйте us-east-1a, для следующей — us-east-1b. --vpc-id выбирает родительскую сеть, --availability-zone — размещение. Сохраните новый ID для очистки:

PUBLIC_SUBNET_ID=$(aws ec2 create-subnet \
  --vpc-id "$VPC_ID" \
  --cidr-block 10.20.1.0/24 \
  --availability-zone us-east-1a \
  --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=delivery-public},{Key=Project,Value=parcel}]' \
  --query 'Subnet.SubnetId' \
  --output text)

Прочитайте родительскую сеть, диапазон и зону:

aws ec2 describe-subnets \
  --subnet-ids "$PUBLIC_SUBNET_ID" \
  --query 'Subnets[].{ID:SubnetId,VPC:VpcId,CIDR:CidrBlock,Zone:AvailabilityZone}' \
  --output table

ID VPC совпадает с сохранённым, диапазон равен 10.20.1.0/24, зона — us-east-1a. AWS View помещает подсеть внутрь delivery-network.

Имя delivery-public описывает назначение. Одно имя не делает подсеть публичной: нужен маршрут к интернет-шлюзу, который вы настроите в следующей работе.

Добавление отдельной подсети рабочих процессов

На этом шаге вы выделите внутренним рабочим процессам собственную непересекающуюся подсеть и сравните готовый план.

Две подсети одной VPC не могут пересекаться. Диапазон 10.20.2.0/24 для рабочих процессов отделён от 10.20.1.0/24. Оба входят в /16 VPC.

Разместите эту подсеть в us-east-1b, чтобы увидеть подсети разных зон внутри одной VPC. Это демонстрация размещения: избыточное приложение в нескольких зонах ещё не развёрнуто.

PRIVATE_SUBNET_ID=$(aws ec2 create-subnet \
  --vpc-id "$VPC_ID" \
  --cidr-block 10.20.2.0/24 \
  --availability-zone us-east-1b \
  --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=delivery-private},{Key=Project,Value=parcel}]' \
  --query 'Subnet.SubnetId' \
  --output text)

Используйте серверный фильтр, чтобы выбрать только подсети вашей VPC. В Name=vpc-id,Values=... поле Name обозначает фильтр, а Values содержит подходящий ID VPC:

aws ec2 describe-subnets \
  --filters "Name=vpc-id,Values=$VPC_ID" \
  --query 'Subnets[].{ID:SubnetId,CIDR:CidrBlock,Zone:AvailabilityZone}' \
  --output table

Две строки показывают следующий план. Созданные ID и порядок строк могут отличаться:

Назначение CIDR Зона доступности
Публичный сервис 10.20.1.0/24 us-east-1a
Внутренние рабочие процессы 10.20.2.0/24 us-east-1b

Попробуйте добавить 10.20.1.128/25, чтобы проверить границу пересечения. Этот меньший диапазон уже входит в delivery-public и не может стать другой подсетью этой VPC:

aws ec2 create-subnet \
  --vpc-id "$VPC_ID" \
  --cidr-block 10.20.1.128/25 \
  --availability-zone us-east-1a

Ожидаемая ошибка содержит InvalidSubnet.Conflict. Третья подсеть не создаётся. Сохраните два корректных диапазона /24.

Сравните те же диапазоны и зоны в AWS View. Ни у одной подсети пока нет маршрута в Интернет. Раздельные диапазоны позволяют отдельно применять маршруты и правила доступа в следующих работах.

VPC доставки содержит две непересекающиеся подсети в разных зонах доступности

Пример результата: оба CIDR подсетей входят в диапазон VPC, каждая подсеть показывает свою зону. ID ресурсов в вашей среде отличаются.

Удаление учебной сети

На этом шаге вы удалите свои две подсети и VPC, сохранив существующую эталонную сеть.

У ресурсов есть зависимости: нельзя удалить VPC, пока в ней остаются ваши подсети. Удаляйте только сохранённые ID подсетей. Успешная команда удаления не выводит ничего:

aws ec2 delete-subnet --subnet-id "$PUBLIC_SUBNET_ID"
aws ec2 delete-subnet --subnet-id "$PRIVATE_SUBNET_ID"

Теперь удалите пустую VPC:

aws ec2 delete-vpc --vpc-id "$VPC_ID"

Прочитайте полный список VPC ещё раз, не полагаясь на изменяемый тег как доказательство удаления:

aws ec2 describe-vpcs --query 'Vpcs[].{ID:VpcId,CIDR:CidrBlock}' --output table

VPC 10.20.0.0/16 отсутствует. Эталонная сеть 10.99.0.0/16 и остальные существующие сети сохранены. Ошибка запроса списка не доказывает очистку. AWS View показывает отсутствие VPC приложения.

Выполните проверку завершения этого шага.

Следующая работа начинается в новой среде со своим подготовленным приложением. Вы узнаете, как интернет-шлюз, маршрут и публичный адрес позволяют внешнему запросу достичь приложения.

Итоги

Вы создали диапазон VPC, разделили его на две непересекающиеся подсети приложения и разместили каждую в зоне доступности. Проверили родительские связи с помощью CLI и AWS View, затем удалили только свою учебную сеть.

Продолжайте работу «Подключение публичной подсети к Интернету», чтобы превратить адресный план в рабочий путь к приложению.