Synchroner Aufruf - AWS Lambda

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.

Synchroner Aufruf

Wenn Sie eine Funktion synchron aufrufen, führt Lambda die Funktion aus und wartet auf eine Antwort. Wenn der Funktionsaufruf beendet ist, gibt Lambda die Antwort aus dem Funktionscode mit zusätzlichen Daten, wie z. B. der Version der aufgerufenen Funktion, zurück. Wenn Sie eine Funktion mithilfe der AWS CLI synchron ausführen möchten, verwenden Sie den Befehl invoke.

aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json

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.

Die Ausgabe sollte folgendermaßen aussehen:

{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }

Das folgende Diagramm zeigt Clients, die eine Lambda-Funktion synchron aufrufen. Lambda sendet die Ereignisse direkt an die Funktion und sendet die Antwort der Funktion zurück an den Aufrufer.


      Clients rufen eine Funktion synchron auf und warten auf eine Antwort.

payload ist eine Zeichenfolge, die ein Ereignis im JSON-Format enthält. Der Name der Datei, in die die AWS CLI die Antwort von der Funktion schreibt, lautet response.json. Wenn die Funktion ein Objekt oder einen Fehler zurückgibt, ist der Antworttext das Objekt oder der Fehler im JSON-Format. Wenn die Funktion fehlerfrei beendet wird, lautet der Antworttext null.

Anmerkung

Lambda wartet nicht, bis externe Erweiterungen abgeschlossen sind, bevor die Antwort gesendet wird. Externe Erweiterungen werden als unabhängige Prozesse in der Ausführungsumgebung ausgeführt und laufen auch nach Abschluss des Funktionsaufrufs weiter. Weitere Informationen finden Sie unter Lambda-Erweiterungen.

Die Ausgabe des Befehls, die im Terminal angezeigt wird, enthält Informationen aus Headern in der Antwort von Lambda. Dies umfasst die Version, von der das Ereignis verarbeitet wurde (nützlich bei der Verwendung von Aliassen) und den von Lambda zurückgegebenen Statuscode. Wenn Lambda die Funktion ausführen konnte, lautet der Statuscode 200, auch wenn die Funktion einen Fehler zurückgegeben hat.

Anmerkung

Bei Funktionen mit einem langen Timeout wird Ihr Client während eines synchronen Aufrufs möglicherweise getrennt, während er auf eine Antwort wartet. Konfigurieren Sie HTTP-Client, SDK, Firewall, Proxy oder Betriebssystem so, dass lange Verbindungen mit Timeout- oder Keepalive-Einstellungen möglich sind.

Wenn Lambda die Funktion nicht ausführen kann, wird der Fehler in der Ausgabe angezeigt.

aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload value response.json

Die Ausgabe sollte folgendermaßen aussehen:

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null') at [Source: (byte[])"value"; line: 1, column: 11]

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:

Sie können die AWS CLI verwenden, um Protokolle für einen Aufruf mit der --log-type-Befehlsoption abzurufen. Die Antwort enthält das Feld LogResult, das bis zu 4 KB base64-verschlüsselte Protokolle aus dem Aufruf enthält.

Beispiel eine Log-ID abrufen

Das folgende Beispiel zeigt, wie eine Protokoll-ID aus dem LogResult-Feld für eine Funktion namens my-function abgerufen wird.

aws lambda invoke --function-name my-function out --log-type Tail

Die Ausgabe sollte folgendermaßen aussehen:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
Beispiel entschlüsseln der Protokolle

Verwenden Sie in derselben Eingabeaufforderung das base64-Dienstprogramm, um die Protokolle zu entschlüsseln. Das folgende Beispiel zeigt, wie Base64-codierte Logs für abgerufen werde my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

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.

Die Ausgabe sollte folgendermaßen aussehen:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

Das base64-Dienstprogramm ist unter Linux, macOS und Ubuntu auf Windowsverfügbar. macOS-Benutzer müssen möglicherweise base64 -D verwenden.

Weitere Informationen über die Invoke-API, einschließlich einer vollständigen Liste von Parametern, Kopfzeilen und Fehlern, finden Sie unter Aufrufen.

Wenn Sie eine Funktion direkt aufrufen, können Sie die Antwort auf Fehler überprüfen und es erneut versuchen. Die AWS CLI- und das AWS SDK unternehmen zudem automatisch einen Wiederholversuch bei Client-Zeitbeschränkungen, Drosselung und Service-Fehlern. Weitere Informationen finden Sie unter Fehlerbehandlung und automatische Wiederholungen in AWS Lambda.