Wie kann ich Zeitüberschreitungsfehler beim Aufrufen von Lambda-Funktionen beheben?

Lesedauer: 7 Minute
0

Meine AWS-Lambda-Funktion läuft zeitweise ab, obwohl ich keine Codeänderungen bereitgestellt habe. Wie kann ich Zeitüberschreitungsprobleme beim Aufrufen von Lambda-Funktionen beheben und vermeiden?

Lösung

Lambda-Funktionen können aus verschiedenen Gründen eine Zeitüberschreitung aufweisen. Um Zeitüberschreitungen bei Lambda-Funktionen zu beheben, ermitteln Sie zunächst die Ursache des Problems, indem Sie einen der in diesem Artikel aufgeführten AWS-Services und -Funktionen verwenden. Beheben Sie dann das Problem basierend auf Ihrem Anwendungsfall.

Um zu verhindern, dass Ihre Lambda-Funktion eine Zeitüberschreitung durchführt, lesen Sie den Abschnitt Bewährte Methoden zum Verhindern von Zeitüberschreitungen für Lambda-Funktionen in diesem Artikel.

Prüfen, ob Ihre Lambda-Funktion das Zeitlimit überschreitet

Rufen Sie die Anforderungs-IDs aller Aufrufe mit Zeitüberschreitung ab, indem Sie in der Amazon-CloudWatch-Protokollgruppe der Funktion nach dem Ausdruck Zeitüberschreitung der Aufgabe suchen. Verwenden Sie dann die Anforderungs-IDs der Aufrufe mit Zeitüberschreitung, um die vollständigen Protokolle für jede Aufruf-Zeitüberschreitung abzurufen.

Anweisungen finden Sie unter Wie stelle ich fest, ob meine Lambda-Funktion eine Zeitüberschreitung erreicht hat?

Identifizieren, was zu einer Zeitüberschreitung Ihrer Lambda-Funktion führt

Verwenden Sie eine oder mehrere der folgenden Methoden, um den Fehlerpunkt zu ermitteln, der zu einer Zeitüberschreitung Ihrer Funktion führt:

Überprüfen Sie Ihre Amazon CloudWatch Logs auf Lambda

Sie können Amazon CloudWatch verwenden, um alle vom Code Ihrer Funktion generierten Protokolle anzuzeigen und potenzielle Probleme zu identifizieren. Anweisungen finden Sie unter Zugriff auf CloudWatch Logs für Lambda.

Wenn Ihre Funktion einen Stack-Trace zurückgibt, gibt die Fehlermeldung im Stack-Trace die Ursache des Fehlers an.

Wichtig: Lambda generiert automatisch drei Protokollzeilen für jeden Aufruf (START, END und REPORT). Diese drei Zeilen sind die einzigen Zeilen, die in den CloudWatch-Protokollen Ihrer Funktion angezeigt werden, wenn einer der folgenden Punkte zutrifft:

  • Im benutzerdefinierten Code der Lambda-Funktion ist keine andere explizite Protokollierung konfiguriert.
  • Die Dauer der Funktion ist erreicht, bevor Lambda den Code der Funktion ausführen kann, der Protokolle ausgibt.

Wenn Sie nach der Überprüfung der Protokolle die Ursache der Zeitüberschreitungen nicht feststellen können, probieren Sie eine oder mehrere der folgenden Lösungen aus:

Um dem Code Ihrer Funktion weitere Protokollierungsausgaben hinzuzufügen, lesen Sie die folgende Dokumentation für die Lambda-Laufzeit, die Sie verwenden:

Identifizieren Sie mithilfe von AWS X-Ray Engpässe bei der Code-Leistung

Wenn Ihre Lambda-Funktion nachgeschaltete AWS-Ressourcen, Microservices, Datenbanken oder HTTP-Web-APIs verwendet, können Sie AWS X-Ray verwenden, um Probleme mit der Code-Leistung zu beheben.

Weitere Informationen finden Sie unter Verwenden von AWS Lambda mit AWS X-Ray.

Sammeln Sie mit Lambda Insights Metriken auf Systemebene für Ihre Funktion

Lambda Insights erfasst Metriken auf Systemebene, einschließlich CPU-Zeit, Arbeitsspeicher, Festplatte und Netzwerkmetriken. Es sammelt auch Diagnoseinformationen, einschließlich Kaltstarts und Lambda-Worker-Abschaltungen, um Probleme mit Ihren Lambda-Funktionen zu isolieren.

Weitere Informationen finden Sie unter Verwenden von Lambda Insights.

Hinweis: Bei der Verwendung von Lambda Insights fallen Gebühren für Ihr AWS-Konto an. Die von der Lambda-Erweiterung verbrauchte Aufrufzeit wird Ihnen in Schritten von 1 ms in Rechnung gestellt.

Verwenden Sie VPC-Flow-Protokolle, um zu ermitteln, warum eine bestimmte Aufrufanforderung abgelehnt wurde oder nicht weitergeleitet wurde.

Mit VPC-Flow-Protokollen können Sie den gesamten Netzwerkverkehr sehen, der zu und von einer Amazon Virtual Private Cloud (Amazon VPC) fließt.

Weitere Informationen finden Sie unter Beheben von Netzwerkproblemen in Lambda.

Hinweis: Beachten Sie Folgendes, wenn Sie VPC-Flow-Protokolle einrichten möchten:

  • Datenerfassungs- und Archivierungsgebühren für Verkaufsprotokolle fallen an, wenn Sie Flow-Protokolle in einem der folgenden Bereiche veröffentlichen:
  • CloudWatch Logs
  • Amazon Simple Storage Service (Amazon S3)

Verwenden Sie HTTP-Wire-Traces für die detaillierte Protokollierung von Netzwerkanforderungen, die während eines Aufrufs vom Code der Funktion generiert

