
Por que comecei a usar Terraform — para não perder mais infraestrutura
Em 2020 recriei um ambiente de produção do zero depois de deletar sem querer. Levou três horas tentando lembrar o que tinha configurado. Aprendi que infraestrutura também precisa de versão.
Deletei o ambiente de staging sem querer.
Terminava de limpar recursos que não usava mais. Clicou num EC2 errado. "Terminate". Confirmou. Pronto.
Não era produção — era staging. Mas staging era onde o time testava antes de ir para produção, e eu precisava recriar.
Levei três horas. Porque não tinha documentação. Só a memória de como tinha configurado, que estava errada em vários pontos.
Terraform é infrastructure as code. Em vez de clicar no console AWS para criar recursos, você escreve código que descreve o que você quer, e o Terraform cria.
resource "aws_instance" "api_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
vpc_security_group_ids = [aws_security_group.api.id]
subnet_id = aws_subnet.public.id
tags = {
Name = "api-server"
Environment = "staging"
}
}
resource "aws_security_group" "api" {
name = "api-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 8000
to_port = 8000
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
terraform apply — Terraform lê esse código, compara com o que existe na AWS, e cria/modifica/deleta o necessário para chegar no estado descrito.
O que muda em relação ao console: reprodutibilidade (o ambiente pode ser recriado em minutos, idêntico, toda vez — nenhuma memória necessária), histórico (o código Terraform fica no git — você sabe exatamente quando cada recurso foi criado, modificado, e por quem), review (antes de aplicar mudança de infraestrutura, você faz PR — o mesmo processo que código), e terraform plan (antes de aplicar, você vê exatamente o que vai ser criado, modificado, ou deletado — sem surpresa).
A curva de aprendizado é real. Terraform tem seu próprio jeito de pensar — estado, providers, módulos, variáveis. As primeiras semanas eu criava recursos no console e depois tentava importar para o Terraform, que é a abordagem mais difícil.
O jeito mais fácil: começa do zero. Apaga o console da cabeça e escreve o que você quer em HCL. Deixa o Terraform criar.
Em 2021 e 2022 fui aprofundando — módulos, workspaces, remote state no S3, Atlantis para automação de plan/apply. Mas o ganho fundamental já estava na primeira semana: infraestrutura que você pode reproduzir sem depender de memória.
Depois de perder aquele ambiente de staging, nunca mais criei recurso relevante sem ter o equivalente em Terraform.