Verwenden von Lambda mit der AWS CLI - 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.

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. Die CLI-Beispielbefehle in diesem Handbuch verwenden die Linux-Formatierung. Befehle, die Inline-JSON-Dokumente enthalten, müssen neu formatiert werden, wenn Sie die Windows-CLI verwenden.

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
  1. Kopieren Sie den Beispiel-Code in eine Datei mit dem Namen index.js.

  2. Erstellen Sie ein Bereitstellungspaket.

    zip function.zip index.js
  3. 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-ex

    Die 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 Windows verfügbar. Im Fall von macOS lautet der Befehl base64 -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-eventsAusgabe 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 Befehl , um Funktionen zu konfigurieren. Im folgenden Beispiel wird der Funktionsspeicher auf 256 MB gesetzt.

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.