Einführung in das Testen in der Cloud mit sam remote invoke - AWS Serverless Application Model

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 in der Cloud mit sam remote invoke

Verwenden Sie den AWS Serverless Application Model Befehl Command Line Interface (AWS SAM CLI)sam remote invoke, um mit unterstützten AWS Ressourcen in der AWS Cloud zu interagieren. Sie können sam remote invoke damit die folgenden Ressourcen aufrufen:

  • Amazon Kinesis Data Streams — Senden Sie Datensätze an Kinesis Data Streams Streams-Anwendungen.

  • AWS Lambda— Rufen Sie Ereignisse auf und übergeben Sie sie an Ihre Lambda-Funktionen.

  • Amazon Simple Queue Service (Amazon SQS) — Nachrichten an Amazon SQS SQS-Warteschlangen senden.

  • AWS Step Functions— Ruft Step Functions Functions-Zustandsmaschinen auf, um die Ausführung zu starten.

Eine Einführung in die finden Sie AWS SAMCLI unterWas ist das? AWS SAMCLI.

Ein Beispiel für die Verwendung sam remote invoke während eines typischen Entwicklungsworkflows finden Sie unterSchritt 5: Interagieren Sie mit Ihrer Funktion im AWS Cloud.

Um das zu verwendensam remote invoke, installieren Sie das, AWS SAMCLI indem Sie wie folgt vorgehen:

Wir empfehlen außerdem, auf die neueste Version von zu aktualisieren AWS SAMCLI. Weitere Informationen hierzu finden Sie unter Aktualisierung des AWS SAMCLI.

Vor der Verwendung empfehlen wirsam remote invoke, sich mit folgenden Grundkenntnissen vertraut zu machen:

Verwenden Sie den Befehl sam remote invoke

Bevor Sie diesen Befehl verwenden können, muss Ihre Ressource auf dem AWS Cloud bereitgestellt werden.

Verwenden Sie die folgende Befehlsstruktur und führen Sie sie im Stammverzeichnis Ihres Projekts aus:

$ sam remote invoke <arguments> <options>
Anmerkung

Auf dieser Seite werden Optionen angezeigt, die an der Befehlszeile bereitgestellt werden. Sie können Optionen auch in der Konfigurationsdatei Ihres Projekts konfigurieren, anstatt sie an der Befehlszeile zu übergeben. Weitere Informationen hierzu finden Sie unter Konfigurieren Sie die Projekteinstellungen.

Eine Beschreibung der sam remote invoke Argumente und Optionen finden Sie untersam remote invoke.

Verwendung mit Kinesis Data Streams

Sie können Datensätze an eine Kinesis Data Streams Streams-Anwendung senden. Sie AWS SAM CLI sendet Ihren Datensatz und gibt eine Shard-ID und eine Sequenznummer zurück. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world Putting record to Kinesis data stream KinesisStream Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980850790050483811301135051202232322" }%
Um einen Datensatz zu senden
  1. Geben Sie einen Ressourcen-ID-Wert als Argument für Ihre Kinesis Data Streams Streams-Anwendung an. Informationen zu gültigen Ressourcen-IDs finden Sie unter Ressourcen-ID.

  2. Stellen Sie den Datensatz als Ereignis bereit, das an Ihre Kinesis Data Streams Streams-Anwendung gesendet werden soll. Sie können das Ereignis mit der --event Option in der Befehlszeile oder mithilfe von aus einer Datei angeben. --event-file Wenn Sie kein Ereignis angeben, AWS SAM CLI sendet das ein leeres Ereignis.

Verwendung mit Lambda-Funktionen

Sie können eine Lambda-Funktion in der Cloud aufrufen und ein leeres Ereignis übergeben oder ein Ereignis in der Befehlszeile oder aus einer Datei bereitstellen. Das ruft AWS SAM CLI Ihre Lambda-Funktion auf und gibt ihre Antwort zurück. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke HelloWorldFunction --stack-name sam-app Invoking Lambda Function HelloWorldFunction START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Duration: 6.62 ms Billed Duration: 7 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 164.06 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
Um eine Lambda-Funktion aufzurufen
  1. Geben Sie einen Ressourcen-ID-Wert als Argument für Ihre Lambda-Funktion an. Informationen zu gültigen Ressourcen-IDs finden Sie unter Ressourcen-ID.

  2. Geben Sie ein Ereignis an, das an Ihre Lambda-Funktion gesendet werden soll. Sie können das Ereignis in der Befehlszeile mit der --event Option oder aus einer Datei mit --event-file angeben. Wenn Sie kein Ereignis angeben, AWS SAM CLI sendet das ein leeres Ereignis.

