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.
Einführung in das Testen mit sam local invoke
Verwenden Sie die AWS Serverless Application Model Befehlszeilenschnittstelle (AWS SAM CLIsam local invoke
Unterbefehl, um einen einmaligen lokalen Aufruf einer AWS Lambda Funktion zu initiieren.
-
Für eine Einführung in die AWS SAM CLI, siehe Was ist der AWS SAM CLI?
-
Eine Liste der
sam local invoke
Befehlsoptionen finden Sie untersam local invoke. -
Ein Beispiel für die Verwendung
sam local invoke
während eines typischen Entwicklungsworkflows finden Sie unterSchritt 7: (Optional) Testen Sie Ihre Anwendung lokal.
Um es zu verwendensam local invoke
, installieren Sie das AWS SAM CLI indem Sie die folgenden Schritte ausführen:
Vor der Verwendung empfehlen wirsam local invoke
, sich mit folgenden Grundkenntnissen vertraut zu machen:
Lokal eine Lambda-Funktion aufrufen
Wenn du rennst, sam local invoke
AWS SAM CLI geht davon aus, dass Ihr aktuelles Arbeitsverzeichnis das Stammverzeichnis Ihres Projekts ist. Das AWS SAM CLI sucht zuerst nach einer template.[yaml|yml]
Datei in einem .aws-sam
Unterordner. Wenn nicht gefunden, AWS SAM CLI sucht nach einer template.[yaml|yml]
Datei in Ihrem aktuellen Arbeitsverzeichnis.
Um eine Lambda-Funktion lokal aufzurufen
-
Führen Sie im Stammverzeichnis Ihres Projekts Folgendes aus:
$
sam local invoke
<options>
-
Wenn Ihre Anwendung mehr als eine Funktion enthält, geben Sie die logische ID der Funktion an. Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke
HelloWorldFunction
-
Die AWS SAM CLI baut Ihre Funktion in einem lokalen Container auf mit Docker. Es ruft dann Ihre Funktion auf und gibt die Antwort Ihrer Funktion aus.
Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke
Invoking app.lambda_handler (python3.9) Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image Building image.................................................................................................................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Init Duration: 1.09 ms Duration: 608.42 ms Billed Duration: 609 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
Verwalten von -Protokollen
Bei der Verwendung sam local invoke
wird die Laufzeitausgabe der Lambda-Funktion (z. B. Protokolle) und das Ergebnis der Lambda-Funktion an ausgegeben. stderr
stdout
Das Folgende ist ein Beispiel für eine grundlegende Lambda-Funktion:
def handler(event, context): print("some log") # this goes to stderr return "hello world" # this goes to stdout
Sie können diese Standardausgaben speichern. Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke 1> stdout.log
...$
cat stdout.log
"hello world"$
sam local invoke 2> stderr.log
...$
cat stderr.log
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST some log END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Init Duration: 0.91 ms Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
Sie können diese Standardausgaben verwenden, um Ihre lokalen Entwicklungsprozesse weiter zu automatisieren.
Optionen
Übergeben Sie benutzerdefinierte Ereignisse, um die Lambda-Funktion aufzurufen
Verwenden Sie die --event
Option, um ein Ereignis an die Lambda-Funktion zu übergeben. Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke --event
events/s3.json S3JsonLoggerFunction
Sie können Ereignisse mit dem sam local generate-event
Unterbefehl erstellen. Weitere Informationen hierzu finden Sie unter Einführung in das Testen mit sam local generate-event.
Übergeben Sie Umgebungsvariablen, wenn Sie Ihre Lambda-Funktion aufrufen
Wenn Ihre Lambda-Funktion Umgebungsvariablen verwendet, können Sie diese bei lokalen Tests mit der --env-vars
Option übergeben. Dies ist eine hervorragende Möglichkeit, eine Lambda-Funktion lokal mit Diensten in Ihrer Anwendung zu testen, die bereits in der Cloud bereitgestellt sind. Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke --env-vars
locals.json
Geben Sie eine Vorlage oder Funktion an
Um eine Vorlage für das anzugeben AWS SAM CLI um zu referenzieren, verwenden Sie die --template
Option. Die AWS SAM CLI lädt nur diese AWS SAM Vorlage und die Ressourcen, auf die sie verweist.
Um eine Funktion einer verschachtelten Anwendung oder eines geschachtelten Stacks aufzurufen, geben Sie die logische ID der Anwendung oder des Stacks zusammen mit der logischen ID der Funktion an. Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke
StackLogicalId/FunctionLogicalId
Testen Sie eine Lambda-Funktion von Ihrem Terraform project
Verwenden Sie die --hook-name
Option, um Lambda-Funktionen lokal von Ihrem aus zu testen Terraform projekte. Weitere Informationen hierzu finden Sie unter Mit dem AWS SAM CLI mit Terraform zum lokalen Debuggen und Testen.
Im Folgenden wird ein Beispiel gezeigt:
$
sam local invoke --hook-name terraform --beta-features
Bewährte Methoden
Wenn Ihre Anwendung ein .aws-sam
Verzeichnis hat, das nicht ausgeführt wirdsam build
, stellen Sie sicher, dass es sam build
jedes Mal ausgeführt wird, wenn Sie Ihren Funktionscode aktualisieren. Führen Sie dann sam local invoke
den Befehl aus, um Ihren aktualisierten Funktionscode lokal zu testen.
Lokales Testen ist eine hervorragende Lösung für schnelles Entwickeln und Testen vor der Bereitstellung in der Cloud. Bei lokalen Tests wird jedoch nicht alles überprüft, z. B. die Berechtigungen zwischen Ihren Ressourcen in der Cloud. Testen Sie Ihre Anwendungen so oft wie möglich in der Cloud. Wir empfehlen sam sync
die Verwendung, um Ihre Cloud-Test-Workflows zu beschleunigen.
Beispiele
Generieren Sie ein Amazon API Gateway-Beispielereignis und verwenden Sie es, um lokal eine Lambda-Funktion aufzurufen
Zuerst generieren wir eine API HTTP API Gateway-Event-Payload und speichern sie in unserem events
Ordner.
$
sam local generate-event
apigateway http-api-proxy > events/apigateway_event.json
Als Nächstes ändern wir unsere Lambda-Funktion, um einen Parameterwert aus dem Ereignis zurückzugeben.
def lambda_handler(event, context): print("HelloWorldFunction invoked") return { "statusCode": 200, "body": json.dumps({ "message": event['queryStringParameters']['parameter2'], }), }
Als Nächstes rufen wir lokal unsere Lambda-Funktion auf und stellen unser benutzerdefiniertes Ereignis bereit.
$
sam local invoke --event
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"value\"}"}%events/apigateway_event.json
Übergeben Sie Umgebungsvariablen, wenn Sie eine Lambda-Funktion lokal aufrufen
Diese Anwendung hat eine Lambda-Funktion, die eine Umgebungsvariable für einen Amazon DynamoDB-Tabellennamen verwendet. Das Folgende ist ein Beispiel für die in der Vorlage definierte Funktion: AWS SAM
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 ... Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Description: get all items Policies: - DynamoDBReadPolicy: TableName: !Ref SampleTable Environment: Variables: SAMPLE_TABLE: !Ref SampleTable ...
Wir möchten unsere Lambda-Funktion lokal testen und gleichzeitig mit unserer DynamoDB-Tabelle in der Cloud interagieren lassen. Dazu erstellen wir unsere Umgebungsvariablendatei und speichern sie im Stammverzeichnis unseres Projekts unter. locals.json
Der hier angegebene Wert für SAMPLE_TABLE
verweist auf unsere DynamoDB-Tabelle in der Cloud.
{ "getAllItemsFunction": { "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98" } }
Als Nächstes führen wir unsere Umgebungsvariablen mit der Option aus sam local invoke
und übergeben sie. --env-vars
$
sam local invoke
Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"body":"{}"}getAllItemsFunction
--env-varslocals.json
Weitere Informationen
Eine Liste aller sam local invoke
Optionen finden Sie untersam local invoke.
Eine Demo der Verwendung sam local
finden Sie unter AWS SAM Lokale Entwicklung. Testen von AWS Cloud Ressourcen aus lokalen Entwicklungsumgebungen