Terraform vs Ansible vs Pulumi: qual IaC?
Terraform provisiona infraestrutura de forma declarativa em HCL com state; Ansible configura e orquestra de forma procedural; Pulumi escreve IaC em linguagens reais.
Terraform declara a infraestrutura desejada em HCL e reconcilia via um state file entre muitos providers, destacando-se em provisionamento. Ansible roda tarefas ordenadas sobre SSH (agentless) para configurar servidores e orquestrar mudanças, destacando-se em gestão de configuração e deploy de app. Pulumi expressa infraestrutura em TypeScript, Python ou Go, trazendo loops, funções e testes para a IaC. Eles se sobrepõem mas enfatizam camadas diferentes.
| Terraform | Ansible | Pulumi | |
|---|---|---|---|
| Modelo | Declarativo (HCL) | Procedural (tarefas YAML) | Declarativo (código real) |
| Força | Provisionamento | Gestão de configuração | Provisionamento + lógica |
| State | State file | Stateless (majoritariamente) | State (backend) |
| Linguagem | HCL | YAML | TS/Python/Go |
| Melhor para | Provisionamento de nuvem | Config de servidor, orquestração | IaC orientada a código |
Papéis e sobreposição
Terraform é a escolha comum para provisionar recursos de nuvem de forma declarativa. Ansible é forte para configurar esses recursos, instalar software e orquestrar mudanças multi-etapa sem gerenciar state. Pulumi se adequa a times que querem todo o poder de uma linguagem de programação, abstrações e testes unitários em sua IaC. Muitas empresas combinam Terraform (provisionar) com Ansible (configurar), ou escolhem Pulumi para manter tudo em uma linguagem.
Em CI
Rode plan/preview nos PRs, faça o gate do apply atrás de review e armazene credenciais de nuvem no secret store do CI usando OIDC sempre que possível. Os três rodam em runners gerenciados, onde runners mais rápidos encurtam as etapas de plan, preview e apply.
O veredito
Provisionamento multi-cloud declarativo: Terraform. Configuração de servidores e orquestração procedural: Ansible. IaC em uma linguagem de programação real com lógica e testes: Pulumi. A combinação clássica é Terraform mais Ansible; Pulumi substitui a camada HCL quando os times preferem linguagens de propósito geral.