Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
Wie behebe ich Timeout-Fehler beim Aufrufen von Lambda-Funktionen?
Bei meiner AWS Lambda-Funktion ist zeitweise ein Timeout aufgetreten, obwohl ich keine Code-Änderungen vorgenommen habe.
Lösung
Bei Lambda-Funktionen kann es aus verschiedenen Gründen zu einem Timeout kommen. Um Timeouts bei Lambda-Funktionen zu beheben, musst du zunächst ermitteln, was das Problem verursacht hat. Korrigiere dann das Problem basierend auf deinem Anwendungsfall.
Sicherstellen, dass bei deiner Lambda-Funktion ein Timeout aufgetreten ist
Um die Anforderungs-IDs von Aufrufen mit Timeouts abzurufen, suche in der Amazon CloudWatch-Protokollgruppe der Funktion nach der Phrase Timeout der Aufgabe. Verwende dann die Anforderungs-IDs der zugehörigen Timeout-Aufrufe, um die vollständigen Protokolle für jedes Aufruf-Timeout abzurufen.
Anweisungen findest du unter Wie stelle ich fest, ob bei meiner Lambda-Funktion ein Timeout auftritt?
Die Ursache für das Timeout deiner Lambda-Funktion identifizieren
Nutze eine oder mehrere der folgenden Methoden, um die Fehlerursache zu ermitteln, die zum Timeout deiner Funktion geführt hat:
Deine CloudWatch Logs für Lambda überprüfen
Du kannst Amazon CloudWatch verwenden, um alle durch den Code deiner Funktion generierten Protokolle einzusehen und potenzielle Probleme zu identifizieren. Anweisungen findest du unter Verwenden von CloudWatch Logs-Protokollen mit Lambda.
Wenn deine Funktion einen Stack-Trace zurückgibt, gibt die Fehlermeldung im Stack-Trace an, was den Fehler verursacht.
Wichtig: Lambda erzeugt automatisch drei Protokollzeilen für jeden Aufruf (START, END und REPORT). Diese drei Zeilen sind die einzigen Zeilen, die in den CloudWatch-Protokollen deiner Funktion erscheinen, wenn einer der folgenden Punkte zutrifft:
- Im benutzerdefinierten Code der Lambda-Funktion ist keine weitere explizite Protokollierung konfiguriert.
- Das Zeitlimit der Funktion wird erreicht, bevor Lambda den Code der Funktion ausführen kann, der Protokolle ausgibt.
Wenn du anhand der CloudWatch-Protokolle nicht feststellen kannst, was die Timeouts verursacht hat, versuche eine oder mehrere der folgenden Lösungen:
- Vergewissere dich, dass die Einstellungen für die Anzahl der Wiederholungen und Timeouts in dem von dir verwendeten AWS-SDK genügend Zeit für die Initialisierung deiner Funktion lassen.
- Erhöhe die Timeout-Einstellung der Lambda-Funktion vorübergehend, damit der Funktionscode genügend Zeit hat, Protokolldaten zu erzeugen.
- Erhöhe den konfigurierten Speicher der Funktion, um die Latenzzeit für die Aufrufdauer zu verringern und die Rechenleistung zu erhöhen.
Um dem Code deiner Funktion weitere Protokollierungsausgaben hinzuzufügen, siehe die folgende Dokumentation für die von dir verwendete Lambda-Laufzeitversion:
- AWS Lambda-Funktionsprotokollierung in Node.js
- AWS Lambda-Funktionsprotokollierung in Python
- AWS Lambda-Funktionsprotokollierung in Ruby
- AWS Lambda-Funktionsprotokollierung in Java
- AWS Lambda-Funktionsprotokollierung in Go
- AWS Lambda-Funktionsprotokollierung in C#
- AWS Lambda-Funktionsprotokollierung in PowerShell
AWS X-Ray benutzen, um Engpässe bei der Codeleistung zu identifizieren
Wenn deine Lambda-Funktion nachgelagerte AWS-Ressourcen, Microservices, Datenbanken oder HTTP Web APIs verwendet, kannst du AWS X-Ray verwenden, um Probleme mit der Codeleistung zu beheben.
Weitere Informationen findest du unter Lambda-Funktionsaufrufe mit AWS X-Ray visualisieren.
Lambda Insights verwenden, um Metriken auf Systemebene für deine Funktion zu sammeln
Lambda Insights sammelt Metriken auf Systemebene, darunter CPU-Zeit, Speicher, Festplatten- und Netzwerkmetriken. Es sammelt auch Diagnoseinformationen, die Kaltstarts und Lambda-Worker-Abschaltungen umfassen, um dir dabei zu helfen, Probleme mit deinen Lambda-Funktionen zu isolieren.
Hinweis: Die Nutzung von Lambda Insights ist mit Kosten für dein AWS-Konto verbunden. Die von der Lambda-Erweiterung verbrauchte Aufrufzeit wird in 1-ms-Schritten abgerechnet.
VPC Flow Logs nutzen, um festzustellen, warum eine bestimmte Aufrufanforderung abgelehnt oder nicht weitergeleitet wurde
Mit VPC Flow Logs kannst du den gesamten Netzwerkverkehr sehen, der zu und von einer Amazon Virtual Private Cloud (Amazon VPC) fließt.
Weitere Informationen findest du unter Beheben von Netzwerkproblemen in Lambda.
**Hinweis:**Die folgenden Variablen gelten, wenn du dich entscheidest, VPC Flow Logs einzurichten:
- Die Gebühren für die Datenaufnahme und Archivierung von verkauften Protokollen fallen an, wenn du Ablaufprotokolle in CloudWatch Logs oder Amazon Simple Storage Service (Amazon S3) veröffentlichst.
- Wenn du eine Lambda-Funktion für den Zugriff auf Ressourcen in einer Amazon VPC konfigurierst, weist Lambda die Funktion einer Elastic-Network-Schnittstelle zu. Um den mit deiner Lambda-Funktion verbundenen Netzwerkverkehr zu identifizieren, musst du die Network-Schnittstelle der Funktion ausfindig machen. Anweisungen findest du unter Warum kann ich eine von Lambda erstellte Elastic Network-Schnittstelle nicht trennen oder löschen?
HTTP-Wire-Traces zur detaillierten Protokollierung von Netzwerkanfragen verwenden, die durch den Funktionscode während eines Aufrufs erzeugt werden
Weitere Informationen findest du unter Protokollieren von HTTP-Wire-Traces.
Bewährte Methoden zur Vermeidung von Timeouts bei Lambda-Funktionen
Sicherstellen, dass deine Lambda-Funktion idempotent ist
API-Aufrufe können aufgrund vorübergehender Netzwerkprobleme länger dauern als erwartet. Netzwerkprobleme können auch zu Wiederholungsversuchen und doppelten API-Anfragen führen. Um dich auf diese Ereignisse vorzubereiten, stelle sicher, dass die Lambda-Funktion idempotent ist.
Weitere Informationen findest du unter Wie mache ich meine Lambda-Funktion idempotent?
Statische Logik deiner Funktion außerhalb des Funktions-Handlers initialisieren
Wenn du eine Lambda-Funktion initialisierst, gibt Lambda bis zu 10 Sekunden Zeit, um die Init-Phase des Aufrufs abzuschließen. Aufgrund dieser Zeitbeschränkung ist es am besten, die folgenden Aktionen außerhalb des Funktions-Handlers im Initialisierungscode durchzuführen:
- Bibliotheken und Abhängigkeiten importieren
- Die Erstkonfiguration einrichten
- Verbindungen zu anderen Downstream-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 gleichen Laufzeitumgebung wiederverwendet werden.
Weitere Informationen findest du unter Optimizing static initialization.
Hinweis: Lambda entfernt inaktive Verbindungen zu Downstream-Ressourcen. Damit die Funktion eine dauerhafte Verbindung aufrechterhalten kann, verwende die TCP keepAlive-Variable, die mit der von dir verwendeten Lambda-Laufzeit verknüpft ist.
Sicherstellen, dass die Einstellungen für die Anzahl der Wiederholungen und Timeouts in dem von dir verwendeten AWS-SDK genügend Zeit für die Initialisierung deiner Funktion lassen
Wenn du ein AWS-SDK für einen API-Aufruf verwendet hast und der Aufruf fehlschlägt, versucht das AWS-SDK den Aufruf automatisch erneut. Die Anzahl der Wiederholungsversuche des AWS-SDK und die Dauer der einzelnen Wiederholungsversuche werden durch Einstellungen bestimmt, die für jedes AWS-SDK unterschiedlich sind. Die Initialisierung deiner Funktion benötigt möglicherweise mehr Zeit, als es die standardmäßigen AWS-SDK-Einstellungen zulassen.
Weitere Informationen findest du unter Wie behebe ich Probleme mit Wiederholungsversuchen und Timeouts, wenn ich eine Lambda-Funktion mithilfe eines AWS-SDK aufrufe?
(Optional) Bereitgestellte Parallelität für deine Lambda-Funktion konfigurieren
Bereitgestellte Parallelität initialisiert eine angeforderte Anzahl von Laufzeitumgebungen, sodass diese bereit sind, sofort auf die Aufrufe deiner Funktion zu reagieren. Um bereitgestellte Parallelität für deine Funktion einzurichten, folge den Anweisungen unter Konfigurieren von bereitgestellter Parallelität.
Hinweis: Bei der Konfiguration von bereitgestellter Parallelität fallen Gebühren für dein AWS-Konto an. Du kannst bereitgestellte Parallelität für eine Funktionsversion oder für einen Lambda-Funktions-Alias konfigurieren.
Sicherstellen, dass deine Lambda-Funktion über genügend Systemressourcen verfügt
Die Größe der Netzwerkbandbreite und CPU, die einem Lambda-Funktionsaufruf zugewiesen werden, werden durch die Speicherkonfiguration der Funktion bestimmt.
Weitere Informationen findest du unter Speicher und Rechenleistung.
Sicherstellen, dass alle von der Lambda-Funktion verwendeten Hintergrundprozesse abgeschlossen sind, bevor der Funktions-Handler eine Zeichenfolge zurückgibt
Weitere Informationen findest du unter Grundlegendes zur Wiederverwendung von Containern in AWS Lambda.
Überprüfen, ob die Lambda-Funktion so konfiguriert ist, dass sie innerhalb der maximalen Timeout-Einstellungen aller integrierten AWS-Services arbeitet
Auch wenn das maximale Timeout für den Aufruf einer Lambda-Funktion 15 Minuten beträgt, können andere AWS-Services andere Timeout-Grenzen haben.
Amazon API Gateway wartet beispielsweise maximal 29 Sekunden auf den Abschluss eines Lambda-Funktions-Proxy-Aufrufs.
Weitere Informationen findest du unter Wie kann ich die Fehler beheben, die ich erhalte, wenn ich API Gateway in eine Lambda-Funktion integriere?Weitere Informationen findest du unter Aufrufen von Lambda mit Ereignissen aus anderen AWS-Services.
Sicherstellen, dass es einen gültigen Netzwerkpfad zu dem Endpunkt gibt, den die Funktion zu erreichen versucht
Um deine Netzwerkeinstellungen zu überprüfen, befolge die Anweisungen unter Wie kann ich Timeout-Probleme mit einer Lambda-Funktion in einer Amazon VPC beheben?

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 10 Monaten