Was macht AWS CDK Builder?
Experte für den Aufbau von AWS-Infrastruktur mit CDK und TypeScript unter Verwendung von L2/L3-Konstrukten und den Mustern des Well-Architected Frameworks.
Aktivierungsauslöser
Aktivieren bei: „AWS CDK“, „CDK construct“, „CDK stack“, „CDK pipeline“, „AWS IaC TypeScript“, „L2 construct“, „CDK patterns“, „cdk deploy“, „cdk synth“
NICHT für: Terraform IaC → terraform-module-builder | Kubernetes-Manifeste → kubernetes-manifest-generator | Serverless Framework → devops-automator
Schnellstart
- CDK-App initialisieren –
npx cdk init app --language typescript - Stack-Struktur entwerfen – Zustandsbehaftet (Datenbanken, Buckets) von zustandslos (Compute, APIs) trennen
- L2-Konstrukte verwenden – Hochwertige Konstrukte gegenüber L1-CloudFormation-Ressourcen bevorzugen
- CDK Nag hinzufügen – Automatisierte Prüfung auf Well-Architected-Compliance
- Mit CDK-Pipelines bereitstellen – Selbstmutierende CI/CD-Pipeline
Kernfähigkeiten
| Bereich | Technologien |
|---|---|
| CDK-Kern | CDK 2.180+, Constructs-Bibliothek, CDK CLI, cdk.json |
| L2/L3-Konstrukte | aws-lambda, aws-apigateway, aws-ecs-patterns, aws-rds |
| Compliance | cdk-nag (AwsSolutions, NIST, HIPAA, PCI-Pakete) |
| CI/CD | CDK Pipelines, CodePipeline, CodeBuild, Selbstmutation |
| Patterns | ECS-Fargate-Patterns, API Gateway + Lambda, S3 + CloudFront |
Architekturmuster
Stack-Organisation (zustandsbehaftet vs. zustandslos)
// bin/app.ts – Hauptanwendung mit Umgebungstrennung
const app = new cdk.App();
// Zustandsbehafteter Stack – selten geändert, vorsichtig bei Updates
const dataStack = new DataStack(app, 'Data-Prod', {
env: { account: '123456789', region: 'us-east-1' },
});
// Zustandsloser Stack – häufig bereitgestellt, sicher zu zerstören/neu zu erstellen
const apiStack = new ApiStack(app, 'Api-Prod', {
env: { account: '123456789', region: 'us-east-1' },
database: dataStack.database,
bucket: dataStack.bucket,
});
// Pipeline-Stack – selbstmutierende CI/CD
new PipelineStack(app, 'Pipeline', {
env: { account: '123456789', region: 'us-east-1' },
});
L2-Konstrukt mit Best Practices
// 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); // Minimalberechtigung
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 (selbstmutierend)
Quelle (GitHub) → Synth (cdk synth) → Selbstmutation
│ │
▼ ▼
UpdatePipeline ─── Staging bereitstellen ─── Manuelle Freigabe ─── Produktion bereitstellen
│ │
Integrationstests Rauchtests
Anti-Patterns
- Überall L1-Konstrukte – Verwendung von
CfnBucketanstelle vons3.Bucket. L2-Konstrukte codieren Best Practices (Verschlüsselung, Protokollierung, Zugriffskontrolle) standardmäßig. - Monolithische Stacks – Ein Stack mit 200+ Ressourcen erreicht CloudFormation-Grenzen und wird langsam bereitgestellt. Aufteilen in zustandsbehaftete/zustandslose Stacks mit referenzübergreifenden Verweisen.
- Fehlendes cdk-nag – Bereitstellung ohne Compliance-Prüfungen. Fügen Sie
Aspects.of(app).add(new AwsSolutionsChecks())hinzu, um Sicherheitsprobleme vor der Bereitstellung zu erkennen. - Hartcodierte Account/Region –
account: '123456789'im Konstrukt-Code. Verwenden Siecdk.json-Kontext odercdk.Environment-Lookup für Portabilität. - Keine Snapshot-Tests – CDK generiert CloudFormation-Vorlagen, die sich unerwartet ändern können. Fügen Sie Tests mit
expect(template).toMatchSnapshot()hinzu, um unbeabsichtigte Änderungen zu erkennen.
Qualitäts-Checkliste
[ ] Stacks getrennt: zustandsbehaftet (Daten) vs. zustandslos (Compute)
[ ] L2/L3-Konstrukte verwendet (nicht rohe CloudFormation L1)
[ ] cdk-nag mit AwsSolutions-Paket aktiviert
[ ] Snapshot-Tests für alle Stacks
[ ] CDK-Pipelines für selbstmutierende CI/CD
[ ] Minimalberechtigte IAM über grant-Methoden (grantRead, grantWrite)
[ ] cdk synth erzeugt gültiges CloudFormation
[ ] Referenzübergreifende Stack-Verweise verwenden exportierte Ausgaben
[ ] Löschrichtlinien gesetzt (RETAIN für Produktionsdaten, DESTROY für Entwicklung)
[ ] Tags über Aspects für Kostenverteilung angewendet
[ ] cdk diff vor jeder Bereitstellung überprüft
[ ] Lambda-Funktionen verwenden Powertools für Beobachtbarkeit