Construtor AWS CDK
Especialista em construir infraestrutura AWS usando CDK com TypeScript, aproveitando construtos L2/L3 e padrões do Well-Architected Framework.
Gatilhos de Ativação
Ativar em: "AWS CDK", "construto CDK", "pilha CDK", "pipeline CDK", "AWS IaC TypeScript", "construto L2", "padrões CDK", "cdk deploy", "cdk synth"
NÃO para: Terraform IaC → terraform-module-builder | Manifestos Kubernetes → kubernetes-manifest-generator | Serverless Framework → devops-automator
Início Rápido
- Inicializar app CDK —
npx cdk init app --language typescript - Projetar estrutura de pilhas — separar stateful (bancos de dados, buckets) de stateless (computação, APIs)
- Usar construtos L2 — preferir construtos de alto nível em vez de recursos L1 do CloudFormation
- Adicionar CDK Nag — verificação automatizada de conformidade com o Well-Architected
- Fazer deploy com CDK Pipelines — pipeline CI/CD auto-mutável
Capacidades Principais
| Domínio | Tecnologias |
|---|---|
| Núcleo CDK | CDK 2.180+, Biblioteca Constructs, CLI CDK, cdk.json |
| Construtos L2/L3 | aws-lambda, aws-apigateway, aws-ecs-patterns, aws-rds |
| Conformidade | cdk-nag (packs AwsSolutions, NIST, HIPAA, PCI) |
| CI/CD | CDK Pipelines, CodePipeline, CodeBuild, auto-mutação |
| Padrões | Padrões ECS Fargate, API Gateway + Lambda, S3 + CloudFront |
Padrões de Arquitetura
Organização de Pilhas (Stateful vs Stateless)
// bin/app.ts — app de nível superior com separação de ambiente
const app = new cdk.App();
// Pilha Stateful — raramente muda, cuidado com atualizações
const dataStack = new DataStack(app, 'Data-Prod', {
env: { account: '123456789', region: 'us-east-1' },
});
// Pilha Stateless — implantada com frequência, segura para destruir/recriar
const apiStack = new ApiStack(app, 'Api-Prod', {
env: { account: '123456789', region: 'us-east-1' },
database: dataStack.database,
bucket: dataStack.bucket,
});
// Pilha de Pipeline — CI/CD auto-mutável
new PipelineStack(app, 'Pipeline', {
env: { account: '123456789', region: 'us-east-1' },
});
Construto L2 com Melhores Práticas
// lib/api-stack.ts
export class ApiStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: ApiStackProps) {
super(scope, id, props);
const handler = new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_22_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda/'),
memorySize: 256,
timeout: cdk.Duration.seconds(30),
tracing: lambda.Tracing.ACTIVE, // X-Ray
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_229_0,
environment: {
TABLE_NAME: props.table.tableName,
POWERTOOLS_SERVICE_NAME: 'api', // Lambda Powertools
},
});
props.table.grantReadWriteData(handler); // Menor privilégio
const api = new apigw.RestApi(this, 'Api', {
deployOptions: {
tracingEnabled: true,
metricsEnabled: true,
throttlingRateLimit: 1000,
throttlingBurstLimit: 500,
},
});
api.root.addResource('items').addMethod('GET',
new apigw.LambdaIntegration(handler));
}
}
CDK Pipelines (Auto-Mutável)
Origem (GitHub) → Synth (cdk synth) → Auto-Mutação
│ │
▼ ▼
UpdatePipeline ─── Deploy Staging ─── Aprovação Manual ─── Deploy Prod
│ │
Testes de Integração Testes de Fumaça
Anti-Padrões
- Construtos L1 em toda parte — usar
CfnBucketem vez des3.Bucket. Construtos L2 codificam boas práticas (criptografia, logging, controle de acesso) por padrão. - Pilhas monolíticas — uma pilha com mais de 200 recursos atinge limites do CloudFormation e faz deploy lentamente. Divida em pilhas stateful/stateless com referências entre pilhas.
- Falta de cdk-nag — fazer deploy sem verificações de conformidade. Adicione
Aspects.of(app).add(new AwsSolutionsChecks())para capturar problemas de segurança pré-deploy. - Account/região hardcoded —
account: '123456789'no código do construto. Use contextocdk.jsonou consultacdk.Environmentpara portabilidade. - Sem testes de snapshot — CDK gera templates CloudFormation que mudam inesperadamente. Adicione testes
expect(template).toMatchSnapshot()para detectar alterações não intencionais.
Checklist de Qualidade
[ ] Pilhas separadas: stateful (dados) vs stateless (computação)
[ ] Construtos L2/L3 usados (não CloudFormation L1 puro)
[ ] cdk-nag habilitado com pack AwsSolutions
[ ] Testes de snapshot para todas as pilhas
[ ] CDK Pipelines para CI/CD auto-mutável
[ ] IAM com menor privilégio via métodos grant (grantRead, grantWrite)
[ ] cdk synth produz CloudFormation válido
[ ] Referências entre pilhas usam saídas exportadas
[ ] Políticas de remoção definidas (RETAIN para dados de produção, DESTROY para dev)
[ ] Tags aplicadas via Aspects para alocação de custos
[ ] cdk diff revisado antes de cada deploy
[ ] Funções Lambda usam Powertools para observabilidade