Resumo para os apressados#
| Critério | Terraform | Pulumi |
|---|---|---|
| Linguagem | HCL (declarativa) | TypeScript, Python, Go, C#, Java |
| Estado | Arquivo .tfstate ou remote backend | SaaS (Pulumi Cloud) ou self-hosted |
| Maturidade | 2014, enorme comunidade | 2018, crescimento rápido |
| Curva de aprendizado | Baixa/média (HCL é simples) | Média (precisa saber programar) |
| Ecossistema | 3.000+ providers no Registry | Providers oficiais + bridge Terraform |
| Preço | Grátis (OSS) + HCP Terraform pago | Grátis (OSS) + Pulumi Cloud pago |
| Melhor para | Times DevOps tradicionais | Times que já codam (Dev + Ops) |
O que é Infra as Code e por que comparar?#
Infrastructure as Code (IaC) é a prática de gerenciar infraestrutura (servidores, redes, bancos) usando arquivos de configuração versionáveis, em vez de cliques no console da AWS.
As duas ferramentas mais relevantes hoje são:
- Terraform: o padrão de facto desde ~2017
- Pulumi: o challenger que usa linguagens de programação reais
Vamos aos detalhes.
1. Linguagem: HCL vs Código Real#
Terraform usa HCL#
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "servidor-web"
}
}HCL (HashiCorp Configuration Language) é uma DSL declarativa. Você descreve o que quer, não como fazer.
Vantagem: Simples, legível, padronizado. Qualquer pessoa do time lê.
Desvantagem: Sem loops complexos, sem funções avançadas. Para lógica condicional mais elaborada o código começa a ficar cavernoso.
Pulumi usa linguagens reais#
import * as aws from "@pulumi/aws";
const server = new aws.ec2.Instance("web", {
ami: "ami-0c55b159cbfafe1f0",
instanceType: "t2.micro",
tags: { Name: "servidor-web" },
});
export const publicIp = server.publicIp;Vantagem: Você usa if, for, map, filter, todas as construções que já conhece. Pode importar bibliotecas npm/PyPI. Testes unitários com Jest/Pytest.
Desvantagem: Quem não programa fica de fora. O código de infra pode virar “código spaghetti” se o time não tiver disciplina.
Veredito#
| Time tradicional DevOps → | Terraform (HCL é suficiente) |
|---|---|
| Time de engenharia que já coda → | Pulumi (reaproveita skills) |
2. Gerenciamento de Estado#
Toda ferramenta IaC precisa saber o que já foi criado. Isso é o state.
Terraform#
- State file (
.tfstate) - Remote backends: S3 locking, GCS, Azure Storage, HCP Terraform
- Você gerencia o backend, precisa configurar bucket, locking, criptografia
Pulumi#
- Pulumi Cloud (SaaS gratuito para 1 usuário, $ para times)
- Ou self-hosted: S3, GCS, Azure, etc. (igual ao Terraform)
- Vantagem: o SaaS já resolve locking, criptografia, histórico
Veredito#
Pulumi Cloud é mais simples de começar. Terraform exige um pouco mais de setup inicial, mas é mais flexível.
3. Ecossistema e Maturidade#
Terraform#
- 3.000+ providers no Terraform Registry
- Comunidade massiva: Stack Overflow, GitHub, HashiCorp Learn
- OpenTofu (fork open-source após mudança de licença da HashiCorp)
- Módulos oficiais AWS, GCP, Azure mantidos pelos próprios vendors
Pulumi#
- Providers nativos para AWS, Azure, GCP, Kubernetes (mantidos pela Pulumi)
- Bridge: converte providers Terraform para Pulumi automaticamente
- Comunidade menor mas crescendo rápido
- ~150 providers no Registry
Veredito#
Terraform ganha de lavada em quantidade de providers e suporte da comunidade. Se você precisa de um provider obscuro (ex: provedor de DNS regional), Terraform é a escolha segura.
4. Quando usar cada um?#
Escolha Terraform se:#
- Seu time é DevOps tradicional (não necessariamente programa)
- Você precisa de providers nichados
- Já tem infra gerenciada com Terraform (não reinvente a roda)
- Quer a opção mais “padrão de mercado” (contratação mais fácil)
Escolha Pulumi se:#
- Seu time já programa (usam TypeScript/Python diariamente)
- Você quer testar infra com Jest/Pytest
- Precisa de lógica complexa (loops, condicionais, abstrações)
- Quer adotar práticas de software engineering na infra (DRY, herança, reuso)
5. E se eu já tenho Terraform?#
O Pulumi oferece o comando pulumi convert que converte código Terraform (HCL) para Pulumi (TypeScript/Python). Não é 100% automático, mas ajuda na migração.
Outra opção: usar os dois. Times maiores às vezes mantêm Terraform para o “core” (VPC, IAM, redes) e Pulumi para aplicações (Kubernetes, serverless). Não existe solução única.
Conclusão#
| Se você… | Vá de… |
|---|---|
| Está começando e já programa | Pulumi |
| Quer o padrão do mercado | Terraform |
| Precisa de providers obscuros | Terraform |
| Quer testar infra com código | Pulumi |
| Tem um time misto (Dev + Ops) | Pulumi (quem não programa pode aprender TypeScript básico) |
Minha dica final seria testar os dois, se você pretende trabalhar como DevOps, precisa do Terraform de qualquer maneira. E como eu presumo que você já saiba alguma linguagem de programação, a curva de aprendizado para testar o Pulumi não seria nada grandioso.
A flexibilidade de uma linguagem real e a possibilidade de testar infraestrutura com testes unitários são diferenciais que o HCL simplesmente não oferece.
Tem alguma dúvida específica sobre Terraform ou Pulumi? me encontre no LinkedIn.
