Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
AWS Lambda-Funktionsfehler in Python
Wenn Ihr Code einen Fehler auslöst, generiert Lambda eine JSON-Darstellung des Fehlers. Dieses Fehlerdokument wird im Aufrufprotokoll und im Fall eines synchronen Aufrufs in der Ausgabe angezeigt.
Auf dieser Seite wird beschrieben, wie Lambda Funktionsaufruffehler für die Laufzeit Python mithilfe der Lambda-Konsole und AWS CLI angezeigt werden.
Abschnitte
Funktionsweise
Wenn Sie eine Lambda-Funktion aufrufen, erhält Lambda die Aufrufanfrage und validiert die Berechtigungen in Ihrer Ausführungsrolle, überprüft, ob das Ereignisdokument ein gültiges JSON-Dokument ist, und prüft Parameterwerte.
Wenn die Anforderung die Validierung besteht, sendet Lambda die Anfrage an eine Funktions-Instance. Die Lambda-Laufzeitumgebung wandelt das Ereignisdokument in ein Objekt um und leitet es an Ihren Funktions-Handler weiter.
Wenn Lambda auf einen Fehler stößt, gibt er einen Ausnahmetyp, eine Meldung und einen HTTP-Statuscode zurück, der die Ursache des Fehlers angibt. Der Client oder Service, der die Lambda-Funktion aufgerufen hat, kann den Fehler behandeln oder ihn an einen Endbenutzer weitergeben. Das korrekte Fehlerbehandlungsverhalten hängt von der Art der Anwendung, der Zielgruppe und der Fehlerquelle ab.
Die folgende Liste beschreibt den Bereich der Statuscodes, die Sie von Lambda erhalten können.
2xx
-
Ein
2xx
-Serienfehler mit einemX-Amz-Function-Error
-Header in der Antwort weist auf einen Lambda-Laufzeit- oder -Funktionsfehler hin. Ein2xx
-Serienstatuscode zeigt an, dass Lambda die Anfrage akzeptiert hat, aber anstelle eines Fehlercodes zeigt Lambda den Fehler an, indem derX-Amz-Function-Error
-Header in die Antwort aufgenommen wird. 4xx
-
Ein
4xx
-Serienfehler weist auf einen Fehler hin, den der aufrufende Client oder Dienst beheben kann, indem er die Anfrage ändert, eine Berechtigung beantragt oder die Anfrage wiederholt.4xx
-Serienfehler, abgesehen von429
, weisen allgemein auf einen Fehler bei der Anfrage hin. 5xx
-
Ein
5xx
-Serienfehler weist auf ein Problem mit Lambda oder ein Problem mit der Konfiguration oder Ressourcen der Funktion hin.5xx
-Serienfehler können auf einen temporären Zustand hinweisen, der ohne Eingreifen des Benutzers behoben werden kann. Diese Probleme können vom aufrufenden Client oder Service nicht behoben werden, aber der Eigentümer einer Lambda-Funktion kann das Problem möglicherweise beheben.
Eine vollständige Liste der Aufruffehler finden Sie unter InvokeFunction Fehler .
Verwenden von Lambda-Konsole
Sie können Ihre Funktion auf der Lambda-Konsole aufrufen, indem Sie ein Testereignis konfigurieren und die Ausgabe anzeigen. Die Fehlerausgabe wird in den Ausführungsprotokollen der Funktion erfasst und, wenn die aktives Tracing in AWS X-Ray aktiviert ist.
So rufen Sie eine Funktion in der Lambda-Konsole auf
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie die zu testende Funktion aus und wählen Sie Test.
-
Wählen Sie unter Testereignis die Option Neues Ereignis aus.
-
Wählen Sie eine Vorlage aus.
-
Geben Sie für Name einen Namen für den Test ein. Geben Sie im Texteingabefeld das JSON-Testereignis ein.
-
Wählen Sie Änderungen speichern aus.
-
Wählen Sie Test aus.
Die Lambda-Konsole ruft Ihre Funktion synchron auf und zeigt das Ergebnis an. Um die Antwort, Protokolle und andere Informationen anzuzeigen, erweitern Sie den Abschnitt Details .
Verwenden von AWS Command Line Interface (AWS CLI)
Die AWS CLI ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit den AWS-Services interagieren können. Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
Wenn Sie eine Lambda-Funktion in AWS CLI aufrufen, teilt AWS CLI die Antwort in zwei Dokumente auf. Die AWS CLI-Antwort wird in Ihrer Eingabeaufforderung angezeigt. Wenn ein Fehler aufgetreten ist, enthält die Antwort ein FunctionError
-Feld. Die Aurufantwort oder der Fehler, die bzw. der von der Funktion zurückgegeben wird, wird in die Ausgabedatei geschrieben. Beispiel: output.json
oder output.txt
.
Das folgende Beispiel für den Befehl invoke zeigt, wie Sie eine Funktion aufrufen und die Aufrufantwort in eine output.txt
-Datei schreiben.
aws lambda invoke \ --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload '{"key1": "value1", "key2": "value2", "key3": "value3"}' output.txt
Die cli-binary-format-Option ist erforderlich, wenn Sie AWS CLI Version 2 verwenden. Um dies zur Standardeinstellung zu machen, führen Sie aws configure set cli-binary-format raw-in-base64-out
aus. Weitere Informationen finden Sie unter Von AWS CLI unterstützte globale Befehlszeilenoptionen im AWS Command Line Interface-Benutzerhandbuch für Version 2.
Sie sollten die AWS CLI-Antwort in Ihrer Eingabeaufforderung sehen:
{ "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }
Sie sollten die Antwort auf den Funktionsaufruf in der output.txt
-Datei sehen. In derselben Eingabeaufforderung können Sie die Ausgabe auch in Ihrer Eingabeaufforderung anzeigen mit:
cat output.txt
Sie sollten die Aufrufantwort in Ihrer Eingabeaufforderung sehen.
{"errorMessage": "'action'", "errorType": "KeyError", "stackTrace": [" File \"/var/task/lambda_function.py\", line 36, in lambda_handler\n result = ACTIONS[event['action']](event['number'])\n"]}
Lambda zeichnet auch bis zu 256 KB des Fehlerobjekts in den Protokollen der Funktion auf. Weitere Informationen finden Sie unter AWS Lambda-Funktionsprotokollierung in Python.
Fehlerbehandlung in anderen AWS-Services
Wenn ein anderer AWS-Service Ihre Funktion aufruft, wählt der Service den Aufruftyp und das Wiederholungsverhalten aus. AWS-Services können Ihre Funktion nach einem Zeitplan aufrufen, als Reaktion auf ein Lebenszyklusereignis auf einer Ressource oder um eine Anfrage von einem Benutzer zu bedienen. Einige Services rufen Funktionen asynchron auf und lassen Fehler von Lambda verarbeiten, während es bei anderen Fehlern erneut versucht wird, oder sie an den Benutzer zurückgeben werden.
API Gateway behandelt beispielsweise alle Aufruf- und Funktionsfehler als interne Fehler. Wenn die Lambda-API die Aufruf-Anforderung ablehnt, gibt API Gateway einen 500
-Fehlercode zurück. Wenn die Funktion ausgeführt wird, aber einen Fehler oder eine Antwort im falschen Format zurückgibt, gibt API Gateway den Fehlercode 502 zurück. Um die Fehlerantwort anzupassen, müssen Sie Fehler im Code abfangen und eine Antwort im erforderlichen Format formatieren.
Wir empfehlen die Verwendung von AWS X-Ray, um die Fehlerquelle und deren Ursache zu ermitteln. Mit X-Ray können Sie herausfinden, bei welcher Komponente ein Fehler aufgetreten ist, und Details zu den Fehlern anzeigen. Das folgende Beispiel zeigt einen Funktionsfehler, der zu einer 502
-Antwort von API Gateway führte.
Weitere Informationen finden Sie unter Instrumentieren von Python-Code in AWS Lambda.
Beispiele für Fehler
Der folgende Abschnitt zeigt häufige Fehler, die Sie beim Erstellen, Aktualisieren oder Aufrufen Ihrer Funktion mit Python erhalte Lambda-Laufzeiten.
Beispiel Laufzeitausnahme – ImportError
{ "errorMessage": "Unable to import module 'lambda_function': Cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)", "errorType": "Runtime.ImportModuleError" }
Dieser Fehler ist das Ergebnis der Verwendung von AWS Command Line Interface (AWS CLI) zum Hochladen eines Bereitstellungspakets, das eine C- oder C++-Bibliothek enthält. Zum Beispiel die Pillow (PIL)-
Wir empfehlen die Verwendung des Befehls AWS SAMCLI sam build mit der --use-container
-Option zum Erstellen Ihres Bereitstellungspakets. Wenn Sie die AWS SAM CLI mit dieser Option verwenden, wird ein Docker-Container mit einer Lambda-ähnlichen Umgebung erstellt, die mit Lambda kompatibel ist.
Beispiel JSON-Serialisierungsfehler – Laufzeit.MarshalError
{ "errorMessage": "Unable to marshal response: Object of type AttributeError is not JSON serializable", "errorType": "Runtime.MarshalError" }
Dieser Fehler kann das Ergebnis des Base64-Codierungsmechanismus sein, den Sie in Ihrem Funktionscode verwenden. Zum Beispiel:
import base64 encrypted_data = base64.b64encode(payload_enc).decode("utf-8")
Dieser Fehler kann auch darauf zurückzuführen sein, dass Ihre ZIP-Datei nicht als Binärdatei angegeben wird, wenn Sie Ihre Funktion erstellt oder aktualisiert haben. Wir empfehlen die Verwendung der Befehlsoption fileb:// zum Hochladen Ihres Bereitstellungspakets (.zip-Datei).
aws lambda create-function --function-name my-function --zip-file fileb://my-deployment-package.zip --handler lambda_function.lambda_handler --runtime python3.8 --role arn:aws:iam::your-account-id:role/lambda-ex
Beispielanwendungen
Das GitHub Repository für dieses Handbuch enthält Beispielanwendungen, die die Verwendung der Fehler demonstrieren. Jede Beispielanwendung enthält Skripts für die einfache Bereitstellung und Bereinigung, eine AWS Serverless Application Model (AWS SAM)-Vorlage und unterstützende Ressourcen.
Lambda-Beispielanwendungen in Python
-
blank-python
AWS X-Ray Eine Python-Funktion, die die Verwendung von Protokollierung, Umgebungsvariablen, AWS-Ablaufverfolgung, Ebenen, Einheitentests und des SDK aufzeigt.
Als nächstes
Erfahren Sie, wie Sie Protokollierungsereignisse für Ihre Lambda-Funktion auf der AWS Lambda-Funktionsprotokollierung in Python-Seite anzeigen.