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.
Verwenden von Lambda mit der AWS CLI
Sie können die AWS Command Line Interface verwenden, um Funktionen und andere AWS Lambda-Ressourcen zu verwalten. Die AWS CLI verwendet die AWS SDK for Python (Boto) für die Interaktion mit der Lambda-API. Sie können damit mehr über die API erfahren und dieses Wissen für die Entwicklung von Anwendungen, die Lambda mit dem AWS-SDK verwenden, nutzen.
In diesem Tutorial werden Sie Lambda-Funktionen mit der AWS CLI verwalten und aufrufen. Weitere Informationen finden Sie unter Was ist AWS CLI? im AWS Command Line Interface-Benutzerhandbuch.
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass Sie über Kenntnisse zu den grundlegenden Lambda-Operationen und der Lambda-Konsole verfügen. Wenn Sie es noch nicht getan haben, folgen Sie den Anweisungen in Erstellen einer Lambda-Funktion mit der Konsole.
Um die folgenden Schritte durchzuführen, benötigen Sie die AWS Command Line Interface (AWS CLI) Version 2. Befehle und die erwartete Ausgabe werden in separaten Blöcken aufgeführt:
aws --version
Die Ausgabe sollte folgendermaßen aussehen:
aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2
Bei langen Befehlen wird ein Escape-Zeichen (\
) wird verwendet, um einen Befehl über mehrere Zeilen zu teilen.
Verwenden Sie auf Linux und macOS Ihren bevorzugten Shell- und Paket-Manager.
Anmerkung
In Windows werden einige Bash-CLI-Befehle, die Sie häufig mit Lambda verwenden (z. B. zip
), von den integrierten Terminals des Betriebssystems nicht unterstützt. Um eine in Windows integrierte Version von Ubuntu und Bash zu erhalten, installieren Sie das Windows-Subsystem für Linux
Erstellen der Ausführungsrolle
Erstellen Sie die Ausführungsrolle die Ihrer Funktion die Berechtigung für den Zugriff auf AWS-Ressourcen erteilt. Verwenden Sie den Befehl AWS CLI, um eine Ausführungsrolle mit der create-role
zu erstellen.
Im folgenden Beispiel geben Sie die Vertrauensrichtlinie inline an. Die Anforderungen für Escape-Anführungszeichen in der JSON-Zeichenfolge variieren je nach Shell.
aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
Sie können die Vertrauensrichtlinie für die Rolle auch mithilfe einer JSON-Datei definieren. Im folgenden Beispiel ist trust-policy.json
eine Datei im aktuellen Verzeichnis. Diese Vertrauensrichtlinie ermöglicht es Lambda, die Berechtigungen der Rolle zu verwenden, indem es dem Service-Prinzipal lambda.amazonaws.com
die Erlaubnis erteilt, die Aktion AWS Security Token Service (AWS STS) AssumeRole
aufzurufen.
Beispiel trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json
Die Ausgabe sollte folgendermaßen aussehen:
{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
Um der Rolle Berechtigungen hinzuzufügen, verwenden Sie den attach-policy-to-role-Befehl. Beginnen Sie mit dem Hinzufügen der AWSLambdaBasicExecutionRole
verwalteten Richtlinie.
aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Die AWSLambdaBasicExecutionRole Richtlinie verfügt über die Berechtigungen, die die Funktion zum Schreiben von Protokollen in CloudWatch -Protokolle benötigt.
Erstellen der Funktion
Das folgende Beispiel protokolliert die Werte der Umgebungsvariablen und des Ereignisobjekts.
Beispiel index.js
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.log("EVENT\n" + JSON.stringify(event, null, 2)) return context.logStreamName }
So erstellen Sie die Funktion
-
Kopieren Sie den Beispiel-Code in eine Datei mit dem Namen
index.js
. -
Erstellen Sie ein Bereitstellungspaket.
zip function.zip index.js
-
Erstellen Sie eine Lambda-Funktion mit dem Befehl
create-function
. Ersetzen Sie den markierten Text im Rollen-ARN durch Ihre Konto-ID.aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --role arn:aws:iam::
123456789012
:role/lambda-exDie Ausgabe sollte folgendermaßen aussehen:
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }
Um Protokolle für einen Aufruf über die Befehlszeile abzurufen, verwenden Sie die Option --log-type
. Die Antwort enthält das Feld LogResult
, das bis zu 4 KB base64-verschlüsselte Protokolle aus dem Aufruf enthält.
aws lambda invoke --function-name my-function out --log-type Tail
Die Ausgabe sollte folgendermaßen aussehen:
{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
Mit dem Dienstprogramm base64
können Sie die Protokolle dekodieren.
aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d
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
-Serviceprogramm ist nur in Linux, macOS und Ubuntu auf Windowsbase64 -D
.
Um vollständige Protokollereignisse über die Befehlszeile zu erhalten, können Sie den Namen des Protokoll-Streams in die Ausgabe Ihrer Funktion einschließen, wie im voranstehenden Beispiel veranschaulicht. Das folgende Beispielskript ruft eine Funktion mit dem Namen my-function
auf und lädt die letzten fünf Protokollereignisse herunter.
Beispiel get-logs.sh-Skript
Dieses Beispiel erfordert, dass my-function
eine Protokoll-Stream-ID zurückgibt.
#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name $(cat out) --limit 5
Das Skript verwendet sed
zum Entfernen von Anführungszeichen aus der Ausgabedatei und wechselt 15 Sekunden lang in den Ruhezustand, um Zeit einzuräumen, damit Protokolle verfügbar werden können. Die Ausgabe enthält die Antwort von Lambda und die get-log-events
Ausgabe des Befehls.
./get-logs.sh
Die Ausgabe sollte folgendermaßen aussehen:
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }
Aktualisieren der Funktion
Nachdem Sie eine Funktion erstellt haben, können Sie zusätzliche Funktionen für die Funktion konfigurieren, z. B. Auslöser, Netzwerkzugriff und Dateisystemzugriff. Sie können auch Ressourcen anpassen, die mit der Funktion verknüpft sind, wie Arbeitsspeicher und Gleichzeitigkeit. Diese Konfigurationen gelten für Funktionen, die als ZIP-Dateiarchive definiert sind und für Funktionen, die als Container-Images definiert sind.
Verwenden Sie den update-function-configuration
Beispiel update-function-configuration -Befehl
aws lambda update-function-configuration \ --function-name my-function \ --memory-size 256
Auflisten der Lambda-Funktionen in Ihrem Konto
Führen Sie den folgenden AWS CLI-Befehl list-functions
aus, um eine Liste von Funktionen abzurufen, die Sie erstellt haben.
aws lambda list-functions --max-items 10
Die Ausgabe sollte folgendermaßen aussehen:
{ "Functions": [ { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", ... }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", ... }, ... ], "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=" }
Als Reaktion gibt Lambda eine Liste von bis zu 10 Funktionen zurück. Wenn weitere Funktionen vorhanden sind, die Sie abrufen können, stellt NextToken
eine Markierung bereit, die Sie in der nächsten list-functions
-Anforderung verwenden können. Der folgende list-functions
AWS CLI-Befehl zeigt den Parameter --starting-token
.
aws lambda list-functions --max-items 10 --starting-token
eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=
Abrufen einer Lambda-Funktion
Der Lambda-CLI-Befehl get-function
gibt Lambda-Funktionsmetadaten sowie eine vorsignierte URL zurück, die Sie zum Herunterladen des Bereitstellungspakets der Funktion nutzen können.
aws lambda get-function --function-name my-function
Die Ausgabe sollte folgendermaßen aussehen:
{ "Configuration": { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }, "Code": { "RepositoryType": "S3", "Location": "https://awslambda-us-east-2-tasks.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..." } }
Weitere Informationen finden Sie unter GetFunction.
Bereinigen
Führen Sie den folgenden delete-function
-Befehl aus, um die my-function
-Funktion zu löschen.
aws lambda delete-function --function-name my-function
Löschen Sie die IAM-Rolle, die Sie in der IAM-Konsole erstellt haben. Weitere Informationen zum Löschen von Rollen finden Sie unter Löschen von Rollen oder Instance-Profilen im IAM-Benutzerhandbuch.