Lambda-Funktionen, die mit Response-Streaming konfiguriert sind

Der sam remote invoke Befehl unterstützt Lambda-Funktionen, die für das Streamen von Antworten konfiguriert sind. Sie können eine Lambda-Funktion so konfigurieren, dass sie Antworten streamt, indem Sie die FunctionUrlConfig Eigenschaft in Ihren AWS SAM Vorlagen verwenden. Wenn Sie es verwendensam remote invoke, erkennt das AWS SAMCLI automatisch Ihre Lambda-Konfiguration und wird mit Antwort-Streaming aufgerufen.

Ein Beispiel finden Sie unter Rufen Sie eine Lambda-Funktion auf, die für das Streamen von Antworten konfiguriert ist.

Übergeben Sie gemeinsam nutzbare Testereignisse an eine Lambda-Funktion in der Cloud

Gemeinsam nutzbare Testereignisse sind Testereignisse, die Sie mit anderen teilen können. AWS-Konto Weitere Informationen finden Sie unter Gemeinsam nutzbare Testereignisse im AWS Lambda Entwicklerhandbuch.

Auf gemeinsam nutzbare Testereignisse zugreifen und diese verwalten

Sie können den AWS SAM CLI sam remote test-event Befehl verwenden, um auf gemeinsam nutzbare Testereignisse zuzugreifen und diese zu verwalten. Sie können ihn beispielsweise für Folgendes verwendensam remote test-event:

  • Rufen Sie gemeinsam nutzbare Testereignisse aus der EventBridge Amazon-Schemaregistry ab.

  • Ändern Sie gemeinsam nutzbare Testereignisse lokal und laden Sie sie in die EventBridge Schemaregistrierung hoch.

  • Löschen Sie gemeinsam nutzbare Testereignisse aus der EventBridge Schemaregistrierung.

Weitere Informationen hierzu finden Sie unter Einführung in Cloud-Tests mit sam remote test-event.

Übergeben Sie ein gemeinsam nutzbares Testereignis an eine Lambda-Funktion in der Cloud

Um ein gemeinsam nutzbares Testereignis aus der EventBridge Schemaregistrierung an Ihre Lambda-Funktion in der Cloud zu übergeben, verwenden Sie die --test-event-name Option und geben Sie den Namen des gemeinsam nutzbaren Testereignisses an. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event

Wenn Sie das gemeinsam nutzbare Testereignis lokal speichern, können Sie die --event-file Option verwenden und den Dateipfad und den Namen des lokalen Testereignisses angeben. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json

Verwenden von mit Amazon SQS

Sie können Nachrichten an Amazon SQS SQS-Warteschlangen senden. Das AWS SAM CLI gibt Folgendes zurück:

  • Nachrichten-ID

  • MD5 des Nachrichtentexts

  • Metadaten der Antwort

Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke MySqsQueue --stack-name sqs-example -event hello Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592", "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652" }%
So senden Sie eine Nachricht
  1. Geben Sie einen Ressourcen-ID-Wert als Argument für die Amazon SQS SQS-Warteschlange an. Informationen zu gültigen Ressourcen-IDs finden Sie unter Ressourcen-ID.

  2. Geben Sie ein Ereignis an, das an Ihre Amazon SQS SQS-Warteschlange gesendet werden soll. Sie können das Ereignis in der Befehlszeile mit der --event Option oder aus einer Datei mit --event-file angeben. Wenn Sie kein Ereignis angeben, AWS SAM CLI sendet das ein leeres Ereignis.

Mit Step-Funktionen verwenden

