Введение
Прежде чем приложение сможет работать, ему нужно адресное пространство. Вы определите VPC и подсеть AWS с помощью Terraform, сравните развёрнутую сеть с состоянием Terraform и удалите только сеть своего приложения.
Вы уже должны знать рабочий процесс init/plan/apply в Terraform, адреса ресурсов и основы CIDR для VPC и подсетей AWS. Terminal, инструменты Terraform, AWS CLI и отдельная эталонная сеть уже подготовлены. Каждая лабораторная работа начинается в независимой среде; ресурсы из предыдущей VM не нужны.
Связь с сертификацией
| Сертификация | Задача экзамена | Практика |
|---|---|---|
| Solutions Architect – Associate (SAA-C03) | Задача 1.2 | Практика основ адресного пространства VPC и подсетей и зон доступности, используемых для сегментации сети. |
Обзор лабораторной работы

Определение и развёртывание VPC
На этом шаге вы выразите адресный план приложения в ресурсе Terraform и изучите полученную VPC.
Откройте Terminal. AWS View показывает текущие сетевые ресурсы; наблюдайте в нём за топологией, тогда как CLI предоставляет точные поля, а Terraform управляет изменениями. Существующая сеть reference-network принадлежит другому приложению и должна остаться без изменений.
VPC задаёт границу сети в пределах региона. Её блок CIDR определяет диапазон адресов: 10.62.0.0/16 резервирует адреса для этого приложения. aws_vpc.application в Terraform — это адрес в конфигурации, а не идентификатор AWS. AWS назначает идентификатор после создания.
Каталог application-network содержит подготовленную конфигурацию провайдера. Она выбирает предоставленную учётную запись и проверенные версии инструментов. Перейдите в этот каталог:
cd /home/labex/project/application-network
Создайте main.tf. Heredoc с разделителем в кавычках записывает следующий HCL без подстановок до HCL; > создаёт или заменяет этот файл. Тег Name позволяет легко отличить сеть приложения от эталонной сети.
cat > main.tf <<'HCL'
resource "aws_vpc" "application" {
cidr_block = "10.62.0.0/16"
tags = {
Name = "application-network"
}
}
HCL
Инициализируйте рабочий каталог для выбора нужного провайдера, затем отформатируйте и проверьте конфигурацию. Валидация проверяет структуру конфигурации; она не доказывает, что ресурс существует.
terraform init
terraform fmt
terraform validate
Если init сообщает Incomplete lock file information for providers, речь идёт о контрольных суммах для других платформ. Эта подготовленная VM использует linux_amd64; продолжайте после успешного завершения инициализации и валидации.
Изучите план. Terraform также описывает настройки VPC по умолчанию; найдите cidr_block и тег Name в предлагаемом добавлении.
terraform plan
Итоговая сводка должна показывать добавление одного ресурса. Примените конфигурацию и введите yes, когда Terraform запросит подтверждение:
terraform apply
Запросите фактическую VPC. --filters выбирает тег приложения; --query показывает только идентификатор и CIDR. Идентификатор будет различаться, а CIDR должен быть 10.62.0.0/16.
aws ec2 \
describe-vpcs \
--filters Name=tag:Name,Values=application-network \
--query 'Vpcs[].{ID:VpcId,CIDR:CidrBlock}'
Обновите представление в AWS View: VPC приложения появится рядом с эталонной VPC. В новой VPC пока нет подсети приложения.
Подключение подсети с помощью ссылки на ресурс
На этом шаге вы создадите подсеть внутри VPC приложения и проверите её диапазон адресов, зону доступности и сопоставление в Terraform.
Подсеть принадлежит ровно одной VPC и одной зоне доступности. Используйте 10.62.1.0/24 — меньший диапазон внутри /16 вашей VPC — в us-east-1a. Ни этот CIDR, ни зона доступности сами по себе не делают подсеть публичной; маршрутизация в интернет и правила доступа будут рассмотрены позже.
Создайте subnet.tf. Выражение aws_vpc.application.id ссылается на ресурс VPC. Terraform использует эту зависимость, чтобы создать VPC раньше подсети, и автоматически получает фактический идентификатор. Вам не нужно копировать идентификатор из вывода команды в HCL.
cat > subnet.tf <<'HCL'
resource "aws_subnet" "application" {
vpc_id = aws_vpc.application.id
cidr_block = "10.62.1.0/24"
availability_zone = "us-east-1a"
tags = {
Name = "application-subnet"
}
}
output "vpc_id" {
value = aws_vpc.application.id
}
output "subnet_id" {
value = aws_subnet.application.id
}
HCL
Отформатируйте и проверьте новый файл, затем изучите план. Он должен добавлять подсеть и предоставлять два выходных значения, не заменяя вашу VPC.
terraform fmt
terraform validate
terraform plan
Примените изменения и подтвердите, введя yes:
terraform apply
Сохраните и выведите созданные идентификаторы. $(...) захватывает вывод команды; terraform output -raw возвращает строку без кавычек.
VPC_ID=$(terraform output -raw vpc_id)
echo "$VPC_ID"
SUBNET_ID=$(terraform output -raw subnet_id)
echo "$SUBNET_ID"
Выполните независимый запрос к AWS. Поле VPC у подсети должно совпадать с выведенным идентификатором VPC, её CIDR должен быть 10.62.1.0/24, а зона доступности — us-east-1a.
aws ec2 \
describe-subnets \
--subnet-ids "$SUBNET_ID" \
--query 'Subnets[].{ID:SubnetId,VPC:VpcId,CIDR:CidrBlock,Zone:AvailabilityZone}'
Состояние Terraform сопоставляет адреса в конфигурации с развёрнутыми ресурсами. Изучите это сопоставление; сравните идентификаторы VPC и подсети с AWS, не принимая одну лишь запись в состоянии за доказательство работоспособности сети.
terraform state list
terraform state show aws_subnet.application
Список содержит aws_vpc.application и aws_subnet.application. Теперь проверьте согласованность:
terraform plan
Ожидайте No changes. В AWS View подсеть приложения отображается внутри своей фактической VPC, рядом с нетронутой эталонной сетью.

