Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Idempotenz
Dauerhafte Funktionen bieten eine eingebaute Idempotenz für Ausführungsstarts anhand von Ausführungsnamen. Wenn Sie einen Ausführungsnamen angeben, verwendet Lambda ihn, um doppelte Ausführungen zu verhindern und sichere Wiederholungen von Aufrufanforderungen zu ermöglichen. Schritte haben standardmäßig eine at-least-once Ausführungssemantik — während der Wiedergabe gibt das SDK Checkpoint-Ergebnisse zurück, ohne abgeschlossene Schritte erneut auszuführen, aber Ihre Geschäftslogik muss idempotent sein, um mögliche Wiederholungen vor Abschluss zu verarbeiten.
Anmerkung
Lambda Event Source Mappings (ESM) unterstützen Idempotenz beim Start nicht. Daher startet jeder Aufruf (einschließlich Wiederholungen) eine neue dauerhafte Ausführung. Um eine idempotente Ausführung mit Ereignisquellenzuordnungen sicherzustellen, implementieren Sie entweder Idempotenzlogik in Ihrem Funktionscode, z. B. mit Powertools for, AWS Lambda oder verwenden Sie eine reguläre Lambda-Funktion als Proxy (Dispatcher), um eine dauerhafte Funktion mit einem Idempotenzschlüssel (Ausführungsnamenparameter) aufzurufen.
Namen der Ausführung
Sie können einen Ausführungsnamen angeben, wenn Sie eine dauerhafte Funktion aufrufen. Der Ausführungsname fungiert als Idempotenzschlüssel, sodass Sie Aufrufanforderungen sicher wiederholen können, ohne dass doppelte Ausführungen erforderlich sind. Wenn Sie keinen Namen angeben, generiert Lambda automatisch eine eindeutige Ausführungs-ID.
Ausführungsnamen müssen innerhalb Ihres Kontos und Ihrer Region eindeutig sein. Wenn Sie eine Funktion mit einem bereits vorhandenen Ausführungsnamen aufrufen, hängt das Verhalten von Lambda vom Status der vorhandenen Ausführung ab und davon, ob die Nutzlast übereinstimmt.
Verhalten bei Idempotenz
In der folgenden Tabelle wird beschrieben, wie Lambda Aufrufanforderungen verarbeitet, je nachdem, ob Sie einen Ausführungsnamen angeben, welchen Ausführungsstatus es gibt und ob die Nutzlast übereinstimmt:
| Szenario | Name angegeben? | Bestehender Ausführungsstatus | Nutzlast identisch? | Behavior |
|---|---|---|---|---|
| 1 | Nein | – | – | Neue Ausführung gestartet: Lambda generiert eine eindeutige Ausführungs-ID und startet eine neue Ausführung |
| 2 | Ja | Hat nie existiert oder die Aufbewahrung ist abgelaufen | – | Neue Ausführung gestartet: Lambda startet eine neue Ausführung mit dem angegebenen Namen |
| 3 | Ja | In Ausführung | Ja | Idempotenter Start: Lambda gibt die vorhandenen Ausführungsinformationen zurück, ohne ein Duplikat zu starten. Bei synchronen Aufrufen dient dies als erneutes Anhängen an die laufende Ausführung |
| 4 | Ja | In Ausführung | Nein | Fehler: Lambda gibt einen DurableExecutionAlreadyExists Fehler zurück, weil eine Ausführung mit diesem Namen bereits mit einer anderen Nutzlast ausgeführt wird |
| 5 | Ja | Geschlossen (erfolgreich, fehlgeschlagen, gestoppt oder Zeitlimit überschritten) | Ja | Idempotenter Start: Lambda gibt die vorhandenen Ausführungsinformationen zurück, ohne eine neue Ausführung zu starten. Das Ergebnis der geschlossenen Ausführung wird zurückgegeben |
| 6 | Ja | Geschlossen (erfolgreich, fehlgeschlagen, gestoppt oder Zeitlimit überschritten) | Nein | Fehler: Lambda gibt einen DurableExecutionAlreadyExists Fehler zurück, weil eine Ausführung mit diesem Namen bereits mit einer anderen Nutzlast abgeschlossen wurde |
Hinweis
Die Szenarien 3 und 5 zeigen ein idempotentes Verhalten, bei dem Lambda doppelte Aufrufanforderungen sicher verarbeitet, indem es vorhandene Ausführungsinformationen zurückgibt, anstatt Duplikate zu erstellen.
Schritt Idempotenz
Schritte haben standardmäßig eine at-least-once Ausführungssemantik. Wenn Ihre Funktion nach einem Warten, einem Rückruf oder einem Fehler erneut ausgeführt wird, überprüft das SDK jeden Schritt anhand des Checkpoint-Logs. Für Schritte, die bereits abgeschlossen wurden, gibt das SDK das Checkpoint-Ergebnis zurück, ohne die Schrittlogik erneut auszuführen. Wenn ein Schritt jedoch fehlschlägt oder die Funktion unterbrochen wird, bevor der Schritt abgeschlossen ist, kann der Schritt mehrmals ausgeführt werden.
Ihre in Schritten unterteilte Geschäftslogik muss idempotent sein, um potenzielle Wiederholungsversuche zu bewältigen. Verwenden Sie Idempotenzschlüssel, um sicherzustellen, dass Operationen wie Zahlungen oder Datenbankschreibvorgänge nur einmal ausgeführt werden, auch wenn der Schritt erneut versucht wird.
Beispiel: Schrittweise Verwendung von Idempotenzschlüsseln
Sie können Schritte so konfigurieren, dass sie die at-most-once Ausführungssemantik verwenden, indem Sie den Ausführungsmodus auf setzen. AT_MOST_ONCE_PER_RETRY Dadurch wird sichergestellt, dass der Schritt pro Wiederholungsversuch höchstens einmal ausgeführt wird, aber möglicherweise überhaupt nicht ausgeführt wird, wenn die Funktion unterbrochen wird, bevor der Schritt abgeschlossen ist.
Das SDK erzwingt eine deterministische Wiedergabe, indem es während der Wiedergabe überprüft, ob die Namen und die Reihenfolge der Schritte mit dem Checkpoint-Protokoll übereinstimmen. Wenn Ihr Code versucht, Schritte in einer anderen Reihenfolge oder mit anderen Namen auszuführen, gibt das SDK eine aus. NonDeterministicExecutionError
So funktioniert die Wiedergabe mit abgeschlossenen Schritten:
Erster Aufruf: Die Funktion führt Schritt A aus, erstellt einen Checkpoint und wartet dann
Zweiter Aufruf (nach dem Warten): Die Funktion wird von Anfang an wiederholt, Schritt A gibt sofort ein Checkpoint-Ergebnis zurück, ohne es erneut auszuführen, und fährt dann mit Schritt B fort
Dritter Aufruf (nach erneuter Wartezeit): Die Funktion wird von Anfang an wiederholt, die Schritte A und B geben sofort Checkpoint-Ergebnisse zurück und fährt dann mit Schritt C fort
Dieser Wiederholungsmechanismus stellt sicher, dass abgeschlossene Schritte nicht erneut ausgeführt werden, aber Ihre Geschäftslogik muss immer noch idempotent sein, um Wiederholungen vor Abschluss zu verarbeiten.