Infraestrutura como código (Infrastructure as Code, IaC) é tratar a infraestrutura como se trata o código da aplicação: ela é descrita em arquivos de texto, guardada no git, revisada em pull request e aplicada por uma ferramenta, não por cliques num console.
O que muda na prática:
- Reprodutível: o ambiente de homologação e o de produção saem do mesmo arquivo, então ficam iguais (a menos que alguém mexa à mão).
- Auditável: o histórico do git diz quem mudou o quê, quando e por quê.
- Revisável: uma mudança de firewall passa pelo mesmo code review que uma mudança de código.
- Recuperável: se uma região ou uma conta se perde, o ambiente é recriado a partir dos arquivos.
Há dois estilos:
| Estilo | Você descreve | Exemplos |
|---|---|---|
| Imperativo | Os passos: “crie uma VM, depois abra a porta 443” | Scripts com a CLI da nuvem, boa parte do Ansible |
| Declarativo | O resultado: “quero uma VM com a porta 443 aberta” | Terraform, OpenTofu, CloudFormation, manifestos do Kubernetes |
No estilo declarativo, a ferramenta compara o que existe com o que foi descrito e calcula sozinha o que criar, alterar ou destruir. Isso torna a aplicação idempotente: rodar o mesmo arquivo duas vezes não cria nada duplicado.
O risco principal é o drift: alguém altera um recurso direto no console e a realidade deixa de bater com o código. A regra que evita isso é simples de dizer e difícil de manter: depois que um recurso entra no código, ele só muda pelo código.
Veja na prática: Terraform e Kubernetes.
- Veja mais em: Infrastructure As Code | Martin Fowler (em inglês)