IaC: CloudFormation vs SAM vs CDK
- ⬜🐳 ECS Fargate pra dev: quando escolher vs Lambda(AWS Developer Associate (DVA-C02))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Comparação
| Feature | CFN | SAM | CDK |
|---|---|---|---|
| Linguagem | YAML/JSON | YAML (macro) | TS/Python/Java/Go/C# |
| Abstração | Raw | Serverless primitives | L1/L2/L3 constructs |
| Loops/condicionais | Limitado (Fn::If) | Como CFN | Código real |
| Typings/IDE | Fraco | Fraco | Forte |
| Multi-cloud | Não | Não | Não (use Terraform/Pulumi) |
| Curva | Média | Baixa (serverless) | Alta inicial, vale |
- → cdk synth
- → transform
- → direto
- → deploy
- → replica em várias contas
- Gestão e governança
- Compute
- Rede e entrega
- Banco de dados
- Segurança e identidade
Uma frase resolve o tema: CDK e SAM geram template, CloudFormation executa. A escolha entre eles é sobre como você prefere ESCREVER — não sobre quem provisiona.
- Os três terminam em CloudFormation. CDK e SAM não são motores de provisionamento: são formas de GERAR o template. Quem cria, atualiza e reverte é sempre o CloudFormation. Entender isso resolve metade das questões de IaC.
- SAM é CloudFormation com atalho. Um `AWS::Serverless::Function` de dez linhas expande para função, role, permissão e log group. O `Transform` no topo do template é o que dispara essa expansão. Menos YAML para o mesmo resultado.
- CDK quando a infra tem lógica. Loop, condicional, abstração reutilizável, tipagem e teste unitário de infraestrutura. Vale quando o mesmo padrão se repete em muitos ambientes — e é excesso para uma stack simples.
- Change set é a rede de proteção. Antes de aplicar, o CloudFormation mostra o que vai criar, alterar e DESTRUIR. Recurso com replacement significa perda de dado se for um banco — é onde se descobre isso antes, não depois.
- StackSets para multi-conta. A mesma stack aplicada em N contas e regiões de uma vez, a partir da conta de gerenciamento. É a resposta de "padronizar configuração em toda a organização".
Onde isso entra no exame
Espere `!Ref` versus `!GetAtt`, o que sobrevive a um rollback quando existe `DeletionPolicy: Retain`, e por que `sam deploy` empacota código enquanto o CDK sintetiza template. Change set é a resposta quando a questão fala em "revisar o impacto antes de aplicar".
Exemplo comparativo: Lambda + API GW
// CDK (TypeScript)
const fn = new lambda.Function(this, 'MyFn', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('src'),
});
const api = new apigw.LambdaRestApi(this, 'MyApi', { handler: fn });
// 5 linhas. CFN equivalente: ~60 linhas YAML.Um change set indica que uma mudança causará "replacement" no recurso de banco de dados. O que isso significa?
StackSets (multi-account)
StackSets aplicam stack em múltiplas accounts/regions de uma vez (Organizations). Ideal pra bootstrap (baseline security, guardrails) em empresas com 100+ accounts.
Perguntas frequentes
❓ Qual escolher entre modelo declarativo, extensão para sem servidor e kit em linguagem?
❓ O que acontece quando a pilha falha no meio?
❓ Como saber o que vai mudar antes de aplicar?
Fixando
Qual é a vantagem do SAM sobre CloudFormation puro para serverless?
Para que serve o CloudFormation StackSets?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…