Gerenciar infraestrutura cloud pelo console web é como editar código no Notepad — funciona para coisas simples, mas não escala. Terraform permite definir toda sua infraestrutura em arquivos de código: servidores, bancos de dados, redes, DNS, certificados SSL, filas, e qualquer recurso cloud. Versionado no Git, revisado em PR, e aplicado automaticamente.
O modelo declarativo
Terraform usa HCL (HashiCorp Configuration Language), uma linguagem declarativa onde você descreve o estado desejado da infraestrutura em vez de instruções passo a passo. Você diz “quero uma instância EC2 t3.medium com Ubuntu 22.04 na subnet privada” e o Terraform descobre como chegar lá: se a instância não existe, cria; se existe com configuração diferente, modifica; se existe e está correta, não faz nada.
O Terraform mantém um state file que registra o mapeamento entre sua configuração e os recursos reais na cloud. Esse state permite que o Terraform saiba exatamente o que mudar em cada apply. O state deve ser armazenado remotamente (S3, GCS, Terraform Cloud) com locking para evitar que duas pessoas apliquem mudanças simultaneamente e corrompam a infraestrutura.
Estrutura de projeto
Para projetos pequenos, um diretório com main.tf, variables.tf e outputs.tf é suficiente. Para projetos maiores, separe em módulos reutilizáveis: módulo de rede (VPC, subnets, security groups), módulo de compute (instâncias, auto-scaling groups), módulo de dados (RDS, ElastiCache, S3), e módulo de DNS/CDN. Cada módulo tem inputs e outputs bem definidos, como funções em programação.
Workspaces ou diretórios separados por ambiente (dev, staging, prod) permitem reusar a mesma configuração com variáveis diferentes: instâncias menores em dev, réplicas de banco em prod, domínios diferentes por ambiente. A mesma infraestrutura, parametrizada por contexto.
Terraform para AWS: exemplo prático
Uma aplicação web típica na AWS precisa de: VPC com subnets públicas e privadas, Application Load Balancer para distribuir tráfego, ECS Fargate para rodar containers sem gerenciar servidores, RDS PostgreSQL para banco de dados, ElastiCache Redis para cache, S3 para assets estáticos, CloudFront como CDN, Route53 para DNS, e ACM para certificados SSL. Com Terraform, toda essa infraestrutura é definida em 200-300 linhas de HCL e criada em 15 minutos com terraform apply.
Sem Terraform, configurar tudo isso no console AWS leva horas, é propenso a erros, não é reproduzível, e não tem histórico de mudanças. Com Terraform, recriar a infraestrutura inteira é um comando. Desastre recovery passa de dias para minutos.
Módulos da comunidade
O Terraform Registry oferece milhares de módulos prontos mantidos pela comunidade e pela HashiCorp. O módulo terraform-aws-modules/vpc cria uma VPC completa com subnets, NAT gateways e route tables em 5 linhas de configuração. O módulo de ECS cria cluster, service e task definition com todas as melhores práticas. Usar módulos da comunidade acelera enormemente o desenvolvimento e implementa padrões de segurança que você poderia esquecer.
Segurança e boas práticas
Nunca armazene secrets em arquivos Terraform. Use referências a AWS Secrets Manager ou SSM Parameter Store para senhas e chaves. Implemente least privilege: cada recurso deve ter apenas as permissões mínimas necessárias. Use terraform plan antes de apply para revisar exatamente o que será criado, modificado ou destruído — especialmente importante porque um terraform apply descuidado pode deletar bancos de dados em produção.
Checkov e tfsec fazem análise estática de segurança nos arquivos Terraform, identificando configurações inseguras como security groups abertas para 0.0.0.0/0, buckets S3 sem criptografia, ou RDS sem backup habilitado. Integre na pipeline de CI/CD para bloquear merge de configurações inseguras antes que cheguem a produção.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.