Eine übersichtliche Referenz der Architekturmuster, die in der DVA-C02-Prüfung getestet werden. Von oben nach unten lesen oder zu einem Abschnitt springen.
Entwicklung mit AWS-Diensten
Stabiles Aufrufziel, während Sie neuen Lambda-Code bereitstellen.
Veröffentlichen Sie nummerierte, unveränderliche Versionen; legen Sie einen Alias offen, der auf eine Version verweist. Aufrufer rufen den Alias ARN auf.
Warum: Versionen sind eingefrorene Snapshots von Code + Konfiguration; Aliase bieten eine Indirektion, sodass Aufrufer niemals `$LATEST` direkt aufrufen.
Schrittweise Einführung einer neuen Lambda-Version mit automatischem Rollback bei Fehlern.
Alias mit gewichtetem Versions-Routing (z.B. 90/10). CodeDeploy `LambdaCanary10Percent5Minutes` oder `LambdaLinear*` verschiebt den Traffic und überwacht CloudWatch-Alarme.
Warum: Die integrierte Traffic-Verschiebung + alarmgesteuertes Rollback eliminieren handcodierte Canary-Logik.
Konfiguration (DB-URL, Feature-Flags) ohne erneute Bereitstellung injizieren.
Lambda-Umgebungsvariablen. Ruhend KMS-verschlüsselt; verweisen Sie auf einen benutzerdefinierten CMK für zusätzliche Verschlüsselung während der Übertragung beim Abruf.
Warum: Standardmäßig HTTP API verwenden, es sei denn, Sie benötigen eine reine REST-Funktion. WebSocket APIs sind ein separates Produkt für zustandsbehaftete Echtzeit-Anwendungen.
API-Änderungen von Entwicklung → Test → Produktion befördern, ohne separate APIs erneut bereitzustellen.
Stages auf einer einzigen API. Eine Stage bereitstellen, um sie zu veröffentlichen; Stage-Variablen speichern umgebungsspezifische Werte wie Lambda-Aliasnamen.
Ein benutzerdefiniertes Token (nicht Cognito, nicht IAM) validieren, bevor die Anfrage weitergeleitet wird.
Lambda-Authorizer. TOKEN-Typ liest einen Header; REQUEST-Typ liest den vollständigen Anfragekontext. Gibt IAM-Richtlinie + principalId zurück. Pro Identität für TTL gecacht.
Drosselung/Kontingentierung eines Partner-API-Konsumenten.
Nutzungsplan + API-Schlüssel. Der Plan verknüpft Schlüssel mit einer Stage mit Ratenbegrenzung (Anfragen/Sekunde) + Burst + Kontingent (Anfragen/Tag oder Monat).
Zusätzliches Zugriffsmuster über den Primärschlüssel hinaus erforderlich.
GSI: alternativer Partition + Sortierschlüssel, eventually consistent, separate Kapazität, kann jederzeit hinzugefügt werden. LSI: gleicher Partitionsschlüssel, alternativer Sortierschlüssel, Option für starke Konsistenz, muss bei der Tabellenerstellung erstellt werden.
Nur Elemente indizieren, die ein bestimmtes Attribut haben (z.B. nur ACTIVE Bestellungen).
Sparse-Index: das Attribut bei Elementen weglassen, die ausgeschlossen werden sollen. Elemente ohne das indizierte Attribut erscheinen nicht im GSI/LSI.
`BatchGetItem` (bis zu 100 Elemente / 16 MB) und `BatchWriteItem` (bis zu 25 Elemente / 16 MB). Nicht atomar; Teilerfolge werden in `UnprocessedItems` zurückgegeben.
Eine große Datei (≫100 MB) zuverlässig vom SDK hochladen.
`CreateMultipartUpload` → parallel `UploadPart` → `CompleteMultipartUpload`. Der High-Level-Transfer-Manager des SDK handhabt die Teilgröße automatisch.
Warum: Erforderlich >5 GB; empfohlen ≥100 MB. Fehlgeschlagene Teile werden unabhängig erneut hochgeladen. Legen Sie den Lebenszyklus fest, um unvollständige Multi-Part-Uploads abzubrechen und Speicherplatz zurückzugewinnen.
Einen Benutzer von einem öffentlichen Mobil-/Web-Client anmelden, ohne das Passwort zu senden.
Cognito User Pool mit `USER_SRP_AUTH`-Fluss. Client berechnet SRP-Nachweis; Backend sieht das Passwort nie. Gibt ID + Zugriffs- + Refresh-Tokens zurück.
Standard: langlaufend (≤1 Jahr), genau einmal, 0,025 $/1k Übergänge, vollständige Historie. Express: ≤5 Min., mindestens einmal oder höchstens einmal, Abrechnung pro Anfrage + Dauer; für hohe Volumina ETL/Streaming.
Workflow-Schritt schlägt fehl; Wiederholung mit Backoff und Weiterleitung an einen Wiederherstellungszustand erwünscht.
`Retry`-Array (pro Zustand, mit `BackoffRate` + `MaxAttempts`) und `Catch` für die Weiterleitung bei terminalem Fehler. Abgleich nach `ErrorEquals` (z.B. `States.TaskFailed`, benutzerdefinierte Fehlernamen).
Nachrichten streng in der Reihenfolge pro Kunde verarbeiten, mit Deduplizierung.
SQS FIFO-Warteschlange. `MessageGroupId` partitioniert die Reihenfolge (Parallelität pro Gruppe); `MessageDeduplicationId` (oder inhaltsbasierte Deduplizierung) löscht Duplikate innerhalb von 5 Minuten.
Konsument ruft eine Nachricht ab, stürzt aber vor dem Löschen ab.
Nachricht für VisibilityTimeout Sekunden verborgen, dann zur erneuten Zustellung wieder sichtbar. Abgestimmt auf die längste erwartete Verarbeitungszeit + Puffer.
Warum: Zu kurz → doppelte Verarbeitung. Zu lang → langsame Wiederherstellung bei Absturz. ChangeMessageVisibility verlängert die In-Flight-Zeit bei Bedarf.
Code auf EC2 / ECS-Task / Lambda benötigt AWS-Zugriff - keine eingebetteten Schlüssel.
Eine IAM-Rolle über ein Instance Profile (EC2) oder eine Task-/Ausführungsrolle (ECS/Lambda) zuweisen. Das SDK ruft temporäre Anmeldeinformationen vom Metadaten-Dienst ab; rotiert automatisch.
`sts:AssumeRole` vom aufrufenden Principal. Die Vertrauensrichtlinie der Zielrolle listet den Aufrufer als `Principal` auf. Gibt temporäre Anmeldeinformationen zurück (max. 12 Stunden).
Cross-Account AssumeRole schlägt fehl - Berechtigung scheint korrekt zu sein.
Beides muss gesetzt sein: Die Vertrauensrichtlinie der Zielrolle listet den Aufrufer als Principal auf; die Identitätsrichtlinie des Aufrufers erlaubt `sts:AssumeRole` auf dem Zielrollen-ARN.
Warum: Vertrauen = wer annehmen darf. Berechtigung = was sie tun können, sobald sie angenommen wurde. Wenn beides fehlt → AccessDenied.
Einem Team erlauben, IAM-Rollen selbst zu verwalten, aber die Berechtigungen, die sie vergeben können, begrenzen.
Berechtigungsbegrenzungsrichtlinie für die Erstellerrolle des Teams. Jede Rolle, die sie mit der Begrenzung erstellen, hat die Schnittmenge aus Identitätsrichtlinie + Begrenzung als effektive Berechtigungen.
Unterscheiden Sie Cognito ID Token vs. Access Token vs. Refresh Token.
ID = Benutzeridentitäts-Claims (auf dem Client konsumieren). Access = bereichsbezogene Autorisierung für APIs. Refresh = neue ID-/Access-Tokens erhalten. Alle JWTs außer Refresh.
Ein kleines Geheimnis (≤4 KB) direkt mit KMS verschlüsseln.
`kms:Encrypt` gibt einen Chiffretext-Blob zurück, der den Schlüssel-ARN enthält. `kms:Decrypt` stellt den Klartext wieder her, wenn der Aufrufer die Berechtigung hat und (falls angegeben) der `EncryptionContext` übereinstimmt.
Große Daten mit KMS verschlüsseln, ohne das 4 KB direkte Verschlüsselungslimit zu erreichen.
Umschlagverschlüsselung (Envelope encryption). `GenerateDataKey` gibt Klartext + verschlüsselten DEK zurück; Daten lokal mit DEK verschlüsseln, verschlüsselten DEK daneben speichern, Klartext-DEK verwerfen.
Warum: KMS erzwingt Zugriffskontrolle auf den kleinen DEK; die Massenverschlüsselung erfolgt lokal mit Leitungsgeschwindigkeit.
Einen KMS-Schlüssel indirekt referenzieren, damit der zugrunde liegende CMK ohne Codeänderungen rotiert werden kann.
Verwenden Sie `alias/my-key` (oder `arn:aws:kms:region:acct:alias/my-key`). Aktualisieren Sie den Alias, um auf einen neuen CMK zu zeigen; Konsumenten arbeiten weiter.
Secrets Manager native Rotation (verwaltete Lambda) für Aurora/RDS/DocumentDB/Redshift. Das Master-/Benutzer-Muster verwendet ein separates Master-Geheimnis, um das Benutzer-Geheimnis zu rotieren.
Einen Konfigurationswert mit KMS-Verschlüsselung im Ruhezustand im Parameter Store speichern.
SecureString-Parametertyp. Geben Sie `--key-id` für einen benutzerdefinierten CMK an; andernfalls wird `aws/ssm` verwendet. Entschlüsseln erfordert `kms:Decrypt` auf dem CMK.
CloudFront-Zugriff auf authentifizierte Benutzer beschränken.
Signierte URLs (einzelne Ressource) oder signierte Cookies (mehrere Ressourcen, SPAs/Streaming). Signieren Sie mit einem CloudFront-Schlüsselpaar, das als öffentlicher Schlüssel in einer CloudFront-Schlüsselgruppe gespeichert ist.
Rollen/Richtlinien finden, die Zugriff außerhalb des Kontos gewähren oder zu permissive sind.
IAM Access Analyzer. Ergebnisse zu externen Zugriffen; Richtliniengenerierung aus der CloudTrail-Historie für die Anpassung an das Least-Privilege-Prinzip.
Lambda-Umgebungsvariable enthält einen sensiblen Wert.
Lambda verschlüsselt Umgebungsvariablen standardmäßig im Ruhezustand mit KMS. Für die Steuerung während der Übertragung/Entschlüsselung konfigurieren Sie einen benutzerdefinierten CMK und verwenden Sie die Verschlüsselungshelfer in der Konsole, um vorab verschlüsselten Chiffretext zu versenden.
S3-Zugriff verweigert, obwohl die IAM-Richtlinie dies erlaubt.
Sowohl Bucket-Richtlinie als auch Identitätsrichtlinie werden ausgewertet. Ein expliziter Deny an beliebiger Stelle gewinnt. Die Einstellungen für Block Public Access können auch ein Allow überschreiben.
Eine CI/CD-Pipeline aufbauen: Quellcode → Build → Test → Bereitstellung mit manueller Produktionsgenehmigung.
CodePipeline-Phasen, jede mit einer oder mehreren Aktionen. Manuelle Genehmigungsaktion zwischen Test und Bereitstellung. Quelle = CodeCommit / GitHub / S3 / ECR.
Lambda-Traffic 10 % dann 100 % verschieben mit automatischem Rollback bei Alarmen.
CodeDeploy mit `LambdaCanary10Percent5Minutes` / `10Percent10Minutes` / `10Percent15Minutes` / `10Percent30Minutes`. CloudWatch-Alarme in der DeploymentGroup konfigurieren.
Blue/Green-Bereitstellung für einen ECS-Dienst hinter einem ALB.
CodeDeploy Compute Platform = ECS. Erstellt grünen Task-Set; ALB verschiebt Listener zur grünen Zielgruppe; optionale manuelle Genehmigung vor Traffic-Switch und vor dem Beenden von Blau.
Eine EC2-Flotte ohne vollständige Flotten-Downtime aktualisieren.
In-Place-Bereitstellung mit `OneAtATime` / `HalfAtATime` / `AllAtOnce`-Konfigurationen. Auto Scaling Group-Hooks pausieren neue Instance-Starts während der Bereitstellung.
Git-Repos innerhalb von AWS mit IAM-gesteuertem Zugriff hosten.
CodeCommit. Authentifizierung: SSH-Schlüssel pro IAM-Benutzer, HTTPS Git-Anmeldeinformationen pro IAM-Benutzer oder AWS CLI-Anmeldeinformationshelfer. Auslöser über SNS / Lambda bei Push.
CDK: Programmiersprachen (TS/Python/Java/Go/.NET), vollständige App-Konstrukte, Multi-Ressourcen-Muster. SAM: YAML-Erweiterung von CFN, auf Serverless fokussiert, einfacher. Beide kompilieren zu CloudFormation.
Änderungen vor der Anwendung auf einen CloudFormation-Stack Vorschau anzeigen.
`create-change-set` → JSON von Ergänzungen/Modifikationen/Ersetzungen überprüfen → `execute-change-set`. Ersetzungsaktionen führen zur Neuerstellung von Ressourcen.
CloudFormation führt ein automatisches Rollback durch, es sei denn `DisableRollback` ist true. Stecken geblieben in `UPDATE_ROLLBACK_FAILED`? Verwenden Sie `ContinueUpdateRollback` mit `ResourcesToSkip`.
Versehentliche Aktualisierung einer kritischen Ressource (z.B. RDS DB) während Stack-Updates verhindern.
Stack-Richtlinie: JSON, das `Update:Replace` und `Update:Delete` für die logische ID der Ressource verweigert. Umgehung durch explizites Überschreiben bei einer spezifischen Aktualisierung.
Verschachtelte Stacks (`AWS::CloudFormation::Stack` mit `TemplateURL`) zur Wiederverwendung, die einem übergeordneten Element gehören. Cross-Stack über Outputs + `Fn::ImportValue` für eine engere Kopplung zwischen separaten Stacks.
`.ebextensions/*.config` YAML im Quellpaket. Neuere Plattformen: `.platform/hooks/...` Shell-Skripte für den Prebuild-/Predeploy-/Postdeploy-Lebenszyklus.
Benötigt ein stabiles, sich niemals veränderndes Lambda-Artefakt.
Eine nummerierte Version veröffentlichen. Code + die meisten Konfigurationen (Speicher, Timeout, Umgebungsvariablen, Layer) frieren ein. `$LATEST` ist veränderlich; nummerierte Versionen sind es nicht.
Ein Docker-Image nach ECR für ECS / EKS / Lambda pushen.
`aws ecr get-login-password | docker login` → `docker tag` → `docker push`. Lambda-Container-Images: Image wird einmal beim Deploy gezogen; getaggtes Image muss in derselben Region sein.
Einen einmaligen Batch-Job vs. einen langlaufenden Webdienst auf ECS ausführen.
RunTask = einzelne Aufgabe, schließt ab und beendet sich. Service = hält N gewünschte Aufgaben aufrecht, startet Fehler neu, integriert sich mit ALB/NLB.
Rechenkosten für fehlertolerante ECS-Workloads senken.
Fargate Spot-Kapazitätsanbieter. Mischung mit regulärem Fargate über Gewichte und Basis. Aufgaben können mit einer 2-Minuten-Warnung unterbrochen werden.
Eine Anfrage nachverfolgen, die sich über Lambda → DynamoDB → externes HTTP verteilt.
X-Ray-Segmente pro Dienst-Hop, Subsegmente für Downstream-Aufrufe. Die Dienstkarte visualisiert Topologie + Latenz. Sampling-Regeln begrenzen das Volumen.
Durchsuchbare vs. Referenzdaten an einen X-Ray-Trace anhängen.
Annotationen: indiziert, in der Konsole filterbar (z.B. `customerId`, `tier`). Metadaten: nicht indiziert, Freitext (Anfragekörper, Antwortkörper zum Debuggen).
Eine benutzerdefinierte Metrik aus einem Log-Muster generieren (z.B. Anzahl von `OutOfMemoryError`).
Metrikfilter auf der Log-Gruppe. Das Muster gleicht Log-Ereignisse ab; der Filter erstellt eine benutzerdefinierte CloudWatch-Metrik, für die Sie einen Alarm einrichten können.
Provisioned Concurrency für vorhersehbare Last. SnapStart für Java/Python-Code mit aufwendiger Initialisierung. Schlanke Abhängigkeiten, ARM/Graviton verwenden, aufwendige Initialisierung außerhalb des Handlers verschieben.
Lambda-Speicher für beste Kosten/Latenz auswählen.
Der Speicher skaliert auch CPU + Netzwerk. Verwenden Sie die AWS Lambda Power Tuning Zustandsmaschine, um den Speicher zu durchsuchen und den optimalen Punkt für Ihre Workload zu finden.
`TooManyRequestsException` von Lambda; Parallelitätslimit erreicht.
Reservierte Parallelität pro Funktion (Begrenzung + Reserven) oder Anforderung einer kontoweiten Limiterhöhung. Asynchrone Aufrufe werden in die Warteschlange gestellt und erneut versucht; synchrone Aufrufe verursachen einen Fehler.
DynamoDB gibt `ProvisionedThroughputExceededException` zurück.
CloudWatch `WriteThrottleEvents` / `ReadThrottleEvents`. Wechseln Sie in den On-Demand-Modus, erhöhen Sie die bereitgestellte Kapazität oder beheben Sie eine Hot Partition mit besserem Schlüsseldesign.
Ein Partitionsschlüssel erhält unverhältnismäßig viel Traffic; Drosselung unter geringer Gesamtlast.
Partitionsschlüssel mit hoher Kardinalität neu gestalten. Für Schreibvorgänge: Präfix mit zufälligem Shard (z.B. `shard#user`); für Lesevorgänge: Scatter-Gather über Shards hinweg.
Mikrosekunden-DynamoDB-Lese-Latenz ohne Änderung der Anwendungslogik erforderlich.
DAX-Cluster + DAX SDK als Drop-in für DynamoDB SDK. Lesevorgänge werden aus dem In-Memory-Cache bedient; Schreibvorgänge schreiben direkt in die Tabelle.
Caching-Strategie für ElastiCache / DAX auswählen.
Lazy Loading (Cache-Fehler → DB → Cache füllen): nur angeforderte Daten cachen, aber anfällig für Veralterung. Write-through (bei jedem Schreibvorgang in Cache + DB schreiben): immer aktuell, aber Schreibvorgänge verursachen zusätzliche Kosten. TTL begrenzt die Veralterung in beiden Fällen.
Standard auf Kontoebene: 10.000 Anfragen/Sekunde + 5.000 Burst. Pro-Stage- und Pro-Methoden-Überschreibungen; Pro-Schlüssel-Drosselung über Nutzungspläne für die Partner-Ebene-Kontrolle.
AWS SDK versucht automatisch mit exponentiellem Backoff + Jitter erneut. Konfigurieren Sie `RetryMode = adaptive` oder `standard`; stimmen Sie `maxAttempts` ab.