Was sind einige bewährte Methoden für die Implementierung von Lambda-gestützten benutzerdefinierten Ressourcen mit CloudFormation?

Lesedauer: 4 Minute
0

Ich möchte bei der Implementierung von AWS Lambda-gestützten benutzerdefinierten Ressourcen mit AWS CloudFormation die bewährten Methoden befolgen.

Lösung

Beachten Sie bei der Implementierung von AWS Lambda-gestützten benutzerdefinierten Ressourcen mit AWS CloudFormation die folgenden bewährten Methoden.

Erstellen Sie Ihre eigenen Ressourcen, um Fehler zu melden, zu protokollieren und zu behandeln

Ausnahmen können dazu führen, dass Ihr 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 ist Ihr Stack unbrauchbar.

Um Timeout-Probleme zu vermeiden, fügen Sie Folgendes in den Code ein, den Sie für Ihre Lambda-Funktion erstellen:

  • Logik für den Umgang mit Ausnahmen
  • Die Fähigkeit, den Fehler für Problembehebungsszenarien 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 Sie unvollständige Läufe erfassen und bearbeiten können
  • Ein cfn-response module zum Senden einer Antwort an CloudFormation

Legen Sie angemessene Timeout-Zeiträume und Meldungen fest, wenn diese bald überschritten werden

Wenn ein Vorgang nicht innerhalb des definierten Timeout-Zeitraums ausgeführt wird, löst die Funktion eine Ausnahme aus und es wird keine Antwort an CloudFormation gesendet.

Beachten Sie Folgendes, um dieses Problem zu vermeiden:

  • Stellen Sie den Timeout-Wert für Ihre Lambda-Funktionen hoch genug ein, um Schwankungen der Verarbeitungszeit und der Netzwerkbedingungen bewältigen zu können.
  • Stellen Sie in Ihrer Funktion einen Timer ein, der auf CloudFormation mit einem Fehler reagiert, wenn eine Funktion kurz vor dem Timeout steht. Ein Timer kann dazu beitragen, Verzögerungen bei benutzerdefinierten Ressourcen zu vermeiden.

Entwickeln Sie Ereignisse rund um das Erstellen, Aktualisieren und Löschen

Abhängig von der Stack-Aktion sendet CloudFormation Ihrer Funktion ein Erstellen-, Aktualisieren- oder Löschen-Ereignis. Da jedes Ereignis anders behandelt wird, stellen Sie sicher, dass beim Empfang eines der drei Ereignistypen keine unerwünschten Verhaltensweisen auftreten.

Weitere Informationen finden Sie unter Benutzerdefinierte Ressourcenanforderungstypen.

Erfahren Sie, wie CloudFormation Ressourcen identifiziert und ersetzt

Wenn ein Update den Austausch einer physischen Ressource einleitet, vergleicht CloudFormation die von Ihrer 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 mögliche Rollbacks zu ermöglichen, wird die alte Ressource jedoch nicht implizit entfernt. Wenn das Stack-Update erfolgreich abgeschlossen wurde, wird eine Löschen-Ereignisanforderung mit der alten physischen ID als Kennung gesendet. Wenn das Stack-Update fehlschlägt und ein Rollback stattfindet, wird die neue physische ID im Löschen-Ereignis gesendet.

Verwenden Sie PhysicalResourceId, um Ressourcen eindeutig zu identifizieren, sodass beim Empfang eines Löschen-Ereignisses bei einem Austausch nur die richtigen Ressourcen gelöscht werden.

Entwickeln Sie Ihre Funktionen mit Idempotenz

Eine idempotente Funktion kann mehrfach mit denselben Eingaben wiederholt werden, und das Ergebnis ist dasselbe, als würde man 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 Ihre 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 Sie Ihre Handler, um Rollbacks korrekt zu verarbeiten

Wenn ein Stack-Vorgang fehlschlägt, versucht CloudFormation, ein Rollback durchzuführen und alle Ressourcen auf ihren vorherigen Zustand zurückzusetzen. Dies führt zu unterschiedlichen Verhaltensweisen, je nachdem, ob das Update einen Ressourcenaustausch verursacht hat.

Beachten Sie Folgendes, um sicherzustellen, dass Rollbacks erfolgreich abgeschlossen werden:

  • Vermeiden Sie es, implizit alte Ressourcen zu entfernen, bis ein Löschen-Ereignis empfangen wird.
  • Verwenden Sie accustom oder den Custom Resource Helper auf der GitHub-Website, um die bewährten Verfahren bei der Verwendung benutzerdefinierter Ressourcen in CloudFormation zu befolgen.

Ähnliche Informationen

Benutzerdefinierte Ressourcen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren