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.
Zuordnungen von Ereignisquellen mit dauerhaften Funktionen
Dauerhafte Funktionen funktionieren mit allen Lambda-Ereignisquellenzuordnungen. Konfigurieren Sie Ereignisquellenzuordnungen für dauerhafte Funktionen auf die gleiche Weise, wie Sie sie für andere Funktionen konfigurieren. Ereignisquellenzuordnungen fragen automatisch Ereignisquellen wie Amazon SQS, Kinesis und DynamoDB Streams ab und rufen Ihre Funktion mit Datensatzstapeln auf.
Zuordnungen von Ereignisquellen sind nützlich für langlebige Funktionen, die Streams oder Warteschlangen mit komplexen, mehrstufigen Workflows verarbeiten. Sie können beispielsweise eine dauerhafte Funktion erstellen, die Amazon SQS SQS-Nachrichten mit Wiederholungen, externen API-Aufrufen und menschlichen Genehmigungen verarbeitet.
Wie Zuordnungen von Ereignisquellen dauerhafte Funktionen aufrufen
Bei Zuordnungen von Ereignisquellen werden dauerhafte Funktionen synchron aufgerufen. Sie warten, bis die vollständige Ausführung abgeschlossen ist, bevor der nächste Stapel verarbeitet oder Datensätze als verarbeitet markiert werden. Wenn die gesamte dauerhafte Ausführungszeit das geltende Timeout-Limit überschreitet (standardmäßig 15 Minuten oder bis zu 90 Minuten für Funktionen, die auf Lambda Managed Instances ausgeführt werden), wird die Ausführung unterbrochen und schlägt fehl. Die Ereignisquellenzuordnung empfängt eine Timeout-Ausnahme und behandelt sie entsprechend ihrer Wiederholungskonfiguration.
Begrenzung der Ausführungsdauer
Wenn dauerhafte Funktionen durch Zuordnungen von Ereignisquellen aufgerufen werden, darf die Gesamtdauer der dauerhaften Ausführung das maximale Funktions-Timeout nicht überschreiten: 15 Minuten für Funktionen, die im Standardkapazitätsmodus (auf Abruf) ausgeführt werden, oder bis zu 90 Minuten für Funktionen, die auf Lambda Managed Instances ausgeführt werden (außer Amazon MQ- und Amazon DocumentDB DocumentDB-Ereignisquellenzuordnungen, die auf 15 Minuten begrenzt bleiben). Dieses Limit gilt für die gesamte dauerhafte Ausführung von Anfang bis Ende, nicht nur für einzelne Funktionsaufrufe.
Das Funktions-Timeout begrenzt jeden Aufruf. Das dauerhafte Ausführungstimeout begrenzt die Gesamtzeit vom Start bis zum Abschluss der Ausführung. Bei Zuordnungen von Ereignisquellen haben beide dasselbe Maximum: standardmäßig 15 Minuten oder 90 Minuten auf Lambda Managed Instances.
Beispielszenarien:
-
Gültig (beliebiger Kapazitätsmodus): Eine dauerhafte Funktion verarbeitet eine Amazon SQS SQS-Nachricht in drei Schritten, die jeweils 2 Minuten dauern, und wartet dann 5 Minuten, bevor ein letzter Schritt abgeschlossen wird. Gesamtausführungszeit: 11 Minuten. Dies funktioniert in beiden Kapazitätsmodi, da es unter dem Standardlimit von 15 Minuten liegt.
-
Nur für Lambda Managed Instances gültig: Eine dauerhafte Funktion verarbeitet eine Amazon SQS SQS-Nachricht, schließt die erste Verarbeitung in 2 Minuten ab und wartet dann 20 Minuten auf einen externen Rückruf, bevor der Vorgang abgeschlossen wird. Gesamtausführungszeit: 22 Minuten. Dies überschreitet das Standardlimit von 15 Minuten, liegt jedoch innerhalb des 90-Minuten-Limits für Funktionen, die auf Lambda Managed Instances ausgeführt werden.
-
Ungültig (beliebiger Kapazitätsmodus): Eine dauerhafte Funktion verarbeitet einen Kinesis-Datensatz mit mehreren Wartevorgängen, die zwischen den Schritten insgesamt zwei Stunden dauern. Dies überschreitet sogar das 90-Minuten-Limit für Lambda Managed Instances, sodass die Ausführung unabhängig vom Kapazitätsmodus fehlschlägt. Verwenden Sie das zwischengeschaltete Funktionsmuster für Workflows mit einer solchen Länge.
Wichtig
Konfigurieren Sie Ihr dauerhaftes Ausführungstimeout innerhalb des geltenden Grenzwerts, wenn Sie Ereignisquellenzuordnungen verwenden, da andernfalls die Erstellung der Ereignisquellenzuordnung fehlschlägt. Das Limit beträgt standardmäßig 15 Minuten oder bis zu 90 Minuten bei Lambda Managed Instances. Wenn Ihr Workflow längere Ausführungszeiten erfordert, verwenden Sie das unten beschriebene Zwischenfunktionsmuster.
Zuordnungen von Ereignisquellen konfigurieren
Konfigurieren Sie mithilfe der Lambda-Konsole oder SDKs Ereignisquellenzuordnungen für dauerhafte Funktionen. AWS CLI AWS Alle Eigenschaften der Ereignisquellenzuordnung, wie Batchgröße und Batching-Fenster, gelten für dauerhafte Funktionen:
aws lambda create-event-source-mapping \ --function-name arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 \ --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \ --batch-size 10 \ --maximum-batching-window-in-seconds 5
Verwenden Sie einen qualifizierten ARN mit einer Versionsnummer, einem Alias oder $LATEST wenn Sie eine Ereignisquellenzuordnung für eine dauerhafte Funktion konfigurieren.
Fehlerbehandlung bei Zuordnungen von Ereignisquellen
Zuordnungen von Ereignisquellen bieten eine integrierte Fehlerbehandlung, die mit dauerhaften Funktionen funktioniert:
-
Wiederholungsverhalten: Wenn der erste Aufruf fehlschlägt, versucht die Zuordnung der Ereignisquelle entsprechend ihrer Wiederholungskonfiguration erneut. Konfigurieren Sie die maximale Anzahl an Wiederholungsversuchen und die Wiederholungsintervalle entsprechend Ihren Anforderungen.
-
Dead-letter Warteschlangen: Konfigurieren Sie eine Warteschlange mit unerlaubten Briefen, um Datensätze aufzuzeichnen, die nach allen Wiederholungen fehlschlagen. Dies verhindert den Verlust von Nachrichten und ermöglicht die manuelle Überprüfung fehlgeschlagener Datensätze.
-
Teilweise Batchfehler: Verwenden Sie für Amazon SQS und Kinesis die Meldung teilweiser Batch-Fehler, um Datensätze einzeln zu verarbeiten und nur fehlgeschlagene Datensätze erneut zu versuchen.
-
Bei Fehler halbieren: Aktivieren Sie für Kinesis- und DynamoDB Streams die Option Halbieren bei Fehler, um fehlgeschlagene Batches aufzuteilen und problematische Datensätze zu isolieren.
Anmerkung
Dauerhafte Funktionen unterstützen Dead-Letter-Queues (DLQs) zur Fehlerbehandlung, unterstützen jedoch keine Lambda-Destinationen. Konfigurieren Sie einen DLQ, um Datensätze von fehlgeschlagenen Aufrufen zu erfassen.
Vollständige Informationen zur Fehlerbehandlung bei der Zuordnung von Ereignisquellen finden Sie unter Zuordnungen von Ereignisquellen.
Verwendung einer Zwischenfunktion für Workflows mit langer Laufzeit
Wenn Ihr Workflow mehr als das geltende Limit für die Zuordnung von Ereignisquellen erfordert (standardmäßig 15 Minuten oder 90 Minuten bei Lambda Managed Instances), verwenden Sie eine zwischengeschaltete Standard-Lambda-Funktion zwischen der Zuordnung der Ereignisquelle und Ihrer dauerhaften Funktion. Die Zwischenfunktion empfängt Ereignisse aus der Ereignisquellenzuordnung und ruft die dauerhafte Funktion asynchron auf, wodurch die Beschränkung der Ausführungsdauer aufgehoben wird.
Dieses Muster entkoppelt das synchrone Aufrufmodell der Ereignisquellenzuordnung vom Modell der dauerhaften Funktion mit langer Laufzeit. Bei der Zuordnung der Ereignisquellen wird die Zwischenfunktion aufgerufen, die nach dem Start der dauerhaften Ausführung schnell zurückkehrt. Die dauerhafte Funktion wird dann so lange wie nötig unabhängig ausgeführt (bis zu 1 Jahr).
Architektur
Das Muster der zwischengeschalteten Funktionen besteht aus drei Komponenten:
-
Zuordnung der Ereignisquelle: Ruft die Ereignisquelle ab (Amazon SQS, Kinesis, DynamoDB Streams) und ruft die Zwischenfunktion synchron mit Datensatzstapeln auf.
-
Zwischenfunktion: Eine Lambda-Funktion ohne dauerhafte Ausführung, die Ereignisse aus der Ereignisquellenzuordnung empfängt, die Daten bei Bedarf validiert und transformiert und die dauerhafte Funktion asynchron aufruft. Diese Funktion wird schnell abgeschlossen (normalerweise in weniger als 1 Sekunde) und gibt die Steuerung an die Ereignisquellenzuordnung zurück.
-
Dauerhafte Funktion: Verarbeitet das Ereignis mit einer komplexen, mehrstufigen Logik, die über längere Zeiträume ausgeführt werden kann. Wird asynchron aufgerufen, sodass es nicht durch die Begrenzung der Ausführungsdauer der Ereignisquellenzuordnung eingeschränkt ist.
Implementierung
Die Zwischenfunktion empfängt das gesamte Ereignis aus der Ereignisquellenzuordnung und ruft die dauerhafte Funktion asynchron auf. Verwenden Sie den Parameter für den Ausführungsnamen, um sicherzustellen, dass die idempotente Ausführung gestartet wird, und verhindern Sie so eine doppelte Verarbeitung, falls die Ereignisquellenzuordnung erneut versucht:
Verwenden Sie Powertools für Idempotenz in der Zwischenfunktion selbst, um doppelte Aufrufe der dauerhaften Funktion AWS Lambda zu verhindern, falls die Zuordnung der Ereignisquelle die Zwischenfunktion erneut versucht.
Die dauerhafte Funktion empfängt die Nutzdaten mit dem Namen der Ausführung und verarbeitet alle Datensätze mit lang andauernder Logik:
Wesentliche Überlegungen
Durch dieses Muster wird die Beschränkung der Ausführungsdauer bei der Zuordnung der Ereignisquelle aufgehoben, indem die Zuordnung der Ereignisquelle von der dauerhaften Ausführung entkoppelt wird. Die Zwischenfunktion kehrt unmittelbar nach dem Start der dauerhaften Ausführung zurück, sodass die Verarbeitung durch die Zuordnung der Ereignisquelle fortgesetzt werden kann. Die dauerhafte Funktion wird dann so lange wie nötig unabhängig ausgeführt.
Die Zwischenfunktion ist erfolgreich, wenn sie die dauerhafte Funktion aufruft, nicht wenn die dauerhafte Ausführung abgeschlossen ist. Wenn die dauerhafte Ausführung später fehlschlägt, versucht die Zuordnung der Ereignisquelle nicht erneut, da der Stapel bereits erfolgreich verarbeitet wurde. Implementieren Sie die Fehlerbehandlung in der dauerhaften Funktion und konfigurieren Sie Warteschlangen für fehlerhafte Ausführungen.
Verwenden Sie den Parameter für den Ausführungsnamen, um sicherzustellen, dass die idempotente Ausführung gestartet wird. Wenn die Zuordnung der Ereignisquelle erneut versucht, die Zwischenfunktion zu verwenden, startet die dauerhafte Funktion keine doppelte Ausführung, da der Ausführungsname bereits vorhanden ist.
Unterstützte Ereignisquellen
Dauerhafte Funktionen unterstützen alle Lambda-Ereignisquellen, die Ereignisquellenzuordnungen verwenden:
Amazon SQS SQS-Warteschlangen (Standard und FIFO)
Kinesis-Streams
DynamoDB Streams
Amazon Managed Streaming for Apache Kafka (Amazon MSK)
Self-managed Apache Kafka
Amazon MQ (ActiveMQ und RabbitMQ)
Amazon DocumentDB DocumentDB-Change-Streams
Alle Arten von Ereignisquellen unterliegen dem zuvor beschriebenen dauerhaften Ausführungslimit (standardmäßig 15 Minuten), wenn dauerhafte Funktionen aufgerufen werden. Bei Lambda Managed Instances erhöht sich das Limit für diese Ereignisquellen auf 90 Minuten, mit Ausnahme von Amazon MQ und Amazon DocumentDB, die weiterhin auf 15 Minuten begrenzt sind.