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.
Behandlung von Fehlern für eine SQS-Ereignisquelle in Lambda
Um Fehler im Zusammenhang mit einer SQS-Ereignisquelle zu behandeln, verwendet Lambda automatisch eine Wiederholungsstrategie mit einer Backoff-Strategie. Sie können das Verhalten bei der Fehlerbehandlung auch anpassen, indem Sie Ihre SQS-Zuordnung von Ereignisquellen so konfigurieren, dass sie partielle Batch-Antworten zurückgibt.
Backoff-Strategie für fehlgeschlagene Aufrufe
Wenn ein Aufruf fehlschlägt, versucht Lambda, den Aufruf zu wiederholen, während eine Backoff-Strategie implementiert wird. Die Backoff-Strategie unterscheidet sich geringfügig, je nachdem, ob Lambda den Fehler aufgrund eines Fehlers in Ihrem Funktionscode oder aufgrund einer Drosselung festgestellt hat.
-
Wenn Ihr Funktionscode den Fehler verursacht hat, stoppt Lambda die Verarbeitung und versucht erneut, den Aufruf durchzuführen. In der Zwischenzeit zieht sich Lambda allmählich zurück und reduziert die Menge der Gleichzeitigkeit, die Ihrer Amazon SQS-Zuordnung von Ereignisquellen zugewiesen wird. Nachdem das Sichtbarkeits-Timeout Ihrer Warteschlange abgelaufen ist, erscheint die Nachricht erneut in der Warteschlange.
-
Wenn der Aufruf aufgrund von Drosselung fehlschlägt, setzt Lambda schrittweise Wiederholungsversuche zurück, indem es die Menge der Gleichzeitigkeit reduziert, die Ihrer Zuordnung von Ereignisquellen in Amazon SQS zugewiesen ist. Lambda fährt fort, die Nachricht erneut zu versuchen, bis der Zeitstempel der Nachricht das Sichtbarkeits-Timeout Ihrer Warteschlange überschreitet, an welchem Punkt Lambda die Nachricht verwirft.
Implementierung von partiellen Batch-Antworten
Wenn die Lamda-Funktion während der Verarbeitung eines Batches auf einen Fehler stößt, werden standardmäßig alle Nachrichten in diesem Batch wieder in der Warteschlange sichtbar, einschließlich Nachrichten, die Lambda erfolgreich verarbeitet hat. Infolgedessen kann es passieren, dass die Funktion dieselbe Nachricht mehrmals verarbeitet.
Damit nicht erfolgreich bearbeiten Nachrichten in einem fehlgeschlagenen Batch erneut verarbeitet werden, können Sie die Zuordnung von Ereignisquellen so konfigurieren, dass nur die fehlgeschlagenen Nachrichten wieder sichtbar werden. Dies wird als partielle Batch-Antwort bezeichnet. Um partielle Batch-Antworten zu aktivieren, geben Sie ReportBatchItemFailures bei der Konfiguration der Ereignisquellenzuordnung die FunctionResponseTypes Aktion an. Mit dieser Einstellung kann Ihre Funktion einen teilweisen Erfolg zurückgeben, was dazu beitragen kann, die Anzahl unnötiger Wiederholungen bei Datensätzen zu reduzieren.
Anmerkung
Das Batch Processor-Hilfsprogramm von Powertools for AWS Lambda verarbeitet die gesamte partielle Batch-Antwortlogik automatisch. Dieses Tool vereinfacht die Implementierung von Batch-Verarbeitungsmustern und reduziert den Bedarf an benutzerdefiniertem Code, der für die korrekte Behandlung von Fehlern bei Batch-Elementen erforderlich ist. Es ist für Python, Java, Typescript und .NET verfügbar.
Wenn ReportBatchItemFailures aktiviert ist, skaliert Lambda die Nachrichtenabfrage nicht herunter, wenn Funktionsaufrufe fehlschlagen. Wenn Sie erwarten, dass einige Nachrichten ausfallen – und Sie nicht möchten, dass sich diese Fehler auf die Nachrichtenverarbeitungsrate auswirken – verwenden Sie ReportBatchItemFailures.
Anmerkung
Berücksichtigen Sie bei Verwendung von partiellen Batch-Antworten Folgendes:
-
Wenn die Funktion eine Ausnahme ausgibt, gilt der gesamte Batch als fehlgeschlagen.
-
Wenn Sie dieses Feature mit einer FIFO-Warteschlange verwenden, sollte Ihre Funktion die Verarbeitung von Nachrichten nach dem ersten Fehler beenden und alle fehlgeschlagenen und nicht verarbeiteten Nachrichten in
batchItemFailureszurückgeben. Das hilft, die Reihenfolge der Nachrichten in der Warteschlange beizubehalten.
So aktivieren Sie partielle Batchberichterstattung
-
Sehen Sie sich die bewährten Methoden für die Implementierung von partiellen Batch-Antworten an.
-
Führen Sie den folgenden Befehl aus, um
ReportBatchItemFailuresfür Ihre Funktion zu aktivieren. Führen Sie den Befehl list-event-source-mappings aus, um die UUID Ihres Eventquellen-Mappings abzurufen. https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html AWS CLIaws lambda update-event-source-mapping \ --uuid"a1b2c3d4-5678-90ab-cdef-11111EXAMPLE"\ --function-response-types"ReportBatchItemFailures" -
Aktualisieren Sie Ihren Funktionscode, um alle Ausnahmen abzufangen und fehlgeschlagene Nachrichten in einer
batchItemFailures-JSON-Antwort zurückzugeben. DiebatchItemFailures-Antwort muss eine Liste von Nachrichten-IDs alsitemIdentifier-JSON-Werte enthalten.Angenommen, Sie haben einen Batch von fünf Nachrichten mit den Nachrichten-IDs
id1,id2,id3,id4undid5. Die Funktion verarbeitet erfolgreichid1,id3undid5. Damit die Nachrichtenid2undid4in der Warteschlange wieder sichtbar werden, sollte Ihre Funktion folgende Antwort zurückgeben:{ "batchItemFailures": [ { "itemIdentifier": "id2" }, { "itemIdentifier": "id4" } ] }Hier sind einige Beispiele für Funktionscodes, die die Liste der fehlgeschlagenen Nachrichten-IDs im Batch zurückgeben:
Wenn die fehlgeschlagenen Ereignisse nicht in die Warteschlange zurückkehren, finden Sie weitere Informationen unter Wie behebe ich die Lambda-Funktion ReportBatchItemFailures SQS?
Erfolgs- und Misserfolgsbedingungen
Lambda behandelt einen Batch als komplett erfolgreich, wenn die Funktion eines der folgenden Elemente zurückgibt:
-
Eine leere
batchItemFailures-Liste -
Eine ungültige
batchItemFailures-Liste -
Ein leeres
EventResponse -
Ein ungültiges
EventResponse
Lambda behandelt einen Batch als komplett fehlgeschlagen, wenn die Funktion eines der folgenden Elemente zurückgibt:
-
Eine ungültige JSON-Antwort
-
Eine leere Zeichenfolge
itemIdentifier -
Ein ungültiges
itemIdentifier -
Ein
itemIdentifiermit einem falschen Schlüsselnamen -
Einen
itemIdentifier-Wert mit einer Nachrichten-ID, die nicht existiert
CloudWatch Metriken
Um festzustellen, ob Ihre Funktion Fehler bei Chargenartikeln korrekt meldet, können Sie die NumberOfMessagesDeleted und ApproximateAgeOfOldestMessage Amazon SQS-Metriken in Amazon CloudWatch überwachen.
-
NumberOfMessagesDeletedverfolgt die Anzahl der Nachrichten, die aus der Warteschlange entfernt wurden. Wenn der Wert auf 0 sinkt, ist dies ein Zeichen dafür, dass die Funktionsantwort fehlgeschlagene Nachrichten nicht korrekt zurückgibt. -
ApproximateAgeOfOldestMessageverfolgt, wie lange die älteste Nachricht in der Warteschlange geblieben ist. Ein starker Anstieg dieser Metrik kann darauf hinweisen, dass die Funktion fehlgeschlagene Nachrichten nicht korrekt zurückgibt.
Verwenden Sie Powertools für AWS Lambda Batch-Prozessor
Das Batch-Verarbeitungsprogramm von Powertools for verarbeitet AWS Lambda automatisch die partielle Batch-Antwortlogik und reduziert so die Komplexität der Implementierung von Batch-Fehlerberichten. Hier sind Beispiele für die Verwendung des Batch-Prozessors:
- Python
-
Anmerkung
Umfassende Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Batch-Prozessor.
Verarbeitung von Amazon SQS-Nachrichten mit einem AWS Lambda Batch-Prozessor.
import json from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities.batch import BatchProcessor, EventType, process_partial_response from aws_lambda_powertools.utilities.data_classes import SQSEvent from aws_lambda_powertools.utilities.typing import LambdaContext processor = BatchProcessor(event_type=EventType.SQS) logger = Logger() def record_handler(record): logger.info(record) # Your business logic here # Raise an exception to mark this record as failed def lambda_handler(event, context: LambdaContext): return process_partial_response( event=event, record_handler=record_handler, processor=processor, context=context ) - TypeScript
-
Anmerkung
Umfassende Beispiele und Anweisungen zur Einrichtung finden Sie in der Dokumentation zum Batch-Prozessor.
Verarbeitung von Amazon SQS-Nachrichten mit AWS Lambda Batch-Prozessor.
import { BatchProcessor, EventType, processPartialResponse } from '@aws-lambda-powertools/batch'; import { Logger } from '@aws-lambda-powertools/logger'; import type { SQSEvent, Context } from 'aws-lambda'; const processor = new BatchProcessor(EventType.SQS); const logger = new Logger(); const recordHandler = async (record: any): Promise<void> => { logger.info('Processing record', { record }); // Your business logic here // Throw an error to mark this record as failed }; export const handler = async (event: SQSEvent, context: Context) => { return processPartialResponse(event, recordHandler, processor, { context, }); };