Defina uma rede para a aplicação

AWSBeginner
Pratique Agora

Introdução

Sua aplicação precisa de um espaço de endereçamento antes de poder ser executada. Você definirá uma VPC e uma sub-rede da AWS com o Terraform, comparará a rede implantada com o estado do Terraform e removerá apenas a rede da sua aplicação.

Você já deve conhecer o fluxo init/plan/apply do Terraform, endereços de recursos e os conceitos básicos de CIDR para VPCs e sub-redes da AWS. O Terminal, as ferramentas do Terraform, a AWS CLI e uma rede de referência separada estão preparados. Cada laboratório começa de forma independente; você não precisa de recursos de uma VM anterior.

Relação com certificações

Certificação Tarefa do exame Prática
Solutions Architect – Associate (SAA-C03) Tarefa 1.2 Praticar os fundamentos de espaço de endereçamento de VPCs e sub-redes e de zonas de disponibilidade usados na segmentação de redes.

Visão geral do laboratório

Visão conceitual: o Terraform define uma VPC que contém uma sub-rede em us-east-1a.

Defina e implante a VPC

Nesta etapa, você converterá o plano de endereçamento da aplicação em um recurso do Terraform e inspecionará a VPC resultante.

Abra o Terminal. O AWS View mostra os recursos de rede atuais; use-o para observar a topologia, enquanto a CLI fornece campos precisos e o Terraform gerencia as alterações. A rede existente reference-network pertence a outra aplicação e deve permanecer inalterada.

Uma VPC é um limite de rede regional. Seu bloco CIDR define seu intervalo de endereços: 10.62.0.0/16 reserva endereços para esta aplicação. aws_vpc.application do Terraform é um endereço de configuração, e não um ID da AWS. A AWS atribui o ID após a criação.

O diretório application-network contém a configuração preparada do provedor. Ela seleciona a conta fornecida e as versões testadas das ferramentas. Entre nesse diretório:

cd /home/labex/project/application-network

Crie main.tf. O heredoc com delimitador entre aspas escreve o HCL a seguir literalmente até HCL; > cria ou substitui esse arquivo. A tag Name facilita distinguir a rede da aplicação da rede de referência.

cat > main.tf <<'HCL'
resource "aws_vpc" "application" {
  cidr_block = "10.62.0.0/16"
  tags = {
    Name = "application-network"
  }
}
HCL

Inicialize o diretório de trabalho para selecionar o provedor necessário e, em seguida, formate e valide a configuração. A validação verifica a estrutura da configuração; ela não comprova que um recurso existe.

terraform init
terraform fmt
terraform validate

Se init informar Incomplete lock file information for providers, a mensagem descreve somas de verificação para outras plataformas. Esta VM preparada usa linux_amd64; continue depois que a inicialização e a validação forem concluídas com sucesso.

Revise um plano. O Terraform também descreve as configurações padrão da VPC; localize cidr_block e a tag Name na adição proposta.

terraform plan

O resumo final deve mostrar um recurso a adicionar. Aplique a configuração e digite yes quando o Terraform solicitar confirmação:

terraform apply

Consulte a VPC existente na AWS. --filters seleciona a tag da aplicação; --query exibe apenas o ID e o CIDR. O ID varia, enquanto o CIDR deve ser 10.62.0.0/16.

aws ec2 \
  describe-vpcs \
  --filters Name=tag:Name,Values=application-network \
  --query 'Vpcs[].{ID:VpcId,CIDR:CidrBlock}'

Observe novamente o AWS View: a VPC da aplicação aparece ao lado da VPC de referência. A nova VPC ainda não tem uma sub-rede da aplicação.

Conecte uma sub-rede com uma referência a recurso

Nesta etapa, você criará uma sub-rede dentro da VPC da aplicação e verificará seu intervalo de endereços, sua zona de disponibilidade e seu mapeamento no Terraform.

Uma sub-rede pertence a exatamente uma VPC e uma zona de disponibilidade. Use 10.62.1.0/24, um intervalo menor dentro do /16 da VPC, em us-east-1a. Nem esse CIDR nem uma zona de disponibilidade, por si só, tornam uma sub-rede pública; o roteamento para a internet e as regras de acesso serão tratados depois.

Crie subnet.tf. A expressão aws_vpc.application.id faz referência ao recurso VPC. O Terraform usa essa dependência para criar a VPC antes da sub-rede e obtém o ID real automaticamente. Você não copia um ID da saída de um comando para o 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

Formate e valide o novo arquivo e, em seguida, revise o plano. Ele deve adicionar uma sub-rede e expor dois valores de saída, sem substituir sua VPC.

terraform fmt
terraform validate
terraform plan

Aplique e confirme com yes:

terraform apply

Salve e exiba os IDs gerados. $(...) captura a saída de um comando; terraform output -raw retorna uma string sem aspas.

VPC_ID=$(terraform output -raw vpc_id)
echo "$VPC_ID"
SUBNET_ID=$(terraform output -raw subnet_id)
echo "$SUBNET_ID"

Consulte a AWS de forma independente. O campo de VPC da sub-rede deve corresponder ao ID de VPC exibido, seu CIDR deve ser 10.62.1.0/24 e sua zona de disponibilidade deve ser us-east-1a.

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

O estado do Terraform mapeia endereços de configuração para recursos implantados. Inspecione esse mapeamento; compare os IDs da VPC e da sub-rede com a AWS, em vez de tratar uma entrada no estado como prova de uma rede funcional.

terraform state list
terraform state show aws_subnet.application

A lista inclui aws_vpc.application e aws_subnet.application. Agora verifique a convergência:

terraform plan

Espere No changes. No AWS View, a sub-rede da aplicação aparece dentro da VPC à qual ela de fato pertence, ao lado da rede de referência inalterada.

Ponto de verificação em execução: a VPC da aplicação contém sua sub-rede em us-east-1a, enquanto a rede de referência separada permanece. Os IDs dos recursos são exemplos.

Remova apenas a rede da aplicação

Nesta etapa, você revisará a ordem de exclusão, destruirá sua pilha do Terraform e confirmará que a rede de referência permanece.

O Terraform usa o mesmo grafo de dependências em ordem inversa: ele remove a sub-rede antes da VPC. Um plano de destruição abrange os recursos gerenciados por este diretório de trabalho, portanto a rede de referência preparada separadamente não deve aparecer.

Revise as exclusões planejadas:

terraform plan -destroy

Espere dois recursos a destruir. Verifique os endereços dos recursos antes de continuar. Em seguida, destrua a rede da aplicação e digite yes:

terraform destroy

Consulte os recursos da aplicação por tag. As duas consultas devem retornar listas vazias; uma solicitação com falha não comprova a exclusão.

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'

Confirme que o Terraform não gerencia mais nenhum recurso:

terraform state list

O comando não imprime endereços de recursos. Por fim, inspecione a sub-rede de referência preservada:

aws ec2 \
  describe-subnets \
  --filters Name=tag:Name,Values=reference-subnet \
  --query 'Subnets[].{CIDR:CidrBlock,Zone:AvailabilityZone}'

Seu CIDR permanece 10.90.1.0/24 em us-east-1b. O AWS View agora mostra apenas a rede de referência. Seus arquivos HCL continuam disponíveis para revisão, embora os recursos da aplicação tenham sido excluídos.

Resumo

Você definiu uma VPC e uma sub-rede em HCL, usou uma referência a recurso para conectá-las, comparou os campos reais da rede AWS com o estado do Terraform e confirmou um plano sem alterações. Em seguida, removeu apenas sua rede gerenciada e preservou uma rede de referência não relacionada. O roteamento e as regras de segurança são etapas separadas para tornar uma aplicação acessível.