Удаление только сети приложения
На этом шаге вы изучите порядок удаления, удалите свой стек Terraform и убедитесь, что эталонная сеть сохранена.
Terraform использует тот же граф зависимостей в обратном порядке: он удаляет подсеть раньше VPC. План удаления охватывает ресурсы, которыми управляет этот рабочий каталог, поэтому отдельно подготовленная эталонная сеть не должна в нём появляться.
Изучите запланированные удаления:
terraform plan -destroy
Ожидайте удаление двух ресурсов. Проверьте адреса ресурсов, прежде чем продолжать. Затем удалите сеть приложения и введите yes:
terraform destroy
Запросите ресурсы приложения по тегу. Оба запроса должны вернуть пустые списки; неудачный запрос не доказывает удаление.
aws ec2 \
describe-vpcs \
--filters Name=tag:Name,Values=application-network \
--query 'Vpcs[].VpcId'
aws ec2 \
describe-subnets \
--filters Name=tag:Name,Values=application-subnet \
--query 'Subnets[].SubnetId'
Убедитесь, что Terraform больше не управляет никакими ресурсами:
terraform state list
Команда не выводит адресов ресурсов. Наконец, изучите сохранённую эталонную подсеть:
aws ec2 \
describe-subnets \
--filters Name=tag:Name,Values=reference-subnet \
--query 'Subnets[].{CIDR:CidrBlock,Zone:AvailabilityZone}'
Её CIDR остаётся 10.90.1.0/24 в us-east-1b. AWS View теперь показывает только эталонную сеть. Ваши файлы HCL остаются доступными для изучения, хотя ресурсы приложения уже удалены.
Резюме
Вы определили VPC и подсеть на HCL, связали их ссылкой на ресурс, сравнили фактические сетевые поля AWS с состоянием Terraform и подтвердили план без изменений. Затем вы удалили только свою управляемую сеть и сохранили постороннюю эталонную сеть. Маршрутизация и правила безопасности — отдельные шаги на пути к доступному приложению.



