Amazon DVA-C02: CloudFormation und Infrastruktur als Code (SAM, CDK) — Lernleitfaden
Teil des AWS Developer Associate DVA-C02 — Lernleitfaden. Üben Sie mit verifizierten Antworten im Amazon-Prüfungscenter, oder absolvieren Sie zeitlich begrenzte Übungstests auf ExamRoll.io.
CloudFormation-Kernmuster und Best Practices für Templates
CloudFormation-Templates sollten als deklarative, idempotente Beschreibungen von Ressourcen verfasst werden, wobei kleine, fokussierte Stacks und für komplexe Architekturen verschachtelte Stacks zu bevorzugen sind. Verwenden Sie den Abschnitt Resources mit expliziten logischen IDs und bevorzugen Sie intrinsische Funktionen wie !Ref, !GetAtt, !Sub, Fn::FindInMap und Fn::If für die Komposition und Wiederverwendung. Validieren Sie Templates mit aws cloudformation validate-template oder den SAM/CDK-Äquivalenten (sam validate, cdk synth), bevor Sie ChangeSets erstellen. Verwenden Sie ChangeSets (CreateChangeSet / ExecuteChangeSet) zur Überprüfung und um unerwartete Ersetzungen zu vermeiden; nutzen Sie DescribeChangeSet, um die Aktionen zu inspizieren, die der Stack ausführen wird. Halten Sie den Template-Body innerhalb der CloudFormation-Limits, indem Sie großen Inline-Code nach S3 verschieben und ihn referenzieren (CodeUri, S3Bucket/S3Key), oder teilen Sie ihn mit AWS::CloudFormation::Stack in verschachtelte Stacks auf. Führen Sie regelmäßig eine Drift-Erkennung mit DetectStackDrift und DescribeStackResourceDrifts durch. Verwenden Sie DeletionPolicy und UpdateReplacePolicy, um datenhaltige Ressourcen zu schützen, und aktivieren Sie den Terminierungsschutz für kritische Stacks. Integrieren Sie cfn-lint und cfn-guard in CI/CD, um strukturelle Probleme und Richtlinienverstöße frühzeitig zu erkennen. Nutzen Sie für schnelle Iterationen ChangeSets und Update-Strategien auf Ressourcenebene, um den Blast Radius zu minimieren; verwenden Sie für Lambda-Funktionen versionierte Deployments, um Updates sicher und umkehrbar zu machen.
Parametrisierung, Mappings, Secrets und sensible Daten
Parametrisieren Sie Umgebungsunterschiede mit CloudFormation Parameters und Mappings und verwenden Sie AllowedValues und ConstraintDescription, um schnell fehlschlagen zu können. Vermeiden Sie das Einbetten von Secrets oder Klartext-Anmeldeinformationen in Parameters; verwenden Sie stattdessen SecureString im SSM Parameter Store oder Secrets Manager und referenzieren Sie diese über dynamische Referenzen wie {{resolve:secretsmanager:mysecret:SecretString:password}} oder nutzen Sie AWS::SSM::Parameter::Value<String>-Typen. Kennzeichnen Sie sensible Parameter mit NoEcho: true, um Werte in der Konsole zu maskieren, aber beachten Sie, dass NoEcho keine Verschlüsselung im Ruhezustand bietet – verwenden Sie Secrets Manager für Auditierung und Rotation. Verwenden Sie Mappings und Fn::FindInMap für deterministische, umgebungsspezifische Werte (AMI-IDs pro Region) und Fn::GetAZs für die Berechnung der Availability Zones. Für Ressourcenreferenzen über Stacks hinweg in derselben Region/demselben Konto, exportieren Sie Outputs und importieren Sie diese über Fn::ImportValue; denken Sie daran, dass Importe nicht konto- oder regionsübergreifend funktionieren. Schützen Sie IAM-Principals, die von CloudFormation verwendet werden, indem Sie Rollen nach dem Prinzip der geringsten Rechte (Least Privilege) definieren; bevorzugen Sie service-verwaltete StackSet-Berechtigungen oder provisionieren Sie explizit eine Administrationsrolle mit eingeschränktem Geltungsbereich. Wenn Sie Umgebungsvariablen an Container oder Lambda übergeben, bevorzugen Sie die Referenzierung von Secrets Manager-ARNs oder SSM Parameter-ARNs und den Abruf zur Laufzeit im Code, oder verwenden Sie SAM/CDK-Funktionen, um sichere Werte über KMS verschlüsselt in die Umgebung zu injizieren.
Konto- und regionsübergreifende Deployments, CDK- und SAM-Multi-Account-Muster
Konto- und regionsübergreifende Deployments erfordern eine Orchestrierung, die über Exporte einzelner Stacks hinausgeht. Wählen Sie für Multi-Account/Multi-Region-Deployments CloudFormation StackSets (CreateStackSet, CreateStackInstances) mit service-verwalteten Berechtigungen für Organizations oder selbstverwaltete Berechtigungen mit einer Ausführungsrolle in den Zielkonten. Verwenden Sie für Artefakte des Anwendungscodes zentralisierte S3-Buckets mit kontoübergreifender Replikation oder Bucket-Richtlinien, oder lassen Sie die Tools Assets pro Region veröffentlichen: CDK verwendet Bootstrap-Stacks und Assets, die über cdk-assets veröffentlicht werden, und erfordert cdk bootstrap in jedem Konto/jeder Region; CDK Pipelines (pipelines-Modul) oder das aws-cdk CLI mit --role-arn unterstützen die kontoübergreifende Promotion. SAM verwendet sam package / sam deploy, was Artefakte in einen S3-Bucket hochlädt; für Multi-Account-Setups verwenden Sie CI/CD, um Artefakte zu packen, in die Buckets der Zielkonten zu pushen und Deployments mit den entsprechenden Anmeldeinformationen auszuführen. Vermeiden Sie CDK-Kontext-Lookups (VPC.fromLookup etc.), die zur Synth-Zeit kontospezifische Berechtigungen erfordern; übergeben Sie stattdessen Bezeichner explizit als Parameter, um die Synth-Phase reproduzierbar zu halten. Verwenden Sie AWS CodePipeline oder GitHub Actions mit angenommenen Rollen (sts:AssumeRole), um Deployments in Zielkonten durchzuführen, und stellen Sie sicher, dass der Bootstrap und die notwendigen serviceverknüpften Rollen existieren. Denken Sie daran, dass CloudFormation-Exporte regional sind; bevorzugen Sie StackSets oder pipeline-gesteuerte Deployments für die kontoübergreifende Verteilung.
Benutzerdefinierte Ressourcen, Stack-Schutz und Beschleuniger für lokale/inkrementelle Bereitstellungen
Verwenden Sie benutzerdefinierte Ressourcen, wenn CloudFormation ein nativer Ressourcentyp fehlt, indem Sie Lambda-gestützte Provider implementieren, die das CloudFormation-Antwortprotokoll für Create/Update/Delete-Ereignisse einhalten. Erstellen Sie idempotente Handler, antworten Sie mit cfn-response oder dem CloudFormation CLI-Framework und behandeln Sie langlaufende Aktionen mit Fortschrittsereignissen (progress events) oder durch Speichern des Zustands in DynamoDB. Achten Sie auf die Timeouts von benutzerdefinierten Ressourcen: CloudFormation hat ein maximales Timeout für Stack-Operationen, und Lambda-gestützte Ressourcen müssen innerhalb dieses Zeitfensters abgeschlossen sein, da sie sonst einen Stack-Rollback verursachen. Schützen Sie kritische Ressourcen mit Stack-Richtlinien (SetStackPolicy), um das Ersetzen oder Aktualisieren bestimmter logischer IDs bei Stack-Updates zu blockieren, und aktivieren Sie den Beendigungsschutz für Umgebungen, deren Löschung Sie sich nicht leisten können. Für die inkrementelle und lokale Entwicklung verwenden Sie die AWS SAM CLI (sam build, sam local invoke, sam local start-api) und sam sync für schnelle reine Code-Updates sowie cdk watch oder cdk deploy mit Assets, um nur geänderte Ressourcen zu aktualisieren; diese Tools berechnen Asset-Hashes (lambda asset hashing), sodass nur geänderter Code neu veröffentlicht wird. Integrieren Sie CloudFormation ChangeSets, Lambda-Versionierung (AutoPublishAlias in SAM oder lambda.Version im CDK) und CodeDeploy Traffic-Shifting für sichere Bereitstellungen. Häufige Fallstricke sind das Überschreiten von Template- oder Parametergrenzen, die falsche Verwendung kontoübergreifender Importe und die Initialisierung schwergewichtiger SDK-Clients innerhalb von Handlern, was zu Kaltstartlatenzen führt – bevorzugen Sie globale, lazy-initialisierte Clients mit konfigurierbaren Timeouts und Wiederholungsverhalten.
Praktisches Problem: Anwendungsfallszenario
Szenario: AcmeMedia verwaltet eine AWS-Organisation mit mehreren Konten, mit getrennten Dev-, Staging- und Prod-Konten in der Region us-east-1. Ein serverloser Bildverarbeitungsdienst (Lambda + S3 + DynamoDB) muss konsistent über alle Konten hinweg bereitgestellt werden, wobei eine gemeinsam genutzte, sensible Konfiguration zentral gespeichert wird.
Herausforderung: Stellen Sie denselben CloudFormation/SAM/CDK-Stack in mehreren Konten bereit und stellen Sie sicher, dass Lambda-Code-Artefakte in jedem Zielkonto sicher verfügbar sind, während Secrets aus den Templates herausgehalten werden.
Empfohlener Ansatz:
- Verwenden Sie AWS CloudFormation StackSets mit serviceverwalteten Berechtigungen (aws cloudformation create-stack-set –stack-set-name ImageProcessor –template-body file://template.yaml) und anschließend aws cloudformation create-stack-instances, um auf Zielkonten und -regionen abzuzielen, oder konfigurieren Sie CDK Pipelines, um pro Konto mit Rollen zu synthetisieren und bereitzustellen.
- Packen Sie Lambda-Assets mithilfe der CDK-Asset-Veröffentlichung (cdk bootstrap in jedem Konto/jeder Region) oder mit sam package in einen S3-Bucket in jedem Zielkonto; automatisieren Sie das Kopieren der Assets über CI (CodeBuild mit aws s3 cp oder S3-Replikation) und verwenden Sie cdk deploy oder sam deploy mit den Anmeldeinformationen des Zielkontos.
- Speichern Sie sensible Konfigurationen im AWS Secrets Manager in jedem Konto und referenzieren Sie diese im Template über dynamische Referenzen ({{resolve:secretsmanager:arn:aws:secretsmanager:us-east-1:123456789012:secret:ImageProcSecret:SecretString:apiKey}}) oder stellen Sie ein repliziertes Secret über die Replikationsfunktion des Secrets Managers bereit, und vermeiden Sie dabei NoEcho-Parameter.
- Verwenden Sie ChangeSets (create-change-set, execute-change-set), aktivieren Sie den Beendigungsschutz für Produktions-Stacks und nutzen Sie Stack-Richtlinien, um das versehentliche Ersetzen von DynamoDB-Tabellen oder S3-Buckets bei Updates zu verhindern.
Begründung: StackSets und Pipeline-gesteuerte Bereitstellungen ermöglichen eine sichere, auditierbare Verbreitung über mehrere Konten/Regionen, während die Asset-Veröffentlichung und kontospezifische Secrets die Anmeldeinformationen lokal und auditierbar halten. ChangeSets, der Beendigungsschutz und Stack-Richtlinien reduzieren das Risiko bei iterativen Bereitstellungen.
← Amazon DynamoDB und NoSQL-Design · Alle Domänen · Bereitstellung und CI →
Diese Fragen üben → · Zeitlich begrenzte Übung auf ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Bestehe deine Prüfung →