Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Was sind einige bewährte Methoden für die Implementierung von Lambda-gestützten benutzerdefinierten Ressourcen mit CloudFormation?
Ich möchte bei der Implementierung von AWS Lambda-gestützten benutzerdefinierten Ressourcen mit AWS CloudFormation die bewährten Methoden befolgen.
Lösung
Wenn du Lambda-gestützte benutzerdefinierte Ressourcen mit CloudFormation implementierst, verwende die folgenden bewährten Methoden.
Erstellung eigener Ressourcen, um Fehler zu melden, zu protokollieren und zu behandeln
Ausnahmen können dazu führen, dass dein Funktionscode beendet wird, ohne eine Antwort zu senden. CloudFormation benötigt eine HTTPS-Antwort, um zu bestätigen, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. Bei einer nicht gemeldeten Ausnahme wartet CloudFormation, bis das Timeout des Vorgangs abgelaufen ist, bevor ein Stack-Rollback gestartet wird. Tritt die Ausnahme während des Rollbacks erneut auf, wartet CloudFormation erneut auf ein Timeout, bevor es zu einem Rollback-Fehler kommt. Während dieser Zeit kannst du den Stack nicht verwenden.
Um Timeout-Probleme zu vermeiden, füge folgende Elemente in den Code ein, den du für die Lambda-Funktion erstellst:
- Logik für den Umgang mit Ausnahmen
- Die Fähigkeit, den Fehler für Problembehandlungsszenarien zu protokollieren
- Die Fähigkeit, auf CloudFormation mit einer HTTPS-Antwort zu antworten, die bestätigt, dass ein Vorgang fehlgeschlagen ist
- Eine Warteschlange für unzustellbare Nachrichten, mit der du unvollständige Ausführungen erfassen und bearbeiten kannst
- Ein cfn-response module zum Senden einer Antwort an CloudFormation
Festlegen angemessener Timeout-Zeiträume und Meldung, wenn sie bald überschritten werden
Wenn ein Vorgang nicht innerhalb des definierten Timeout-Zeitraums ausgeführt wird, löst die Funktion eine Ausnahme aus und sendet keine Antwort an CloudFormation.
Gehe wie folgt vor, um dieses Problem zu vermeiden:
- Stelle den Timeout-Wert für deine Lambda-Funktionen hoch genug ein, um Schwankungen der Verarbeitungszeit und der Netzwerkbedingungen bewältigen zu können.
- Stelle in der Funktion einen Timer ein, der auf CloudFormation mit einem Fehler reagiert, wenn eine Funktion kurz vor dem Timeout steht.
Entwicklung von Ereignissen rund um das Erstellen, Aktualisieren und Löschen
Abhängig von der Stack-Aktion sendet CloudFormation deiner Funktion ein Erstellen-, Aktualisieren- oder Löschen-Ereignis. Da jedes Ereignis anders behandelt wird, stelle sicher, dass keine unerwünschten Verhaltensweisen auftreten, wenn die Funktion einen der drei Ereignistypen empfängt.
Weitere Informationen findest du unter Benutzerdefinierte Ressourcenanforderungstypen.
Verstehen, wie CloudFormation Ressourcen identifiziert und ersetzt
Wenn ein Update den Austausch einer physischen Ressource ersetzt, vergleicht CloudFormation die von deiner Lambda-Funktion zurückgegebene PhysicalResourceId mit der vorherigen PhysicalResourceId. Wenn sich die IDs unterscheiden, geht CloudFormation davon aus, dass die Ressource durch eine neue physische Ressource ersetzt wird.
Um potentielle Rollbacks zu ermöglichen, entfernt CloudFormation die alte Ressource jedoch nicht. Wenn das Stack-Update abgeschlossen ist, sendet CloudFormation eine Ereignisanforderung Löschen mit der alten physischen ID als Kennung. Wenn das Stack-Update fehlschlägt und ein Rollback stattfindet, sendet CloudFormation die neue physische ID im Ereignis Löschen.
Verwende PhysicalResourceID, um Ressourcen eindeutig zu identifizieren, sodass die Funktion beim Ersetzen nur die richtigen Ressourcen löscht, wenn die Funktion ein Ereignis Löschen empfängt.
Entwickeln einer Funktionen mit Idempotenz
Du kannst eine idempotente Funktion mehrmals mit denselben Eingaben wiederholen, und das Ergebnis ist dasselbe, als würdest du sie nur einmal ausführen. Idempotenz stellt sicher, dass Neuversuche, Updates und Rollbacks nicht zu doppelten Ressourcen führen oder Fehler verursachen.
CloudFormation ruft beispielsweise deine Funktion auf, um eine Ressource zu erstellen, erhält jedoch keine Antwort, dass die Ressource erfolgreich erstellt wurde. CloudFormation könnte die Funktion erneut aufrufen und eine zweite Ressource erstellen. Die erste Ressource kann dann verwaist werden.
Implementieren von Handlern, um Rollbacks korrekt zu verarbeiten
Wenn ein Stack-Vorgang fehlschlägt, versucht CloudFormation, alle Ressourcen in ihren vorherigen Zustand zurückzuversetzen. Diese Aktion führt zu unterschiedlichen Verhaltensweisen, je nachdem, ob das Update einen Ressourcenaustausch verursacht hat.
Gehe wie folgt vor, um sicherzustellen, dass CloudFormation Rollbacks durchführen kann:
- Vermeide es, alte Ressourcen implizit zu entfernen, bis die Funktion ein Ereignis Löschen empfängt.
- Um die bewährten Methoden zu befolgen, verwende cloudformation-accustom oder den Custom Resource Helper auf der GitHub-Website.
Ähnliche Informationen
Erstellen einer benutzerdefinierten Bereitstellungslogik mit benutzerdefinierten Ressourcen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 7 Monaten