Construindo uma VPC AWS com Terraform Passo a Passo

Se você precisa configurar AWS Virtual Private Cloud (VPC), você poderia fazer isso através do AWS Management Console, mas automatizar isso é muito mais divertido! Em um cenário de DevOps, construir serviços AWS por meio de ferramentas como Terraform é uma abordagem mais escalável e automatizada para o provisionamento de recursos na nuvem.

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

Pré-requisitos

Este post será um tutorial passo a passo. Se você deseja acompanhar, certifique-se de ter o seguinte em lugar:

  • Terraform – Este tutorial usará o Terraform v0.14.9 rodando 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.

Entendendo os VPCs da AWS

O serviço de nuvem da AWS possui dezenas de diversos serviços, desde computação, armazenamento, rede e muito 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 entre si e não necessariamente isolado dos outros serviços. O VPC da AWS muda isso.

Um VPC da AWS é uma única rede que permite que você inicie 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, como escalabilidade, tolerância a falhas, armazenamento ilimitado, etc.

AWS VPC architecture

Os VPCs da AWS são restritos por região. Não é possível ter um VPC que se estenda por 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 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 de 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çado pelo mundo exterior.
  • Cria uma sub-rede pública e privada

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 ‘pedaços’ 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 se conectem à 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 usando 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 de Internet
    vpc_id =  aws_vpc.Main.id               # vpc_id 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 via Gateway de 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 via 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.

4. Crie mais um arquivo dentro do diretório ~/terraform-vpc-demo, cole o seguinte código e nomeie 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 com os serviços de nuvem corretos. provider "aws" { region = "us-east-2" }

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

5. Finalmente, crie mais um arquivo dentro do diretório ~/terraform-vpc-demo, nomeie 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 o AWS VPC

Agora que você tem o arquivo de configuração do Terraform e os arquivos de variáveis prontos, é hora de iniciar o Terraform e criar a VPC! Para provisionar uma configuração do Terraform, o Terraform geralmente usa uma abordagem de três estágios terraform initterraform planterraform apply. Vamos passar por cada estágio agora.

1. Abra um terminal e navegue até 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 que são 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, conforme 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 na sua infraestrutura. terraform plan

terraform plan

Se for bem-sucedido, você 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 provisionar efetivamente 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 da AWS

Neste ponto, você deverá ter criado a VPC com o Terraform. Vamos verificar manualmente no Console de Gerenciamento da AWS se a VPC foi criada.

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

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

Navigating to the VPC service

3. Uma vez na página da 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 uso!

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 em cima dele.

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