Sie können eine Step Functions Functions-Zustandsmaschine aufrufen, um die Ausführung zu starten. Der AWS SAM CLI wartet, bis der State-Machine-Workflow abgeschlossen ist, und gibt eine Ausgabe des letzten Schritts der Ausführung zurück. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example --event '{"is_developer": true}' Invoking Step Function HelloWorldStateMachine "Hello Developer World"%
Um eine Zustandsmaschine aufzurufen
  1. Geben Sie einen Ressourcen-ID-Wert als Argument für die Step Functions Functions-Zustandsmaschine an. Informationen zu gültigen Ressourcen-IDs finden Sie unter Ressourcen-ID.

  2. Geben Sie ein Ereignis an, das an Ihre Zustandsmaschine gesendet werden soll. Sie können das Ereignis mit der --event Option in der Befehlszeile oder mithilfe von einer Datei bereitstellen--event-file. Wenn Sie kein Ereignis angeben, AWS SAM CLI sendet das ein leeres Ereignis.

Verwenden von Sam Remote Invoke-Befehlsoptionen

In diesem Abschnitt werden einige der wichtigsten Optionen behandelt, die Sie mit dem sam remote invoke Befehl verwenden können. Eine vollständige Liste der Optionen finden Sie untersam remote invoke.

Übergeben Sie ein Ereignis an Ihre Ressource

Verwenden Sie die folgenden Optionen, um Ereignisse an Ihre Ressourcen in der Cloud weiterzuleiten:

  • --event— Übergibt ein Ereignis an der Befehlszeile.

  • --event-file— Übergibt ein Ereignis aus einer Datei.

Beispiele für Lambda

Wird verwendet--event, um ein Ereignis an der Befehlszeile als Zeichenkettenwert zu übergeben:

$ sam remote invoke HelloWorldFunction --stack-name sam-app --event '{"message": "hello!"}' Invoking Lambda Function HelloWorldFunction START RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Version: $LATEST END RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab REPORT RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Duration: 16.41 ms Billed Duration: 17 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 185.96 ms {"statusCode":200,"body":"{\"message\":\"hello!\"}"}%

Wird verwendet--event-file, um ein Ereignis aus einer Datei zu übergeben und den Pfad zur Datei anzugeben:

$ cat event.json {"message": "hello from file"}% $ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file event.json Invoking Lambda Function HelloWorldFunction START RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Version: $LATEST END RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 REPORT RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Duration: 21.15 ms Billed Duration: 22 ms Memory Size: 128 MB Max Memory Used: 67 MB {"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%

Übergeben Sie ein Ereignis mitstdin:

$ cat event.json {"message": "hello from file"}% $ cat event.json | sam remote invoke HelloWorldFunction --stack-name sam-app --event-file - Reading event from stdin (you can also pass it from file with --event-file) Invoking Lambda Function HelloWorldFunction START RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Version: $LATEST END RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a REPORT RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Duration: 1.36 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 67 MB {"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%

Konfigurieren Sie die AWS SAMCLI Antwortausgabe

Wenn Sie eine unterstützte Ressource mit aufrufensam remote invoke, AWS SAMCLI gibt die eine Antwort zurück, die Folgendes enthält:

  • Metadaten anfordern — Mit der Anfrage verknüpfte Metadaten. Dazu gehören eine Anforderungs-ID und eine Startzeit der Anfrage.

  • Ressourcenantwort — Die Antwort Ihrer Ressource nach dem Aufruf in der Cloud.

Sie können die --output Option verwenden, um die AWS SAM CLI Ausgabeantwort zu konfigurieren. Die folgenden Optionswerte sind verfügbar:

  • json— Metadaten und Ressourcenantwort werden in einer JSON Struktur zurückgegeben. Die Antwort enthält die vollständige SDK Ausgabe.

  • text— Metadaten werden in Textstruktur zurückgegeben. Die Ressourcenantwort wird im Ausgabeformat der Ressource zurückgegeben.

Das Folgende ist ein Beispiel für eine json Ausgabe:

$ sam remote invoke --stack-name sam-app --output json Invoking Lambda Function HelloWorldFunction { "ResponseMetadata": { "RequestId": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Mon, 19 Jun 2023 17:15:46 GMT", "content-type": "application/json", "content-length": "57", "connection": "keep-alive", "x-amzn-requestid": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41", "x-amzn-remapped-content-length": "0", "x-amz-executed-version": "$LATEST", "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==", "x-amzn-trace-id": "root=1-64908d42-17dab270273fcc6b527dd6b8;sampled=0;lineage=2301f8dc:0" }, "RetryAttempts": 0 }, "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==", "ExecutedVersion": "$LATEST", "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}" }%

Wenn Sie eine json Ausgabe angeben, wird die gesamte Antwort zurückgegebenstdout. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke --stack-name sam-app --output json 1> stdout.log Invoking Lambda Function HelloWorldFunction $ cat stdout.log { "ResponseMetadata": { "RequestId": "d30d280f-8188-4372-bc94-ce0f1603b6bb", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Mon, 19 Jun 2023 17:35:56 GMT", "content-type": "application/json", "content-length": "57", "connection": "keep-alive", "x-amzn-requestid": "d30d280f-8188-4372-bc94-ce0f1603b6bb", "x-amzn-remapped-content-length": "0", "x-amz-executed-version": "$LATEST", "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=", "x-amzn-trace-id": "root=1-649091fc-771473c7778689627a6122b7;sampled=0;lineage=2301f8dc:0" }, "RetryAttempts": 0 }, "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=", "ExecutedVersion": "$LATEST", "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}" }%

Das Folgende ist ein Beispiel für eine text Ausgabe:

$ sam remote invoke --stack-name sam-app --output text Invoking Lambda Function HelloWorldFunction START RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Version: $LATEST END RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 REPORT RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Duration: 9.13 ms Billed Duration: 10 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 165.50 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%

Wenn Sie eine text Ausgabe angeben, wird die Laufzeitausgabe der Lambda-Funktion (z. B. Logs) zurückgegeben. stderr Die Nutzlast der Lambda-Funktion wird zurückgegeben. stdout Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke --stack-name sam-app --output text 2> stderr.log {"statusCode":200,"body":"{\"message\":\"hello world\"}"}% $ cat stderr.log Invoking Lambda Function HelloWorldFunction START RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Version: $LATEST END RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 REPORT RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Duration: 40.62 ms Billed Duration: 41 ms Memory Size: 128 MB Max Memory Used: 68 MB $ sam remote invoke --stack-name sam-app --output text 1> stdout.log Invoking Lambda Function HelloWorldFunction START RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Version: $LATEST END RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd REPORT RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Duration: 2.31 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 67 MB $ cat stdout.log {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%

Passen Sie die Parameter an Boto3

Denn sam remote invoke AWS SAM CLI verwendet das AWS SDK for Python (Boto3), um mit Ihren Ressourcen in der Cloud zu interagieren. Sie können die --parameter Option verwenden, um Parameter anzupassen. Boto3 Eine Liste der unterstützten Parameter, die Sie anpassen können, finden Sie unter--parameter.

Beispiele

Rufen Sie eine Lambda-Funktion auf, um Parameterwerte zu validieren und Berechtigungen zu überprüfen:

$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="DryRun"

Verwenden Sie die --parameter Option mehrmals in einem einzigen Befehl, um mehrere Parameter bereitzustellen:

$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="Event" --parameter LogType="None"

Andere Optionen

Eine vollständige Liste der sam remote invoke Optionen finden Sie untersam remote invoke.

Konfigurieren Sie Ihre Projektkonfigurationsdatei

Um sam remote invoke in Ihrer Konfigurationsdatei zu konfigurieren, verwenden Sie remote_invoke in Ihrer Tabelle. Im Folgenden finden Sie ein Beispiel für eine samconfig.toml Datei, in der Standardwerte für den sam remote invoke Befehl konfiguriert werden.

...
version =0.1

[default]
...
[default.remote_invoke.parameters]
stack_name = "cloud-app"
event = '{"message": "Hello!"}'

Beispiele

Ein grundlegendes Anwendungsbeispiel finden Sie unter AWS Lambda Funktionen mit AWS SAM Remote testen im AWS Compute-Blog. sam remote invoke

Beispiele für Kinesis Data Streams

Grundlegende Beispiele

Senden Sie einen Datensatz aus einer Datei an eine Kinesis Data Streams Streams-Anwendung. Die Kinesis Data Streams Streams-Anwendung wird identifiziert, indem ein ARN für die Ressourcen-ID bereitgestellt wird:

$ sam remote invoke arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ --event-file event.json

Senden Sie ein in der Befehlszeile bereitgestelltes Ereignis an eine Kinesis Data Streams Streams-Anwendung:

$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world Putting record to Kinesis data stream KinesisStream Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980903986194508740483329854174920706" }%

Rufen Sie die physische ID der Kinesis Data Streams Streams-Anwendung ab. Geben Sie dann ein Ereignis in der Befehlszeile ein:

$ sam list resources --stack-name kinesis-example --output json [ { "LogicalResourceId": "KinesisStream", "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ" } ] $ sam remote invoke kinesis-example-KinesisStream-ZgnLcQey4xUQ --event hello Putting record to Kinesis data stream KinesisStream Auto converting value 'hello' into JSON '"hello"'. If you don't want auto-conversion, please provide a JSON string as event { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904340716841045751814812900261890" }%

Geben Sie in der Befehlszeile eine JSON-Zeichenfolge als Ereignis an:

$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"method": "GET", "body": ""}' Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904492868617924990209230536441858" }%

Senden Sie ein leeres Ereignis an die Kinesis Data Streams Streams-Anwendung:

$ sam remote invoke KinesisStream --stack-name kinesis-example Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904866469008589597168190416224258" }%

Gibt die AWS SAM CLI Antwort im JSON-Format zurück:

$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980905078409420803696667195489648642", "ResponseMetadata": { "RequestId": "ebbbd307-3e9f-4431-b67c-f0715e9e353e", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "ebbbd307-3e9f-4431-b67c-f0715e9e353e", "x-amz-id-2": "Q3yBcgTwtPaQTV26IKclbECmZikUYOzKY+CzcxA84ZHgCkc5T2N/ITWg6RPOQcWw8Gn0tNPcEJBEHyVVqboJAPgCritqsvCu", "date": "Thu, 09 Nov 2023 18:13:10 GMT", "content-type": "application/x-amz-json-1.1", "content-length": "110" }, "RetryAttempts": 0 } }%

Geben Sie die JSON-Ausgabe an stdout zurück:

$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json 1> stdout.log Putting record to Kinesis data stream KinesisStream $ cat stdout.log { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980906397777867595039988349006774274", "ResponseMetadata": { "RequestId": "f4290006-d84b-b1cd-a9ee-28306eeb2939", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "f4290006-d84b-b1cd-a9ee-28306eeb2939", "x-amz-id-2": "npCqz+IBKpoL4sQ1ClbUmxuJlbeA24Fx1UgpIrS6mm2NoIeV2qdZSN5AhNurdssykXajBrXaC9anMhj2eG/h7Hnbf+bPuotU", "date": "Thu, 09 Nov 2023 18:33:26 GMT", "content-type": "application/x-amz-json-1.1", "content-length": "110" }, "RetryAttempts": 0 } }%

Beispiele für Lambda

Grundlegende Beispiele

Rufen Sie eine Lambda-Funktion auf, indem Sie den ARN als Ressourcen-ID angeben:

$ sam remote invoke arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-ohRFEn2RuAvp

Rufen Sie eine Lambda-Funktion auf, indem Sie die logische ID als Ressourcen-ID angeben:

Sie müssen auch den AWS CloudFormation Stack-Namen mithilfe der --stack-name Option angeben. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke HelloWorldFunction --stack-name sam-app

Wenn Ihre Anwendung eine einzelne Lambda-Funktion enthält, müssen Sie deren logische ID nicht angeben. Sie können nur die --stack-name Option angeben. Im Folgenden wird ein Beispiel gezeigt:

$ sam remote invoke --stack-name sam-app

Rufen Sie eine Lambda-Funktion auf, indem Sie die physische ID als Ressourcen-ID angeben:

Die physische ID wird bei der Bereitstellung mit erstellt. AWS CloudFormation

$ sam remote invoke sam-app-HelloWorldFunction-TZvxQRFNv0k4

Rufen Sie eine Lambda-Funktion eines untergeordneten Stacks auf:

In diesem Beispiel enthält unsere Anwendung die folgende Verzeichnisstruktur:

lambda-example
├── childstack
│   ├── function
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── template.yaml
├── events
│   └── event.json
├── samconfig.toml
└── template.yaml

Um die Lambda-Funktion von our aufzurufenchildstack, führen wir Folgendes aus:

$ sam remote invoke ChildStack/HelloWorldFunction --stack-name lambda-example Invoking Lambda Function HelloWorldFunction START RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Version: $LATEST END RequestId: 207a864b-e67c-4307-8478-365b004d4bcd REPORT RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Duration: 1.27 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 36 MB Init Duration: 111.07 ms {"statusCode": 200, "body": "{\"message\": \"Hello\", \"received_event\": {}}"}%

Rufen Sie eine Lambda-Funktion auf, die für das Streamen von Antworten konfiguriert ist

In diesem Beispiel verwenden wir die, um eine neue serverlose Anwendung AWS SAMCLI zu initialisieren, die eine Lambda-Funktion enthält, die so konfiguriert ist, dass sie ihre Antwort streamt. Wir stellen unsere Anwendung in der Cloud bereit AWS Cloud und verwenden sam remote invoke sie, um mit unserer Funktion in der Cloud zu interagieren.

Wir beginnen damit, den sam init Befehl auszuführen, um eine neue serverlose Anwendung zu erstellen. Wir wählen die Lambda Response Streaming-Schnellstartvorlage aus und geben unserer Anwendung lambda-streaming-nodejs-appeinen Namen.

$ sam init You can preselect a particular runtime or package type when using the `sam init` experience. Call `sam init --help` to learn more. Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Choose an AWS Quick Start application template 1 - Hello World Example ... 9 - Lambda Response Streaming ... 15 - Machine Learning Template: 9 Which runtime would you like to use? 1 - go (provided.al2) 2 - nodejs18.x 3 - nodejs16.x Runtime: 2 Based on your selections, the only Package type available is Zip. We will proceed to selecting the Package type as Zip. Based on your selections, the only dependency manager available is npm. We will proceed copying the template using npm. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: ENTER Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER Project name [sam-app]: lambda-streaming-nodejs-app ----------------------- Generating application: ----------------------- Name: lambda-streaming-nodejs-app Runtime: nodejs18.x Architectures: x86_64 Dependency Manager: npm Application Template: response-streaming Output Directory: . Configuration file: lambda-streaming-nodejs-app/samconfig.toml Next steps can be found in the README file at lambda-streaming-nodejs-app/README.md Commands you can use next ========================= [*] Create pipeline: cd lambda-streaming-nodejs-app && sam pipeline init --bootstrap [*] Validate SAM template: cd lambda-streaming-nodejs-app && sam validate [*] Test Function in the Cloud: cd lambda-streaming-nodejs-app && sam sync --stack-name {stack-name} --watch

Das AWS SAMCLI erstellt unser Projekt mit der folgenden Struktur:

lambda-streaming-nodejs-app
	├── README.md
	├── __tests__
	│   └── unit
	│       └── index.test.js
	├── package.json
	├── samconfig.toml
	├── src
	│   └── index.js
	└── template.yaml

Das Folgende ist ein Beispiel für unseren Lambda-Funktionscode:

exports.handler = awslambda.streamifyResponse( async (event, responseStream, context) => { const httpResponseMetadata = { statusCode: 200, headers: { "Content-Type": "text/html", "X-Custom-Header": "Example-Custom-Header" } }; responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata); // It's recommended to use a `pipeline` over the `write` method for more complex use cases. // Learn more: https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html responseStream.write("<html>"); responseStream.write("<p>First write!</p>"); responseStream.write("<h1>Streaming h1</h1>"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<h2>Streaming h2</h2>"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<h3>Streaming h3</h3>"); await new Promise(r => setTimeout(r, 1000)); // Long strings will be streamed const loremIpsum1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a."; responseStream.write(`<p>${loremIpsum1}</p>`); await new Promise(r => setTimeout(r, 1000)); responseStream.write("<p>DONE!</p>"); responseStream.write("</html>"); responseStream.end(); } );

Das Folgende ist ein Beispiel für unsere template.yaml Datei. Das Antwort-Streaming für unsere Lambda-Funktion wird mithilfe der FunctionUrlConfig Eigenschaft konfiguriert.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > Sample SAM Template for lambda-streaming-nodejs-app Resources: StreamingFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: index.handler Runtime: nodejs18.x Architectures: - x86_64 Timeout: 10 FunctionUrlConfig: AuthType: AWS_IAM InvokeMode: RESPONSE_STREAM Outputs: StreamingFunction: Description: "Streaming Lambda Function ARN" Value: !GetAtt StreamingFunction.Arn StreamingFunctionURL: Description: "Streaming Lambda Function URL" Value: !GetAtt StreamingFunctionUrl.FunctionUrl

In der Regel können Sie sam build und verwendensam deploy --guided, um eine Produktionsanwendung zu erstellen und bereitzustellen. In diesem Beispiel gehen wir von einer Entwicklungsumgebung aus und verwenden den sam sync Befehl, um unsere Anwendung zu erstellen und bereitzustellen.

Anmerkung

Der sam sync Befehl wird für Entwicklungsumgebungen empfohlen. Weitere Informationen hierzu finden Sie unter Einführung in die Verwendung von sam sync to sync to AWS Cloud.

Vor der Ausführung überprüfen wirsam sync, ob unser Projekt in unserer samconfig.toml Datei korrekt konfiguriert ist. Am wichtigsten ist, dass wir die Werte für stack_name und überprüfenwatch. Da diese Werte in unserer Konfigurationsdatei angegeben sind, müssen wir sie nicht in der Befehlszeile angeben.

version = 0.1
	
	[default]
	[default.global.parameters]
	stack_name = "lambda-streaming-nodejs-app"
	
	[default.build.parameters]
	cached = true
	parallel = true
	
	[default.validate.parameters]
	lint = true
	
	[default.deploy.parameters]
	capabilities = "CAPABILITY_IAM"
	confirm_changeset = true
	resolve_s3 = true
	s3_prefix = "lambda-streaming-nodejs-app"
	region = "us-west-2"
	image_repositories = []
	
	[default.package.parameters]
	resolve_s3 = true
	
	[default.sync.parameters]
	watch = true
	
	[default.local_start_api.parameters]
	warm_containers = "EAGER"
	
	[default.local_start_lambda.parameters]
	warm_containers = "EAGER"

Als Nächstes erstellen und implementieren wir unsere Anwendung. sam sync Da die --watch Option in unserer Konfigurationsdatei konfiguriert ist, AWS SAMCLI wird sie unsere Anwendung erstellen, unsere Anwendung bereitstellen und auf Änderungen achten.

$ sam sync The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Queued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Building codeuri: /Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture: x86_64 functions: StreamingFunction package.json file not found. Continuing the build without dependencies. Running NodejsNpmBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : lambda-streaming-nodejs-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-06-20 12:11:16 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) ----------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ----------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::CloudFormation::St lambda-streaming- Transformation ack nodejs-app succeeded CREATE_IN_PROGRESS AWS::IAM::Role StreamingFunctionRole - CREATE_IN_PROGRESS AWS::CloudFormation::St AwsSamAutoDependencyLay - ack erNestedStack CREATE_IN_PROGRESS AWS::IAM::Role StreamingFunctionRole Resource creation Initiated CREATE_IN_PROGRESS AWS::CloudFormation::St AwsSamAutoDependencyLay Resource creation ack erNestedStack Initiated CREATE_COMPLETE AWS::IAM::Role StreamingFunctionRole - CREATE_COMPLETE AWS::CloudFormation::St AwsSamAutoDependencyLay - ack erNestedStack CREATE_IN_PROGRESS AWS::Lambda::Function StreamingFunction - CREATE_IN_PROGRESS AWS::Lambda::Function StreamingFunction Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Function StreamingFunction - CREATE_IN_PROGRESS AWS::Lambda::Url StreamingFunctionUrl - CREATE_IN_PROGRESS AWS::Lambda::Url StreamingFunctionUrl Resource creation Initiated CREATE_COMPLETE AWS::Lambda::Url StreamingFunctionUrl - CREATE_COMPLETE AWS::CloudFormation::St lambda-streaming- - ack nodejs-app ----------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ------------------------------------------------------------------------------------------------------- Outputs ------------------------------------------------------------------------------------------------------- Key StreamingFunction Description Streaming Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:lambda-streaming-nodejs-app- StreamingFunction-gUmhO833A0vZ Key StreamingFunctionURL Description Streaming Lambda Function URL Value https://wxgkcc2dyntgtrwhf2dgdcvylu0rnnof.lambda-url.us-west-2.on.aws/ ------------------------------------------------------------------------------------------------------- Stack creation succeeded. Sync infra completed. Infra sync completed.

Jetzt, da unsere Funktion in der Cloud bereitgestellt ist, können wir sam remote invoke sie verwenden, um mit unserer Funktion zu interagieren. Die erkennt AWS SAMCLI automatisch, dass unsere Funktion für Antwort-Streaming konfiguriert ist, und beginnt sofort mit der Ausgabe einer gestreamten Antwort unserer Funktion in Echtzeit.

$ sam remote invoke StreamingFunction Invoking Lambda Function StreamingFunction {"statusCode":200,"headers":{"Content-Type":"text/html","X-Custom-Header":"Example-Custom-Header"}}<html><p>First write!</p><h1>Streaming h1</h1><h2>Streaming h2</h2><h3>Streaming h3</h3><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.</p><p>DONE!</p></html>START RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Version: $LATEST END RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 REPORT RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Duration: 4088.66 ms Billed Duration: 4089 ms Memory Size: 128 MB Max Memory Used: 68 MB Init Duration: 168.45 ms

Wenn wir unseren Funktionscode ändern, erkennt der unsere Änderungen AWS SAMCLI sofort und implementiert sie sofort. Hier ist ein Beispiel für die AWS SAMCLI Ausgabe, nachdem Änderungen an unserem Funktionscode vorgenommen wurden:

Syncing Lambda Function StreamingFunction...                                             
	Building codeuri:                                                                        
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture:    
	x86_64 functions: StreamingFunction                                                      
	package.json file not found. Continuing the build without dependencies.                  
	Running NodejsNpmBuilder:CopySource                                                      
	Finished syncing Lambda Function StreamingFunction.                                      
	Syncing Layer StreamingFunctione9cfe924DepLayer...                                       
	SyncFlow [Layer StreamingFunctione9cfe924DepLayer]: Skipping resource update as the      
	content didn't change                                                                    
	Finished syncing Layer StreamingFunctione9cfe924DepLayer. 

Wir können es jetzt sam remote invoke wieder verwenden, um mit unserer Funktion in der Cloud zu interagieren und unsere Änderungen zu testen.

SQS-Beispiele

Grundlegende Beispiele

Rufen Sie eine Amazon SQS SQS-Warteschlange auf, indem Sie den ARN als Ressourcen-ID angeben:

$ sam remote invoke arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b --event '{"hello": "world"}' --output json Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9", "MessageId": "4f464cdd-15ef-4b57-bd72-3ad225d80adc", "ResponseMetadata": { "RequestId": "95d39377-8323-5ef0-9223-ceb198bd09bd", "HTTPStatusCode": 200, "HTTPHeaders": { "x-amzn-requestid": "95d39377-8323-5ef0-9223-ceb198bd09bd", "date": "Wed, 08 Nov 2023 23:27:26 GMT", "content-type": "application/x-amz-json-1.0", "content-length": "106", "connection": "keep-alive" }, "RetryAttempts": 0 } }%

Beispiele Step Functions

Grundlegende Beispiele

Rufen Sie eine Zustandsmaschine auf, indem Sie ihre physische ID als Ressourcen-ID angeben:

Zuerst verwenden wir, sam list resources um unsere physische ID zu erhalten:

$ sam list resources --stack-name state-machine-example --output json [ { "LogicalResourceId": "HelloWorldStateMachine", "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66" }, { "LogicalResourceId": "HelloWorldStateMachineRole", "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw" } ]

Als Nächstes rufen wir unsere Zustandsmaschine auf, wobei wir die physische ID als Ressourcen-ID verwenden. Wir übergeben ein Ereignis an der Befehlszeile mit der --event Option:

$ sam remote invoke arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 --event '{"is_developer": true}' Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 "Hello Developer World"%

Rufen Sie eine Zustandsmaschine auf, indem Sie ein leeres Ereignis übergeben:

$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example Invoking Step Function HelloWorldStateMachine "Hello World"%

Dokumentation zu sam remote invoke und zur Verwendung von finden Sie im Folgenden: AWS SAMCLI