Infraestrutura como Código: Do Click ao Git

Durante décadas, infraestrutura era configurada com clicks em consoles, comandos manuais e documentação em wikis que ninguém atualizava. Infraestrutura como Código (IaC) mudou esse paradigma — mas muitas equipas ainda tratam IaC como “scripts de deploy” em vez de software de verdade.

## O Que IaC Realmente Significa

IaC não é apenas usar Terraform. É aplicar práticas de engenharia de software à infraestrutura:

– **Versionamento**: cada mudança tem commit, autor, timestamp e razão
– **Code Review**: ninguém aplica mudanças sem revisão
– **Testes**: validate, plan, policy checks em CI antes do apply
– **CI/CD**: pipeline que testa e aplica automaticamente
– **DRY**: módulos reutilizáveis em vez de copy-paste
– **Documentação viva**: o código é a documentação (com READMEs quando necessário)

## Terraform, OpenTofu e o Ecossistema

Terraform domina o mercado, mas o fork OpenTofu ganhou tração após a mudança de licença da HashiCorp. Ambos usam HCL declarativo e o mesmo modelo de providers.

### Ferramentas Que Complementam IaC

– **Terragrunt** — DRY para Terraform: mantenha configurações de backend, providers e variáveis num só lugar
– **Atlantis** — “Terraform Pull Request Automation”: plan automático no PR, apply via comentário
– **Infracost** — estimativa de custos no PR: “este change vai custar +$143/mês”
– **Checkov / tfsec** — scanning de segurança e compliance
– **Driftctl** — detecta drift entre código e estado real

## Padrões Que Funcionam

### 1. Estrutura de Repositório

Não há consenso, mas um padrão testado:

“`
infra/
├── modules/
│ ├── networking/
│ ├── kubernetes/
│ └── database/
├── environments/
│ ├── dev/
│ ├── staging/
│ └── prod/
└── global/
├── dns/
└── iam/
“`

### 2. Remote State com Locking

State local = desastre. Use S3 + DynamoDB (AWS), ou Terraform Cloud com locking automático. Nunca comite state files no Git.

### 3. Módulos Versionados

Módulos internos devem ser versionados com tags Git. “Latest” não é uma versão — é um incidente à espera de acontecer.

### 4. Variáveis por Ambiente

Use `.tfvars` ou Terragrunt para definir variáveis por ambiente. Separe configuração (terraform.tfvars) de infraestrutura (.tf).

## Pulumi: IaC com Linguagens de Programação

Se precisa de loops, condicionais e abstrações que o HCL não oferece bem, Pulumi permite escrever infraestrutura em TypeScript, Python, Go ou C#. Aproveita ecossistemas de teste (pytest, jest), IDEs e type checking.

## O Próximo Passo: Policy as Code

IaC garante que a infraestrutura está em código. Policy as Code garante que o código segue as regras:

– “S3 buckets nunca podem ser públicos”
– “Security groups não podem ter 0.0.0.0/0 na porta 22”
– “RDS precisa de encryption at rest”

Open Policy Agent (OPA), Sentinel e Kyverno permitem validar IaC antes do deploy — e rejeitar se violar políticas.

## Conclusão

IaC não é sobre ferramentas — é sobre disciplina. O objetivo não é “usar Terraform”, é ter infraestrutura tão confiável e auditável quanto o código da aplicação. Cada recurso criado com click no console é dívida técnica que um dia será cobrada — geralmente às 3 da manhã de um domingo.

Na Cloud Architects, tratamos infraestrutura como produto de software: versionada, testada, revisada e deployada automaticamente.

Deixe um comentário