Constructeur AWS CDK
Expert dans la construction d'infrastructure AWS avec CDK en TypeScript, en exploitant les constructs L2/L3 et les modèles du framework Well-Architected.
Déclencheurs d'activation
Activer sur : "AWS CDK", "CDK construct", "CDK stack", "CDK pipeline", "AWS IaC TypeScript", "L2 construct", "CDK patterns", "cdk deploy", "cdk synth"
PAS pour : Terraform IaC → terraform-module-builder | Manifests Kubernetes → kubernetes-manifest-generator | Serverless Framework → devops-automator
Démarrage rapide
- Initialiser l'application CDK —
npx cdk init app --language typescript - Concevoir la structure des stacks — séparer les stacks avec état (bases de données, buckets) de celles sans état (compute, API)
- Utiliser des constructs L2 — préférer les constructs de haut niveau aux ressources L1 CloudFormation
- Ajouter CDK Nag — vérification automatisée de la conformité Well-Architected
- Déployer avec CDK Pipelines — pipeline CI/CD auto-mutant
Capacités principales
| Domaine | Technologies |
|---|---|
| CDK Core | CDK 2.180+, Constructs library, CDK CLI, cdk.json |
| Constructs L2/L3 | aws-lambda, aws-apigateway, aws-ecs-patterns, aws-rds |
| Conformité | cdk-nag (packs AwsSolutions, NIST, HIPAA, PCI) |
| CI/CD | CDK Pipelines, CodePipeline, CodeBuild, auto-mutation |
| Modèles | Modèles ECS Fargate, API Gateway + Lambda, S3 + CloudFront |
Modèles d'architecture
Organisation des stacks (avec état vs sans état)
// bin/app.ts — application de niveau supérieur avec séparation des environnements
const app = new cdk.App();
// Stack avec état — rarement modifiée, prudent lors des mises à jour
const dataStack = new DataStack(app, 'Data-Prod', {
env: { account: '123456789', region: 'us-east-1' },
});
// Stack sans état — déployée fréquemment, sûre à détruire/recréer
const apiStack = new ApiStack(app, 'Api-Prod', {
env: { account: '123456789', region: 'us-east-1' },
database: dataStack.database,
bucket: dataStack.bucket,
});
// Stack de pipeline — CI/CD auto-mutant
new PipelineStack(app, 'Pipeline', {
env: { account: '123456789', region: 'us-east-1' },
});
Construct L2 avec bonnes pratiques
// 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); // Moindre privilège
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));
}
}
Pipelines CDK (auto-mutants)
Source (GitHub) → Synth (cdk synth) → Auto-mutation
│ │
▼ ▼
UpdatePipeline ─── Déploiement Staging ─── Approbation manuelle ─── Déploiement Prod
│ │
Tests d'intégration Tests de fumée
Anti-modèles
- Utiliser des constructs L1 partout — utiliser
CfnBucketau lieu des3.Bucket. Les constructs L2 intègrent les bonnes pratiques (chiffrement, journalisation, contrôle d'accès) par défaut. - Stacks monolithiques — une seule stack avec plus de 200 ressources atteint les limites de CloudFormation et se déploie lentement. Séparez en stacks avec/sans état avec des références inter-stacks.
- Absence de cdk-nag — déploiement sans vérification de conformité. Ajoutez
Aspects.of(app).add(new AwsSolutionsChecks())pour détecter les problèmes de sécurité avant le déploiement. - Compte/région codés en dur —
account: '123456789'dans le code du construct. Utilisez le contextecdk.jsonou la recherchecdk.Environmentpour la portabilité. - Pas de tests de snapshot — CDK génère des modèles CloudFormation qui changent de manière inattendue. Ajoutez des tests
expect(template).toMatchSnapshot()pour détecter les changements non intentionnels.
Checklist de qualité
[ ] Stacks séparées : avec état (data) vs sans état (compute)
[ ] Constructs L2/L3 utilisés (pas de CloudFormation L1 brut)
[ ] cdk-nag activé avec le pack AwsSolutions
[ ] Tests de snapshot pour toutes les stacks
[ ] Pipelines CDK pour CI/CD auto-mutant
[ ] IAM au moindre privilège via les méthodes grant (grantRead, grantWrite)
[ ] cdk synth produit un CloudFormation valide
[ ] Références inter-stacks utilisent des sorties exportées
[ ] Politiques de suppression définies (RETAIN pour les données de production, DESTROY pour le développement)
[ ] Tags appliqués via Aspects pour l'allocation des coûts
[ ] cdk diff examiné avant chaque déploiement
[ ] Les fonctions Lambda utilisent Powertools pour l'observabilité