Wie behebe ich Probleme der Lambda-Funktion SQS ReportBatchItemFailures?

Lesedauer: 3 Minute
0

Ich habe Partial Batch Response für meine AWS Lambda-Funktion eingerichtet, für die Amazon Simple Queue Service (Amazon SQS) als Ereignisquelle konfiguriert ist. Jetzt gibt meine Lambda-Funktion eine Liste von „ReportBatchItemFailures“ zurück und eines der folgenden Ereignisse tritt auf: Lambda versucht einen gesamten Nachrichtenstapel erneut, wenn kein Funktionsfehler aufgetreten ist, oder Lambda versucht keinen der Teilnachrichtenstapel erneut. Wie kann dieses Problem behoben werden?

Lösung

Hinweis: Sie müssen Partial Batch Response für Ihre Lambda-Funktion manuell konfigurieren, um teilweise Amazon SQS-Batches programmatisch zu verarbeiten. Weitere Informationen finden Sie im AWS Lambda Developer Guide unter Fehler bei Batchelementen melden.

Beispiel eines AWS Command Line Interface (AWS CLI) -Befehls zur Aktivierung von Partial Batch Response für eine Lambda-

Wichtig: Ersetzen Sie <esm_UUID> durch den Universally Unique Identifier (UUID) Ihres Amazon SQS-Ereignisquellen-Mappings. Um die UUID Ihrer Ereignisquellenzuordnung abzurufen, führen Sie den AWS CLI-Befehl list-event-source-mappings aus. Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"

Zur Fehlerbehebung bei ReportBatchItemFailures, bei dem Lambda einen gesamten SQS-Nachrichtenbatch erneut versucht, wenn kein Funktionsfehler aufgetreten ist

Überprüfen Sie die partielle Batch-Antwort im Code Ihrer Lambda-Funktion, um festzustellen, ob eine der folgenden Antworten vorliegt. Beheben Sie das Problem dann basierend auf der aufgezeichneten Antwort.

Hinweis: Lambda behandelt einen Batch als vollständigen Fehler, wenn Ihre Funktion eine der folgenden Antworten zurückgibt.

Antworten für ein EventResponse, das kein gültiges JSON ist

return "Hello world"
return ""

Antwort für einen leeren itemIdentifier-Wert

return {"batchItemFailures":[{"itemIdentifier": ""}]}

Antwort für einen ItemIdentifier-Nullwert

return {"batchItemFailures":[{"itemIdentifier": None}]}

Antwort für einen itemIdentifier-Wert mit einem falschen Schlüsselnamen

return {"batchItemFailures":[{"bad_key": messageID}]}

Antwort für einen itemIdentifier-Wert mit einer Meldungs-ID, die nicht existiert

return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}

Wichtig: Ihre Lambda-Funktion muss einen gültigen ItemIdentifier-JSON-Wert zurückgeben.

Zur Fehlerbehebung bei ReportBatchItemFailures, bei denen Lambda keinen der Teilnachrichtenstapel erneut versucht

Überprüfen Sie die partielle Batch-Antwort im Code Ihrer Lambda-Funktion, um festzustellen, ob eine der folgenden Antworten vorliegt. Beheben Sie das Problem dann basierend auf der aufgezeichneten Antwort.

Hinweis: Lambda behandelt einen Batch als vollständigen Erfolg, wenn Ihre Funktion eine der folgenden Antworten zurückgibt.

Antwort für eine leere BatchItemFailures-Liste

return {"batchItemFailures":[]}

Antwort für eine BatchItemFailures-Nullliste

return {"batchItemFailures": None}

Antworten für eine EventResponse mit einem leeren oder unerwarteten JSON-Wert

return {}
return {"Key1":"Value1"}

Antworten für eine Null-EventResponse

return
return None

Wichtig: Ihre Lambda-Funktion muss eine Antwort zurückgeben, die einen JSON-Wert „BatchItemFailures“ enthält, der eine Liste gültiger Meldungs-IDs enthält.


Zugehörige Informationen

Wie kann ich verhindern, dass eine Amazon SQS-Nachricht meine Lambda-Funktion mehr als einmal aufruft?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren