Wie behebe ich die Drosselung einer Lambda-Funktion mit den Fehlern „Rate exceeded“ und 429 „TooManyRequestsException“?

Lesedauer: 5 Minute
0

Meine AWS-Lambda-Funktion erzeugt die Fehler „Rate exceeded“ und 429 „TooManyRequestsException“.

Lösung

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.

Gehen Sie wie folgt vor, um Probleme mit der Lambda-Drosselung zu beheben, einschließlich der Fehler Rate exceeded und TooManyRequestsException.

Überprüfen, welche Ressource gedrosselt ist

Drosselungsfehler sind möglicherweise nicht auf Ihre Lambda-Funktion zurückzuführen. Drosselungen können auch bei API-Aufrufen während des Aufrufs Ihrer Funktion auftreten.

Um festzustellen, welche Ressource gedrosselt ist, überprüfen Sie die folgenden Ressourcen.

Überprüfen Ihrer Amazon CloudWatch Logs, um festzustellen, ob Drosselungsfehler, aber keine entsprechenden Datenpunkte in den Lambda-Drosselungs-Metriken vorhanden sind

Wenn keine Lambda-Drosselungs-Metriken vorhanden sind, erfolgt die Drosselung bei API-Aufrufen in Ihrem Lambda-Funktionscode.

Überprüfen Ihres Funktionscodes auf gedrosselte API-Aufrufe

Wenn bestimmte API-Aufrufe gedrosselt sind, verwenden Sie exponentielles Backoff in Ihrem 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.

Überprüfen der Gleichzeitigkeitsmetriken Ihrer Funktion

Überprüfen Ihrer Lambda-Metriken in Amazon CloudWatch

Überprüfen Sie die Metrik ConcurrentExecutions für Ihre Funktion in der AWS-Region, in der Sie eine Drosselung feststellen.

Vergleichen der Metrik ConcurrentExecutions mit der Drosslungs-Metrik für denselben Zeitstempel

Sehen Sie sich die Maximum-Statistik für ConcurrentExecutions und die Statistik Summe für Drosselungen an. Sehen Sie nach, ob die maximalen ConcurrentExecutions nahe am Gleichzeitigkeits-Kontingent auf Kontoebene in der Region liegen, zusammen mit den entsprechenden Datenpunkten im Diagramm Drosselungen.

Prüfen, ob Sie das anfängliche Burst-Gleichzeitigkeits-Kontingent für eine bestimmte AWS-Region überschreiten

Reduzieren Sie auf der Metriken-Seite für Lambda in der CloudWatch-Konsole den Zeitraum des Diagramms auf 1 Minute. Wenn Sie durch Burst-Skalierung eingeschränkt sind, sehen Sie eine Spitze von Drosselungen, die einem Stufenmuster von ConcurrentExecutions im Diagramm entspricht.

Hinweis: Um Burst-Gleichzeitigkeits-Limits zu umgehen, können Sie die bereitgestellte Gleichzeitigkeit konfigurieren.

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

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

Versuchen Sie, die Speichereinstellung der Funktion zu erhöhen. Verwenden Sie dann AWS X-Ray und CloudWatch Logs, um die Ursache für Verlängerungen der Dauer zu ermitteln.

Hinweis: Eine Änderung der Speichereinstellung kann sich auf die Kosten auswirken, die Ihnen für die Ausführungszeit entstehen.

Sie können die Funktion zu einer Amazon Virtual Private Cloud (Amazon VPC) hinzufügen. Wenn die Funktion in einer Amazon VPC angesiedelt ist, finden Sie weitere Informationen unter Wie gewähre ich einer Lambda-Funktion, die mit einer Amazon VPC verbunden ist, Internetzugriff?

Prüfen auf einen Anstieg der Fehlermetriken für Ihre Funktion

Häufigere Fehler können zu Wiederholungsversuchen und damit zu einer Zunahme der Aufrufe insgesamt führen. Vermehrte Aufrufe können wiederum zu einer Zunahme der Gleichzeitigkeit führen. Verwenden Sie CloudWatch Logs, um Fehler zu identifizieren und zu beheben, und lassen Sie Ihren Funktionscode Ausnahmen handhaben.

Hinweis: Ihre Funktion kann auch auf Basis der Aufrufanforderungen pro Region (Anfragen pro Sekunde) gedrosselt werden, die dem Zehnfachen Ihres Kontingents für gleichzeitige Ausführungen entsprechen.

Konfigurieren reservierter Gleichzeitigkeit

Bestätigen, dass Sie für Ihre Funktion reservierte Gleichzeitigkeit konfiguriert haben

Verwenden Sie die Lambda-Konsole, um die Einstellung für reservierte Gleichzeitigkeit zu überprüfen. Wenn keine reservierte Gleichzeitigkeit 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.

Überprüfen der Maximum-Statistik in CloudWatch für Ihre Funktion

Prüfen Sie, ob die Funktionsmetrik zu irgendeinem Zeitpunkt den Maximalwert für die ConcurrentExecutions-Metrik erreicht.

Erhöhen der reservierten Gleichzeitigkeit für Ihre Funktion auf einen Gleichzeitigkeitswert, der eine Drosselung der Funktion verhindert

Verwenden Sie die Lambda-Konsole, um die Einstellung zu ändern, oder rufen Sie die PutFunctionConcurrency-API auf.

Verwenden exponentieller Backoffs in Ihrer App

Um gedrosselte Anfragen erneut zu starten, hat es sich bewährt, ein exponentielles Backoff in der Anwendung zu verwenden, die Ihre Lambda-Funktion aufruft.

Verwenden einer Warteschlange für unzustellbare Nachrichten

Für asynchrone Ereignisquellen wie Amazon Simple Storage Service (Amazon S3) und Amazon EventBridge konfigurieren Sie Ihre Funktion mit einer Warteschlange für unzustellbare Nachrichten. Überprüfen Sie anschließend die Fehlerbehandlung für die Konfiguration asynchroner Aufrufe. Die Warteschlange fängt alle Ereignisse auf, die aufgrund ständiger Drosselungen verworfen werden, und kann Ihre Daten schützen, falls Sie starke Drosselungen feststellen.

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

Beantragen einer Erhöhung des Servicekontingents

Wenn Ihr Workload ein höheres Servicekontingent für gleichzeitige Ausführungen erfordert, können Sie in der Servicekontingent-Konsole eine Erhöhung des Servicekontingents beantragen.


Ähnliche Informationen

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

Beheben von Aufrufproblemen in Lambda

Fehlerbehandlung und automatische Wiederholungen in AWS Lambda

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr