OpenTofu na AWS: do Zero à Infraestrutura Real
Autor: Andrew Ramires

3.2 Primeira VPC

Nesta etapa, vamos continuar o projeto para criar a primeira VPC na AWS.

⚡ Visão rápida: agora o projeto deixa de apenas consultar dados da AWS e passa a criar um recurso real de rede.

A ideia aqui é usar a estrutura que já foi montada nas fases anteriores e adicionar no main.tf um bloco de recurso para a VPC.

Vamos fazer isso em duas etapas:

  • primeiro criar a VPC;
  • depois modificar a infraestrutura para adicionar o nome por variável.
🧠 Mergulho profundo
Documentação oficial:
Abrir documentação do recurso aws_vpc
Abrir documentação do bloco output

3.2.1 Criando a VPC

Nesta etapa, a mudança principal acontece no main.tf, porque é nele que vamos adicionar o primeiro recurso de infraestrutura da fase.

Adicione ao main.tf um bloco como este:

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

Esse bloco instrui o OpenTofu a criar uma VPC com a rede 10.0.0.0/16.

Depois disso, ajuste também o output.tf.

Além dos outputs que já existem no projeto, adicione mais um output para exibir o identificador interno da VPC criada.

No valor aws_vpc.main.id:

  • aws_vpc: é o tipo do recurso;
  • main: é o nome lógico que demos para esse recurso no projeto;
  • id: é o atributo interno gerado pela AWS depois da criação da VPC.

O bloco deve ficar assim:

output "vpc_id" {
  value = aws_vpc.main.id
}

Isso é útil porque o id da VPC só existe depois da criação do recurso.

Mais para frente, esse valor poderá ser usado para encadear subnets, tabelas de rota, internet gateway, security groups e outros recursos de rede.

Se o projeto já está inicializado e o provider AWS não mudou, você pode seguir direto para o plano:

tofu plan

O esperado é que o plano mostre a criação da nova VPC.

Resources: 1 added, 0 changed, 0 destroyed.

Imagem de referência do plano no terminal:

Plano no terminal mostrando a criação da VPC

Depois de revisar o plano, aplique:

tofu apply

Ao confirmar, o OpenTofu vai criar a VPC na AWS e registrar essa criação no arquivo de state.

Ou seja: além de existir na nuvem, a VPC também passa a existir como referência salva no projeto.

Como resultado desse primeiro apply, você deve conseguir ver a VPC criada na AWS ainda sem a tag Name.

VPC criada após o primeiro apply ainda sem tag Name

3.2.2 Adicionar o nome da VPC com variável

Agora vamos modificar a infraestrutura já existente.

Em vez de escrever o nome diretamente dentro do recurso, a ideia é declarar uma variável para isso.

No variables.tf, adicione:

variable "vpc_name" {
  type = string
}

No terraform.tfvars, adicione um valor para essa variável:

vpc_name = "andrew-42"

Se o curso inteiro estiver sendo feito dentro da mesma conta AWS por vários alunos, esse padrão ajuda bastante.

Nesse cenário, o ideal é cada aluno usar algo como nome-matricula para evitar confusão visual e facilitar a identificação da VPC dentro da conta compartilhada.

3.2.3 Modificar o recurso existente

Agora volte ao main.tf e ajuste o recurso que já existe.

Neste passo, vamos adicionar a tag Name a essa VPC.

Altere o bloco aws_vpc.main para que ele fique assim:

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = var.vpc_name
  }
}

O ponto principal aqui é simples: o recurso já existe, então estamos apenas alterando um atributo.

Trecho adicionado ao recurso:

tags = {
  Name = var.vpc_name
}

Depois disso, execute:

tofu plan

O plano deve indicar algo nesta linha:

Resources: 0 added, 1 changed, 0 destroyed.

Isso mostra que adicionar a tag Name nessa VPC não exige destruir e recriar o recurso.

Depois de revisar o resultado, aplique:

tofu apply

Esse apply atualiza a VPC já criada e grava essa nova condição no state.

Depois dessa alteração, a VPC já deve aparecer nomeada no console da AWS.

VPC nomeada após a adição da tag Name

É importante entender o papel dessa tag Name.

Ela ajuda muito na identificação visual do recurso no console da AWS, mas ela não é um identificador único.

Na prática, seria possível ter várias VPCs com o mesmo valor na tag Name.

O identificador único real da AWS continua sendo o vpc_id, que é exatamente o valor que estamos exibindo no output.

3.2.4 Resultado esperado

No final desse processo, você terá passado por dois momentos diferentes:

  • criação da VPC;
  • modificação da VPC já existente.

Isso ajuda a perceber na prática a diferença entre:

  • criar infraestrutura nova;
  • modificar infraestrutura existente.

3.2.5 Verificando na AWS

Depois do segundo apply, você já pode abrir o console da AWS e verificar a VPC visualmente.

Nesse momento, você deve conseguir ver:

  • a VPC criada na região configurada no projeto;
  • o id da VPC;
  • a tag Name definida com o valor da variável.

Na prática, isso confirma algumas coisas importantes:

  • o provider AWS está funcionando;
  • o OpenTofu conseguiu criar um recurso real;
  • o OpenTofu conseguiu modificar esse mesmo recurso sem recriá-lo;
  • a VPC agora já pode servir como base para as próximas etapas de rede.