Warum führt meine Lambda-Funktion erneute Versuche für gültige Amazon-SQS-Nachrichten durch und platziert sie in meiner Warteschlange für unzustellbare Nachrichten?

Lesedauer: 4 Minute
0

Ich habe meine AWS-Lambda-Funktion so konfiguriert, dass sie Nachrichten in einer Amazon-Simple-Queue-Service-Warteschlange (Amazon SQS) verarbeitet. Einige meiner gültigen Amazon-SQS-Nachrichten werden bis zum MaxReceiveCount mehrfach empfangen und landen in meiner Warteschlange für unzustellbare Nachrichten.

Kurzbeschreibung

Wenn Ihre Lambda-Funktion gedrosselt ist, einen Fehler zurückgibt oder beim Lesen eines Amazon SQS-Nachrichten-Batches nicht reagiert, kehren die Nachrichten in Ihre Warteschlange zurück. Nach Ablauf des Sichtbarkeits-Timeouts empfängt Ihre Lambda-Funktion den Nachrichten-Batch erneut. Wenn Ihre Funktion gültige Nachrichten nicht mehrfach verarbeiten kann, sendet Amazon SQS die Nachrichten an Ihre Warteschlange für unzustellbare Nachrichten, sofern Sie eine solche konfiguriert haben.

Um zu verhindern, dass gültige Nachrichten in einer Warteschlange für unzustellbare Nachrichten platziert werden, muss Ihr Funktionscode idempotent sein und Nachrichten mehrfach verarbeiten können. Weitere Informationen finden Sie unter Wie kann ich verhindern, dass eine Amazon-SQS-Nachricht meine Lambda-Funktion mehr als einmal aufruft?

Behebung

Stellen Sie sicher, dass der Code Ihrer Lambda-Funktion idempotent ist

Bewährte Methoden für Idempotenz und Beispiele für Funktionslogik finden Sie unter Wie mache ich meine Lambda-Funktion idempotent?

Stellen Sie sicher, dass das Sichtbarkeits-Timeout Ihrer Amazon-SQS-Warteschlange mindestens sechsmal länger ist als die Timeout-Einstellung Ihrer Lambda-Funktion

Stellen Sie das Sichtbarkeits-Timeout Ihrer Quellwarteschlange auf mindestens das Sechsfache des Timeouts Ihrer Funktion ein. Die zusätzliche Zeit ermöglicht es Ihrer Funktion, die Verarbeitung eines Batches zu wiederholen, wenn die Funktion bei der Verarbeitung eines vorherigen Batches gedrosselt wird.

Weitere Informationen finden Sie unter Einrichten der Zeitbeschränkung für die Sichtbarkeit im Amazon-SQS-Entwicklerhandbuch.

Hinweis: Wenn Ihre Funktion keine Nachrichten empfängt, weil das Sichtbarkeits-Timeout der Warteschlange nicht lang genug ist, werden die Nachrichten nicht in Ihren Amazon CloudWatch Logs aufgezeichnet.

Stellen Sie sicher, dass das Attribut maxReceiveCount in der Redrive-Richtlinie Ihrer Quellwarteschlange auf mindestens fünf festgelegt ist

Stellen Sie maxReceiveCount in der Redrive-Richtlinie der Quellwarteschlange auf mindestens fünf ein. Wenn Ihre Funktion einen Fehler zurückgibt oder nicht aufgerufen werden kann, weil sie die maximale Gleichzeitigkeit erreicht hat, kann die Verarbeitung mit weiteren Versuchen gelingen. Ein maxReceiveCount von mindestens fünf erhöht die Wahrscheinlichkeit, dass Ihre Nachrichten verarbeitet werden, bevor sie an Ihre Warteschlange für unzustellbare Nachrichten gesendet werden.

Informationen zur Aktualisierung des Grenzwerts für die maximale Gleichzeitigkeit finden Sie unter Konfigurieren der maximalen Gleichzeitigkeit für Amazon-SQS-Ereignisquellen.

Weitere Informationen finden Sie unterFunktionsweise von Queues für unzustellbare Nachrichten und Vermeiden einer inkonsistenten Nachrichtenverarbeitung im Amazon-SQS-Entwicklerhandbuch.

Die Lambda-Funktion auf Drosselung und reservierte Gleichzeitigkeit überprüfen

Lambda-Funktionen werden manchmal gedrosselt, um Ihre Ressourcen und Downstream-Anwendungen zu schützen. Auch wenn Lambda automatisch skaliert, um den eingehenden Datenverkehr zu bewältigen, kann Ihre Funktion aus verschiedenen Gründen gedrosselt werden.

Verwenden Sie die Lambda-Konsole, um die Einstellung für reservierte Gleichzeitigkeit zu überprüfen. Wenn die reservierte Gleichzeitigkeit nicht konfiguriert ist, verwendet die Funktion nicht reservierte Gleichzeitigkeit. Wenn Aufrufe mit Funktionen die nicht reservierte Gleichzeitigkeit überschreiten, kommt es zur Drosselung.

**Hinweis:**Wenn Sie eine Funktion ohne reservierte Gleichzeitigkeit konfiguriert haben, wird die Funktion gedrosselt, da sie keine Ereignisse verarbeiten kann. Erhöhen Sie den Wert auf eine Zahl, die größer als Null ist.

Wenn andere Funktionen in derselben AWS-Region den Gleichzeitigkeitsgrenzwert nutzen, kann es zu einer Drosselung kommen. Lambda-Funktionen, bei denen eine Drosselung auftritt, senden die SQS-Nachrichten an die Warteschlange für unzustellbare Nachrichten.

Vermeiden Sie die erneute Verarbeitung aller SQS-Nachrichten in einem fehlgeschlagenen Batch

Alle SQS-Nachrichten sind in der Warteschlange für unzustellbare Nachrichten für Lambda-Funktionen sichtbar, die bei der Verarbeitung eines Batches auf Fehler stoßen, einschließlich Nachrichten, die Lambda erfolgreich verarbeitet hat. Lambda versucht dann, den gesamten Batch von SQS-Nachrichten erneut zu verarbeiten.

Konfigurieren Sie Ihre Zuordnung von Ereignisquellen mit dem Wert ReportBatchItemFailures in der Liste FunctionResponseTypes, um zu vermeiden, dass alle SQS-Nachrichten in einem fehlgeschlagenen Batch erneut verarbeitet werden. Auf diese Weise kann Ihre Funktion einen Teilerfolg zurückgeben und die Anzahl der Wiederholungsversuche reduzieren. Weitere Informationen finden Sie unter Reporting batch item failures (Beheben von Fehlern bei Batch-Artikeln).

Beheben und identifizieren Sie alle Fehler, die Ihre Lambda-Funktion zurückgibt

Folgen Sie den Anweisungen unter Wie behebe ich Lambda-Funktionsfehler? Ihre Funktion entfernt Nachrichten nur dann automatisch aus Ihrer Warteschlange, wenn die Funktion keinen Fehler zurückgibt.

Ähnliche Informationen

Wie beantrage ich eine Erhöhung des Gleichzeitigkeitsgrenzwerts für meine Lambda-Funktion?

Wie behebe ich die Drosselung der Lambda-Funktion mit den Fehlern „Rate überschritten“ und 429 „TooManyRequestsException“?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr