Construindo uma VPC AWS com Terraform Passo a Passo

Se precisar configurar AWS Virtual Private Cloud (VPC), é possível fazer isso através da AWS Management Console, mas automatizar é muito mais divertido! Em um cenário de DevOps, a construção de serviços AWS por meio de ferramentas como Terraform é uma abordagem mais escalável e automatizada para a provisionamento de recursos na nuvem.

Neste tutorial, você aprenderá como criar e executar uma configuração do Terraform para construir uma VPC do Terraform do zero!

Pré-requisitos

Este post será um tutorial passo a passo. Se desejar acompanhar, certifique-se de ter o seguinte em vigor:

  • Terraform – Este tutorial usará o Terraform v0.14.9 em execução no Ubuntu 18.04.5 LTS, mas qualquer sistema operacional com Terraform deve funcionar.
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should have one that understands the HCL Terraform language. Try out Visual Studio (VS) Code.

Compreensão das VPCs da AWS

A nuvem da AWS possui dezenas de serviços variados, desde computação, armazenamento, redes e mais. Cada um desses serviços pode se comunicar entre si, assim como os serviços de um datacenter local. No entanto, cada um desses serviços é independente um do outro, e não necessariamente isolado dos outros serviços. O VPC da AWS muda isso.

Um VPC da AWS é uma rede única que permite lançar serviços da AWS dentro de uma única rede isolada. Tecnicamente, um VPC da AWS é quase o mesmo que possuir um datacenter, mas com benefícios adicionais incorporados de escalabilidade, tolerância a falhas, armazenamento ilimitado, etc.

AWS VPC architecture

Os VPCs da AWS são restritos por região. Você não pode ter um VPC abrangendo várias regiões, com até cinco VPCs suportados por região.

Construindo a Configuração do Terraform para um VPC da AWS

Chega de conversa, vamos começar a construir!

1. Para começar, crie uma pasta para armazenar seus arquivos de configuração do Terraform. Este tutorial criará uma pasta chamada terraform-vpc-demo no seu diretório home.

mkdir ~/terraform-vpc-demo
 cd ~/terraform-vpc-demo

2. Abra seu editor de código favorito e copie/cole a seguinte configuração já criada para você, salvando o arquivo como main.tf dentro do diretório ~/terraform-vpc-demo. Informações sobre cada recurso a ser criado estão embutidas.

O arquivo main.tf contém todos os recursos que precisam ser provisionados.

O Terraform utiliza vários tipos diferentes de arquivos de configuração. Cada arquivo é escrito em formato de texto simples ou formato JSON. Eles têm uma convenção de nomenclatura específica, seja no formato .tf ou .tfjson.

A configuração do Terraform abaixo:

  • Cria uma VPC
  • Cria um Gateway de Internet e o conecta à VPC para permitir que o tráfego dentro da VPC seja alcançável pelo mundo exterior.
  • Cria uma sub-rede pública e privada

As sub-redes são redes dentro de redes. Elas são projetadas para ajudar o fluxo de tráfego de rede a ser mais eficiente e fornecer “partes” menores e mais gerenciáveis de endereços IP

  • Cria uma tabela de roteamento para as sub-redes pública e privada e associa a tabela a ambas as sub-redes
  • Cria um Gateway NAT para permitir que as sub-redes privadas alcancem a internet sem precisar de um endereço IP roteável externamente atribuído a cada recurso.
Create the VPC
 resource "aws_vpc" "Main" {                # Criando VPC aqui
   cidr_block       = var.main_vpc_cidr     # Definindo o bloco CIDR use 10.0.0.0/24 para demonstração
   instance_tenancy = "default"
 }
 Create Internet Gateway and attach it to VPC
 resource "aws_internet_gateway" "IGW" {    # Criando Gateway da Internet
    vpc_id =  aws_vpc.Main.id               # O ID da VPC será gerado após criarmos a VPC
 }
 Create a Public Subnets.
 resource "aws_subnet" "publicsubnets" {    # Criando Sub-redes Públicas
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.public_subnets}"        # Bloco CIDR das sub-redes públicas
 }
 Create a Private Subnet                   # Criando Sub-redes Privadas
 resource "aws_subnet" "privatesubnets" {
   vpc_id =  aws_vpc.Main.id
   cidr_block = "${var.private_subnets}"          # Bloco CIDR das sub-redes privadas
 }
 Route table for Public Subnet's
 resource "aws_route_table" "PublicRT" {    # Criando RT para Sub-rede Pública
    vpc_id =  aws_vpc.Main.id
         route {
    cidr_block = "0.0.0.0/0"               # O tráfego da Sub-rede Pública alcança a Internet através do Gateway da Internet
    gateway_id = aws_internet_gateway.IGW.id
     }
 }
 Route table for Private Subnet's
 resource "aws_route_table" "PrivateRT" {    # Criando RT para Sub-rede Privada
   vpc_id = aws_vpc.Main.id
   route {
   cidr_block = "0.0.0.0/0"             # O tráfego da Sub-rede Privada alcança a Internet através do Gateway NAT
   nat_gateway_id = aws_nat_gateway.NATgw.id
   }
 }
 Route table Association with Public Subnet's
 resource "aws_route_table_association" "PublicRTassociation" {
    subnet_id = aws_subnet.publicsubnets.id
    route_table_id = aws_route_table.PublicRT.id
 }
 Route table Association with Private Subnet's
 resource "aws_route_table_association" "PrivateRTassociation" {
    subnet_id = aws_subnet.privatesubnets.id
    route_table_id = aws_route_table.PrivateRT.id
 }
 resource "aws_eip" "nateIP" {
   vpc   = true
 }
 Creating the NAT Gateway using subnet_id and allocation_id
 resource "aws_nat_gateway" "NATgw" {
   allocation_id = aws_eip.nateIP.id
   subnet_id = aws_subnet.publicsubnets.id
 }

3. Agora, crie outro arquivo dentro do diretório ~/terraform-vpc-demo, nomeie-o vars.tf e cole o conteúdo abaixo.

Vars.tf é um arquivo de variáveis Terraform que contém todas as variáveis que o arquivo de configuração referencia.

Você pode ver as referências de variáveis no arquivo de configuração por:

  • var.region
  • var.main_vpc_cidr
  • var.public_subnets
  • var.private_subnets
variable "region" {}
 variable "main_vpc_cidr" {}
 variable "public_subnets" {}
 variable "private_subnets" {}

É possível incluir todos os valores de configuração em um único arquivo de configuração. Para manter as coisas claras e facilitar para os desenvolvedores e administradores, é importante dividir as coisas.

4. Crie mais um arquivo dentro do diretório ~/terraform-vpc-demo, cole o seguinte código e nomeie-o como provider.tf para definir o provedor AWS. O tutorial estará criando recursos na região us-east-2.

O arquivo de provedores define provedores como AWS, Oracle ou Azure, etc., para que o Terraform possa se conectar aos serviços em nuvem corretos. provider "aws" { region = "us-east-2" }

provider "aws" {
   region = "us-east-2"
 }

5. Por fim, crie mais um arquivo dentro do diretório ~/terraform-vpc-demo, nomeie-o como terraform.tfvars, e cole o código abaixo. Este arquivo de variáveis contém os valores que o Terraform usará para substituir as referências de variáveis dentro do arquivo de configuração.

main_vpc_cidr = "10.0.0.0/24"
 public_subnets = "10.0.0.128/26"
 private_subnets = "10.0.0.192/26"

Agora, abra seu terminal favorito (Bash neste caso) e verifique se todos os arquivos necessários abaixo estão contidos na pasta executando o comando tree.

tree terraform-vpc-demo  
Folder structure of terraform files

Executando o Terraform para Criar a VPC AWS

Agora que você tem o arquivo de configuração do Terraform e os arquivos de variáveis prontos para serem usados, é hora de iniciar o Terraform e criar a VPC! Para provisionar uma configuração do Terraform, o Terraform geralmente utiliza uma abordagem de três etapas terraform initterraform planterraform apply. Vamos percorrer cada etapa agora.

1. Abra um terminal e vá para o diretório ~\terraform-vpc-demo.

cd ~\terraform-vpc-demo

2. Execute o comando terraform init no mesmo diretório. O comando terraform init inicializa os plugins e provedores necessários para trabalhar com recursos.

terraform init

Se tudo correr bem, você deverá ver a mensagem O Terraform foi inicializado com sucesso na saída, como mostrado abaixo.

Terraform initialized successfully

3. Agora, execute o comando terraform plan. Esta é uma ação opcional, mas recomendada para garantir que a sintaxe da sua configuração esteja correta e fornecer uma visão geral dos recursos que serão provisionados em sua infraestrutura. terraform plan

terraform plan

Se for bem-sucedido, deverá ver uma mensagem como Plano: "X" para adicionar, "Y" para alterar ou "Z" para destruir na saída para indicar que o comando foi bem-sucedido. Você também verá todos os recursos da AWS que o Terraform pretende criar.

Plan command execution

4. Em seguida, informe ao Terraform para realmente provisionar a VPC da AWS e os recursos usando terraform apply. Quando você invoca terraform apply, o Terraform lerá a configuração (main.tf) e outros arquivos para compilar uma configuração. Em seguida, enviará essa configuração para a AWS como instruções para construir a VPC e outros componentes.

terraform apply
Terraform apply command execution

Observe os IDs definidos na saída do Terraform. Você precisará desses IDs para correlacionar os recursos criados na próxima seção.

O comando Terraform foi executado com sucesso, então vamos mudar para o Console de Gerenciamento da AWS para confirmar que a VPC e os componentes foram criados com sucesso.

Verificando a VPC do Terraform AWS

Neste momento, você deverá ter criado a VPC com o Terraform. Vamos verificar verificando manualmente a VPC no Console de Gerenciamento da AWS.

1. Abra seu navegador da web favorito e vá para o Console de Gerenciamento da AWS e faça login.

2. Enquanto estiver no Console, clique na barra de pesquisa no topo, pesquise por ‘vpc’ e clique no item de menu VPC.

Navigating to the VPC service

3. Uma vez na página VPC, clique em Suas VPCs. Você deverá ver a VPC criada com o mesmo ID que o Terraform retornou anteriormente.

VPC created

4. Uma vez que o Terraform criou mais do que apenas o recurso VPC, mas todos os recursos necessários para a VPC, você deve então encontrar cada recurso nesta página também.

Subnets created
Route tables created
Internet Gateway created
NAT Gateway created

Com todos os componentes criados com sucesso, usando o Terraform, esta VPC está pronta para ser utilizada!

Conclusão

Neste tutorial, você aprendeu como usar o Terraform para implantar uma VPC AWS e seus componentes usando o Terraform.

Construir uma Amazon Virtual Private Cloud com o Terraform permite que você crie recursos de forma rápida, fácil e previsível. Agora você está pronto para usar esse conhecimento com outros serviços da AWS e construir serviços poderosos com base nele.

Source:
https://adamtheautomator.com/terraform-vpc/