Constructor AWS CDK
Experto en construir infraestructura AWS usando CDK con TypeScript, aprovechando constructos L2/L3 y patrones del Marco de Well-Architected.
Disparadores de Activación
Activar en: "AWS CDK", "CDK construct", "CDK stack", "CDK pipeline", "AWS IaC TypeScript", "L2 construct", "CDK patterns", "cdk deploy", "cdk synth"
NO para: Terraform IaC → terraform-module-builder | Manifiestos Kubernetes → kubernetes-manifest-generator | Serverless Framework → devops-automator
Inicio Rápido
- Inicializar app CDK —
npx cdk init app --language typescript - Diseñar estructura de stacks — separar stateful (bases de datos, buckets) de stateless (cómputo, APIs)
- Usar constructos L2 — preferir constructos de alto nivel sobre recursos L1 de CloudFormation
- Agregar CDK Nag — verificación automatizada de cumplimiento Well-Architected
- Desplegar con CDK Pipelines — pipeline CI/CD auto-mutante
Capacidades Principales
| Dominio | Tecnologías |
|---|---|
| CDK Core | CDK 2.180+, Constructs library, CDK CLI, cdk.json |
| Constructos L2/L3 | aws-lambda, aws-apigateway, aws-ecs-patterns, aws-rds |
| Cumplimiento | cdk-nag (paquetes AwsSolutions, NIST, HIPAA, PCI) |
| CI/CD | CDK Pipelines, CodePipeline, CodeBuild, auto-mutación |
| Patrones | Patrones ECS Fargate, API Gateway + Lambda, S3 + CloudFront |
Patrones de Arquitectura
Organización de Stacks (Stateful vs Stateless)
// bin/app.ts — app de nivel superior con separación de entornos
const app = new cdk.App();
// Stack stateful — rara vez cambia, cuidado con actualizaciones
const dataStack = new DataStack(app, 'Data-Prod', {
env: { account: '123456789', region: 'us-east-1' },
});
// Stack stateless — desplegado frecuentemente, seguro de destruir/recrear
const apiStack = new ApiStack(app, 'Api-Prod', {
env: { account: '123456789', region: 'us-east-1' },
database: dataStack.database,
bucket: dataStack.bucket,
});
// Pipeline stack — CI/CD auto-mutante
new PipelineStack(app, 'Pipeline', {
env: { account: '123456789', region: 'us-east-1' },
});
Constructo L2 con Mejores Prácticas
// 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); // Mínimo privilegio
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-Mutantes)
Fuente (GitHub) → Synth (cdk synth) → Auto-Mutación
│ │
▼ ▼
UpdatePipeline ─── Desplegar Staging ─── Aprobación Manual ─── Desplegar Prod
│ │
Pruebas de Integración Pruebas de Humo
Anti-Patrones
- Constructos L1 en todas partes — usar
CfnBucketen lugar des3.Bucket. Los constructos L2 codifican mejores prácticas (cifrado, registro, control de acceso) por defecto. - Stacks monolíticos — un stack con 200+ recursos alcanza límites de CloudFormation y se despliega lentamente. Dividir en stacks stateful/stateless con referencias entre stacks.
- Falta de cdk-nag — desplegar sin verificaciones de cumplimiento. Agregar
Aspects.of(app).add(new AwsSolutionsChecks())para detectar problemas de seguridad antes del despliegue. - Cuenta/región hardcodeadas —
account: '123456789'en código de constructo. Usar contexto decdk.jsono búsquedacdk.Environmentpara portabilidad. - Sin pruebas de snapshot — CDK genera plantillas CloudFormation que cambian inesperadamente. Agregar pruebas
expect(template).toMatchSnapshot()para detectar cambios no intencionados.
Lista de Verificación de Calidad
[ ] Stacks separados: stateful (datos) vs stateless (cómputo)
[ ] Constructos L2/L3 usados (no CloudFormation L1 directo)
[ ] cdk-nag habilitado con paquete AwsSolutions
[ ] Pruebas de snapshot para todos los stacks
[ ] CDK Pipelines para CI/CD auto-mutante
[ ] IAM de mínimo privilegio mediante métodos grant (grantRead, grantWrite)
[ ] cdk synth produce CloudFormation válido
[ ] Referencias entre stacks usan salidas exportadas
[ ] Políticas de eliminación establecidas (RETAIN para datos de producción, DESTROY para desarrollo)
[ ] Etiquetas aplicadas mediante Aspects para asignación de costos
[ ] cdk diff revisado antes de cada despliegue
[ ] Funciones Lambda usan Powertools para observabilidad