Weitere Informationen finden Sie unter Protokollieren von HTTP-Wire-Traces.

Bewährte Methoden zur Verhinderung von Zeitüberschreitungen bei Lambda-Funktionen

Stellen Sie sicher, dass Ihre Lambda-Funktion idempotent ist

API-Aufrufe können aufgrund vorübergehender Netzwerkprobleme länger als erwartet dauern. Netzwerkprobleme können auch zu Wiederholungsversuchen und doppelten API-Anforderungen führen. Um sich auf diese Ereignisse vorzubereiten, stellen Sie sicher, dass Ihre Lambda-Funktion idempotent ist.

Weitere Informationen finden Sie unter Wie mache ich meine Lambda-Funktion idempotent?

Initialisieren Sie die statische Logik Ihrer Funktion außerhalb des Funktionshandlers

Wenn Sie eine Lambda-Funktion initialisieren, weist Lambda bis zu 10 Sekunden für den Abschluss der Init-Phase des Aufrufs zu. Aufgrund dieser Zeitbeschränkung ist es eine bewährte Methode, im Initialisierungscode außerhalb des Funktionshandlers Folgendes zu tun:

  • Bibliotheken und Abhängigkeiten importieren
  • Erstkonfiguration einrichten
  • Verbindungen zu anderen nachgeschalteten Services und Ressourcen initialisieren

Durch diese statische Initialisierung können diese Ressourcen einmal pro Sandbox initialisiert und dann für alle zukünftigen Aufrufe in der Laufzeitumgebung wiederverwendet werden.

Weitere Informationen finden Sie unter Optimieren der statischen Initialisierung. Oder unter Keine Downstream-Verfügbarkeit im Lambda-Bedienerleitfaden und Funktionscode im Lambda-Entwicklerleitfaden.

Hinweis: Lambda entfernt inaktive Verbindungen zu Downstream-Ressourcen. Damit Ihre Funktion eine dauerhafte Verbindung aufrecht erhalten kann, verwenden Sie die Variable tcp_keepalive, die mit der von Ihnen verwendeten Lambda-Laufzeitumgebung verknüpft ist.

Stellen Sie sicher, dass die Einstellungen für Wiederholungszähler und Zeitüberschreitungen im AWS-SDK, das Sie verwenden, genügend Zeit für die Initialisierung Ihrer Funktion einräumen

Wenn Sie mit einem AWS SDK einen API-Aufruf tätigen und der Aufruf fehlschlägt, versucht das AWS SDK den Aufruf automatisch erneut. Wie oft und wie lange das AWS SDK erneut versucht, wird durch Einstellungen bestimmt, die zwischen den einzelnen AWS-SDKs variieren. Ihre Funktion benötigt möglicherweise mehr Zeit für die Initialisierung, als es die standardmäßigen AWS-SDK-Einstellungen zulassen.

Weitere Informationen finden Sie unter Wie behebe ich Wiederholungs- und Zeitüberschreitungsprobleme beim Aufrufen einer Lambda-Funktion mit einem AWS-SDK?

(Optional) Konfigurieren Sie die bereitgestellte Parallelität für Ihre Lambda-Funktion

Die bereitgestellte Parallelität initialisiert eine angeforderte Anzahl von Laufzeitumgebungen, sodass sie sofort auf die Aufrufe Ihrer Funktion reagieren können. Um die bereitgestellte Parallelität für Ihre Funktion einzurichten, befolgen Sie die Anweisungen unter Konfigurieren der bereitgestellten Parallelität.

Hinweis: Beim Konfigurieren der bereitgestellten Parallelität fallen Gebühren für Ihr AWS-Konto an. Sie können die bereitgestellte Parallelität für eine Version einer Funktion oder für einen Lambda-Funktionsalias konfigurieren.

Stellen Sie sicher, dass Ihre Lambda-Funktion über genügend Systemressourcen verfügt

Die Größe der Netzwerkbandbreite und CPU, die einem Lambda-Funktionsaufruf zugewiesen sind, wird durch die Speicherkonfiguration der Funktion bestimmt.

Weitere Informationen finden Sie unter Speicher und Rechenleistung im Lambda-Bedienerleitfaden.

Stellen Sie sicher, dass alle Hintergrundprozesse, die Ihre Lambda-Funktion verwendet, abgeschlossen sind, bevor der Funktions-Handler eine Zeichenfolge zurückgibt

Weitere Informationen finden Sie unter Erläuterungen zur Wiederverwendung von Containern in AWS Lambda.

Stellen Sie sicher, dass Ihre Lambda-Funktion so konfiguriert ist, dass sie innerhalb der maximalen Zeitüberschreitungseinstellungen aller integrierten AWS-Services arbeitet.

Obwohl das maximale Aufruf-Zeitlimit einer Lambda-Funktion 15 Minuten beträgt, können andere AWS-Services unterschiedliche Zeitüberschreitungs-Grenzwerte haben.

Amazon API Gateway wartet beispielsweise maximal 29 Sekunden, bis ein Proxy-Aufruf der Lambda-Funktion abgeschlossen ist. Weitere Informationen finden Sie unter Wie kann ich die Fehler beheben, die ich erhalte, wenn ich API Gateway mit einer Lambda-Funktion integriere? Außerdem Verwenden von AWS Lambda auch mit anderen Diensten.

Vergewissern Sie sich, dass es einen gültigen Netzwerkpfad zum Endpunkt gibt, den Ihre Funktion erreichen will

Um Ihre Netzwerkeinstellungen zu überprüfen, befolgen Sie die Anweisungen unter Wie behebe ich Zeitüberschreitungsprobleme mit einer Lambda-Funktion, die sich in einer Amazon VPC befindet?


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr