Direkt zum Inhalt

Wie behebe ich die Lambda-Funktionsdrosselung mit den Fehlern „Rate exceeded“ und „TooManyRequestsException“?

Lesedauer: 4 Minute
0

Meine AWS Lambda-Funktion gibt die Drosselungsfehler „Rate exceeded“ und „TooManyRequestsException“ zurück.

Lösung

Überprüfen, welche Ressource gedrosselt wurde

Drosselungsfehler treten möglicherweise nicht aufgrund der Lambda-Funktion auf. Drosselungen können bei API-Aufrufen während des Aufrufs der Funktion auftreten.

Um zu überprüfen, welche Ressource gedrosselt wurde, überprüfe die Amazon CloudWatch Logs und -Metriken auf Drosselungsfehler. Wenn keine Lambda-Drosselungs-Metriken vorhanden sind, tritt die Drosselung bei API-Aufrufen im Lambda-Funktionscode auf.

Funktionscodes auf gedrosselte API-Aufrufe überprüfen

Wenn API-Aufrufe gedrosselt sind, dann verwende exponentielles Backoff im Code, um die API-Aufrufe erneut durchzuführen.

Hinweis: Wenn Sie ein höheres TPS-Kontingent (Transaktionen pro Sekunde) für einen API-Aufruf benötigen, beantragen Sie eine Erhöhung des Servicekontingents. Nicht alle Kontingente sind anpassbar.

CloudWatch-Metriken der Funktionen zur Parallelität überprüfen

Überprüfe die Metrik ConcurrentExecutions für die Funktion in der AWS-Region, in der eine Drosselung auftritt.

Sieh dir die Maximum-Statistik für ConcurrentExecutions und die Statistik Summe für Drosselungen an. Überprüfe, ob die maximalen ConcurrentExecutions nahe am Parallelitätskontingent auf Kontoebene in der Region liegen, zusammen mit den dazugehörigen Datenpunkten im Diagramm Drosselungen.

Das Parallelitätskontingent überprüfen

Prüfe, ob du die Parallelitätsskalierungsrate für die Region der Funktion überschritten hast. Die Parallelitätsskalierungsrate beträgt 1 000 Instances der Ausführungsumgebung alle 10 Sekunden. Weitere Informationen findest du unter Lambda-Skalierungsverhalten.

Reduziere auf der Metriken-Seite für Lambda in der CloudWatch-Konsole den Zeitraum des Diagramms auf 1 Minute. Wenn du durch die Parallelitätlimits eingeschränkt bist, siehst du eine Spitze von Drosselungen, die einem Stufenmuster von ConcurrentExecutions im Diagramm entspricht.

Um Burst-Parallelitätslimits zu vermeiden, kannst du die bereitgestellte Parallelität konfigurieren. Du kannst außerdem eine Erhöhung des Parallelitätslimits für die Lambda-Funktion beantragen.

Prüfen auf Spitzen in den Dauer-Metriken für die Funktion

Die Parallelität hängt von der Funktionsdauer ab. Wenn die Ausführung des Funktionscodes zu viel Zeit in Anspruch nimmt, dann sind möglicherweise nicht ausreichend Rechenressourcen vorhanden.

Überprüfe das Feld Maximal genutzter Speicher in den Ausführungsprotokollen und vergleiche den Wert mit der konfigurierten Speichereinstellung der Funktion. Wenn der maximal genutzte Speicher in der Nähe des konfigurierten Speichers liegt, ist die Funktion normalerweise speichergebunden. Weitere Informationen findest du unter Ermitteln der passenden Speichereinstellungen für eine Lambda-Funktion.

Konfigurieren reservierter Gleichzeitigkeit

Bestätige, dass du für die Funktion reservierte Parallelität konfiguriert hast. Reservierte Parallelität dient als Parallelitätsgrenze für die Funktion und schützt die Funktion auch vor anderen Funktionen, die möglicherweise nicht reservierte Parallelität beanspruchen. Eine reservierte Parallelität kann zwar die Funktionsdrosselung abschwächen, sie kann die Funktion aber auch versehentlich drosseln.

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

Hinweis: Wenn du eine Funktion ohne reservierte Parallelität konfiguriert hast, wird die Funktion gedrosselt, da sie keine Ereignisse verarbeiten kann. Erhöhe den Wert auf eine Zahl, die größer als Null ist.

Informationen zum Konfigurieren oder Erhöhen der reservierten Parallelität findest du unter Reservierte Parallelität für eine Funktion konfigurieren. Informationen zur Behebung von Problemen mit der reservierten Parallelität findest du unter Wie behebe ich Probleme mit der reservierten Lambda-Parallelität?

Exponentielles Backoff verwenden

Um Drosselungsfehler zu vermeiden, verwende exponentielles Backoff und Wiederholungsversuche, wenn du einen API-Aufruf tätigst. Es hat sich bewährt, exponentielles Backoff in der Anwendung zu verwenden, die API-Aufrufe für die Lambda-Funktion durchführt.

Weitere Informationen findest du unter Exponentielles Backoff und Jitter und Verhalten bei Wiederholungen. Stelle sicher, dass du API-Aufrufe im Laufe der Zeit verteilst. Plane Aktionen mit Randomisierung so, dass sie sich im Laufe der Zeit verteilen.

Verwenden einer Warteschlange für unzustellbare Nachrichten

Für asynchrone Ereignisquellen wie Amazon Simple Storage Service (Amazon S3) und Amazon EventBridge Scheduler konfiguriere die Funktion mit einer Warteschlange für unzustellbare Nachrichten. Überprüfe anschließend die Fehlerbehandlung für die Konfiguration asynchroner Aufrufe. Die Warteschlange für unzustellbare Nachrichten fängt alle Ereignisse ab, die aufgrund der ständigen Drosselung verworfen werden und schützt die Daten.

Hinweis: Für Amazon Simple Queue Service (Amazon SQS)-Ereignisquellen musst du die Warteschlange für unzustellbare Nachrichten in der Amazon-SQS-Warteschlange konfigurieren.

Eine Erhöhung des Service-Kontingents beantragen

Wenn die Workload ein höheres Servicekontingent für gleichzeitige Ausführungen erfordert, fordere eine Erhöhung des Servicekontingents an.

Ähnliche Informationen

Bewährte Methoden für die Arbeit mit AWS Lambda-Funktionen

Beheben von Aufrufproblemen in Lambda

Grundlegendes zum Wiederholungsverhalten in Lambda

AWS OFFICIALAktualisiert vor 7 Monaten