Pengantar pengujian di cloud dengan sam remote invoke - AWS Serverless Application Model

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengantar pengujian di cloud dengan sam remote invoke

Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAM CLI) sam remote invoke untuk berinteraksi dengan AWS sumber daya yang didukung di file AWS Cloud. Anda dapat menggunakan sam remote invoke untuk memanggil sumber daya berikut:

  • Amazon Kinesis Data Streams — Mengirim catatan data ke aplikasi Kinesis Data Streams.

  • AWS Lambda— Memanggil dan meneruskan acara ke fungsi Lambda Anda.

  • Amazon Simple Queue Service (Amazon Simple Service) — Kirim pesan ke antrian Amazon SQS.

  • AWS Step Functions— Memanggil mesin status Step Functions untuk memulai eksekusi.

Untuk pengantar AWS SAMCLI, lihatApa itu AWS SAMCLI?.

Untuk contoh penggunaan sam remote invoke selama alur kerja pengembangan tipikal, lihatLangkah 5: Berinteraksi dengan fungsi Anda di AWS Cloud.

Untuk menggunakansam remote invoke, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:

Kami juga merekomendasikan untuk meningkatkan ke versi terbaru dari. AWS SAMCLI Untuk mempelajari selengkapnya, lihat Upgrade AWS SAMCLI.

Sebelum menggunakansam remote invoke, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:

Menggunakan perintah sam remote invoke

Sebelum menggunakan perintah ini, sumber daya Anda harus dikerahkan ke file. AWS Cloud

Gunakan struktur perintah berikut dan jalankan dari direktori root proyek Anda:

$ sam remote invoke <arguments> <options>
catatan

Halaman ini akan menampilkan opsi yang disediakan di command prompt. Anda juga dapat mengonfigurasi opsi dalam file konfigurasi proyek Anda alih-alih meneruskannya di prompt perintah. Untuk mempelajari lebih lanjut,Konfigurasikan pengaturan proyek.

Untuk deskripsi sam remote invoke argumen dan opsi, lihatsam remote invoke.

Menggunakan dengan Kinesis Data Streams

Anda dapat mengirim catatan data ke aplikasi Kinesis Data Streams. Ini AWS SAM CLI akan mengirim catatan data Anda dan mengembalikan ID pecahan dan nomor urut. Berikut adalah contohnya:

$ 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" }%
Untuk mengirim catatan data
  1. Berikan nilai ID sumber daya sebagai argumen untuk aplikasi Kinesis Data Streams Anda. Untuk informasi tentang ID sumber daya yang valid, lihat ID Sumber Daya.

  2. Berikan catatan data sebagai acara untuk dikirim ke aplikasi Kinesis Data Streams Anda. Anda dapat memberikan acara di baris perintah menggunakan --event opsi, atau dari file yang menggunakan--event-file. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

Menggunakan dengan fungsi Lambda

Anda dapat menjalankan fungsi Lambda di cloud dan meneruskan acara kosong atau memberikan acara di baris perintah atau dari file. Ini AWS SAM CLI akan memanggil fungsi Lambda Anda dan mengembalikan responsnya. Berikut adalah contohnya:

$ 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\"}"}%
Untuk menjalankan fungsi Lambda
  1. Berikan nilai ID sumber daya sebagai argumen untuk fungsi Lambda Anda. Untuk informasi tentang ID sumber daya yang valid, lihat ID Sumber Daya.

  2. Berikan acara untuk dikirim ke fungsi Lambda Anda. Anda dapat memberikan acara di baris perintah menggunakan --event opsi, atau dari file yang menggunakan--event-file. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

Fungsi Lambda dikonfigurasi dengan streaming respons

sam remote invokePerintah ini mendukung fungsi Lambda yang dikonfigurasi untuk mengalirkan respons. Anda dapat mengonfigurasi fungsi Lambda untuk mengalirkan respons menggunakan FunctionUrlConfig properti di templat Anda AWS SAM . Saat Anda menggunakansam remote invoke, AWS SAMCLI akan secara otomatis mendeteksi konfigurasi Lambda Anda dan memanggil dengan streaming respons.

Sebagai contoh, lihat Memanggil fungsi Lambda yang dikonfigurasi untuk mengalirkan respons.

Lulus peristiwa pengujian yang dapat dibagikan ke fungsi Lambda di cloud

Acara uji yang dapat dibagikan adalah acara uji yang dapat Anda bagikan dengan orang lain dalam hal yang sama Akun AWS. Untuk mempelajari selengkapnya, lihat Acara pengujian yang dapat dibagikan di Panduan AWS Lambda Pengembang.

Mengakses dan mengelola acara pengujian yang dapat dibagikan

Anda dapat menggunakan AWS SAM CLI sam remote test-event perintah untuk mengakses dan mengelola peristiwa pengujian yang dapat dibagikan. Misalnya, Anda dapat menggunakan sam remote test-event untuk melakukan hal berikut:

  • Ambil peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema Amazon.

  • Ubah peristiwa pengujian yang dapat dibagikan secara lokal dan unggah ke registri EventBridge skema.

  • Hapus peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema.

Untuk mempelajari selengkapnya, lihat Pengantar pengujian cloud dengan sam remote test-event.

Lulus acara pengujian yang dapat dibagikan ke fungsi Lambda di cloud

Untuk meneruskan peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema ke fungsi Lambda Anda di cloud, gunakan --test-event-name opsi dan berikan nama acara pengujian yang dapat dibagikan. Berikut adalah contohnya:

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

Jika Anda menyimpan peristiwa pengujian yang dapat dibagikan secara lokal, Anda dapat menggunakan --event-file opsi dan memberikan jalur file dan nama acara pengujian lokal. Berikut adalah contohnya:

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

Menggunakan dengan Amazon SQS

Anda dapat mengirim pesan ke antrian Amazon SQS. AWS SAM CLIPengembalian berikut ini:

  • ID Pesan

  • MD5 dari badan pesan

  • Metadata respons

Berikut adalah contohnya:

$ sam remote invoke MySqsQueue --stack-name sqs-example -event hello Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592", "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652" }%
Untuk mengirim pesan
  1. Berikan nilai ID sumber daya sebagai argumen untuk antrean Amazon SQS. Untuk informasi tentang ID sumber daya yang valid, lihat ID Sumber Daya.

  2. Berikan acara untuk dikirim ke antrian Amazon SQS Anda. Anda dapat memberikan acara di baris perintah menggunakan --event opsi, atau dari file yang menggunakan--event-file. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

Menggunakan dengan Step Functions

Anda dapat memanggil mesin status Step Functions untuk memulai eksekusi. AWS SAM CLIAkan menunggu alur kerja mesin negara selesai dan mengembalikan output dari langkah terakhir dalam eksekusi. Berikut adalah contohnya:

$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example --event '{"is_developer": true}' Invoking Step Function HelloWorldStateMachine "Hello Developer World"%
Untuk memanggil mesin negara
  1. Berikan nilai ID sumber daya sebagai argumen untuk mesin status Step Functions. Untuk informasi tentang ID sumber daya yang valid, lihat ID Sumber Daya.

  2. Berikan acara untuk dikirim ke mesin negara Anda. Anda dapat memberikan acara di baris perintah menggunakan --event opsi, atau dari file yang menggunakan--event-file. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

Menggunakan opsi perintah panggilan jarak jauh sam

Bagian ini mencakup beberapa opsi utama yang dapat Anda gunakan dengan sam remote invoke perintah. Untuk daftar lengkap opsi, lihatsam remote invoke.

Lulus acara ke sumber daya Anda

Gunakan opsi berikut untuk meneruskan acara ke sumber daya Anda di cloud:

  • --event— Lewati acara di baris perintah.

  • --event-file— Lulus acara dari file.

Contoh Lambda

Gunakan --event untuk meneruskan acara di baris perintah sebagai nilai string:

$ 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!\"}"}%

Gunakan --event-file untuk meneruskan acara dari file dan memberikan path ke file:

$ 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\"}"}%

Lulus acara menggunakanstdin:

$ 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\"}"}%

Konfigurasikan output AWS SAMCLI respons

Saat Anda memanggil sumber daya yang didukungsam remote invoke, akan AWS SAMCLI mengembalikan respons yang berisi berikut ini:

  • Minta metadata — Metadata yang terkait dengan permintaan. Ini termasuk ID permintaan dan waktu mulai permintaan.

  • Respons sumber daya — Respons dari sumber daya Anda setelah dipanggil di cloud.

Anda dapat menggunakan --output opsi untuk mengkonfigurasi respons AWS SAM CLI output. Nilai opsi berikut tersedia:

  • json— Metadata dan respon sumber daya dikembalikan dalam struktur. JSON Respons berisi SDK output penuh.

  • text— Metadata dikembalikan dalam struktur teks. Respons sumber daya dikembalikan dalam format output sumber daya.

Berikut ini adalah contoh json output:

$ 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\\\"}\"}" }%

Saat Anda menentukan json output, seluruh respons dikembalikan kestdout. Berikut adalah contohnya:

$ 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\\\"}\"}" }%

Berikut ini adalah contoh text output:

$ 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\"}"}%

Saat Anda menentukan text output, output runtime fungsi Lambda (misalnya, log) dikembalikan ke. stderr Payload fungsi Lambda dikembalikan ke. stdout Berikut adalah contohnya:

$ 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\"}"}%

Sesuaikan Boto3 parameter

Untuksam remote invoke, AWS SAM CLI menggunakan AWS SDK for Python (Boto3) untuk berinteraksi dengan sumber daya Anda di cloud. Anda dapat menggunakan --parameter opsi untuk menyesuaikan Boto3 parameter. Untuk daftar parameter yang didukung yang dapat Anda sesuaikan, lihat--parameter.

Contoh

Memanggil fungsi Lambda untuk memvalidasi nilai parameter dan memverifikasi izin:

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

Gunakan --parameter opsi beberapa kali dalam satu perintah untuk menyediakan beberapa parameter:

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

Pilihan lain

Untuk daftar lengkap sam remote invoke opsi, lihatsam remote invoke.

Konfigurasikan file konfigurasi proyek Anda

Untuk mengkonfigurasi sam remote invoke dalam file konfigurasi Anda, gunakan remote_invoke dalam tabel Anda. Berikut ini adalah contoh samconfig.toml file yang mengkonfigurasi nilai default untuk sam remote invoke perintah.

...
version =0.1

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

Contoh

Untuk contoh dasar penggunaansam remote invoke, lihat Menguji AWS Lambda fungsi dengan AWS SAM remote di AWS Compute Blog.

Contoh Kinesis Data Streams

Contoh dasar

Kirim catatan data ke aplikasi Kinesis Data Streams dari file. Aplikasi Kinesis Data Streams diidentifikasi dengan menyediakan ARN untuk ID sumber daya:

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

Kirim acara yang disediakan di baris perintah ke aplikasi Kinesis Data Streams:

$ 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" }%

Dapatkan ID fisik dari aplikasi Kinesis Data Streams. Kemudian, berikan acara di baris perintah:

$ 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" }%

Berikan string JSON di baris perintah sebagai acara:

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

Kirim acara kosong ke aplikasi Kinesis Data Streams:

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

Kembalikan AWS SAM CLI respons dalam format JSON:

$ 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 } }%

Kembalikan output JSON ke stdout:

$ 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 } }%

Contoh Lambda

Contoh dasar

Memanggil fungsi Lambda dengan menyediakan ARN sebagai ID sumber daya:

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

Memanggil fungsi Lambda dengan memberikan ID logis sebagai ID sumber daya:

Anda juga harus memberikan nama AWS CloudFormation tumpukan menggunakan --stack-name opsi. Berikut adalah contohnya:

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

Jika aplikasi Anda berisi satu fungsi Lambda, Anda tidak perlu menentukan ID logisnya. Anda hanya dapat memberikan --stack-name opsi. Berikut adalah contohnya:

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

Memanggil fungsi Lambda dengan memberikan ID fisik sebagai ID sumber daya:

ID fisik akan dibuat saat Anda menerapkan menggunakan AWS CloudFormation.

$ sam remote invoke sam-app-HelloWorldFunction-TZvxQRFNv0k4

Memanggil fungsi Lambda dari tumpukan anak:

Untuk contoh ini, aplikasi kami berisi struktur direktori berikut:

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

Untuk memanggil fungsi Lambda childstack kami, kami menjalankan yang berikut:

$ 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\": {}}"}%

Memanggil fungsi Lambda yang dikonfigurasi untuk mengalirkan respons

Dalam contoh ini, kita menggunakan AWS SAMCLI untuk menginisialisasi aplikasi tanpa server baru yang berisi fungsi Lambda yang dikonfigurasi untuk mengalirkan responsnya. Kami menyebarkan aplikasi kami ke AWS Cloud dan menggunakan sam remote invoke untuk berinteraksi dengan fungsi kami di cloud.

Kita mulai dengan menjalankan sam init perintah untuk membuat aplikasi tanpa server baru. Kami memilih template mulai cepat Lambda Response Streaming dan memberi nama aplikasi kami. lambda-streaming-nodejs-app

$ 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

AWS SAMCLIIni menciptakan proyek kami dengan struktur berikut:

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

Berikut ini adalah contoh kode fungsi Lambda kami:

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(); } );

Berikut ini adalah contoh template.yaml file kami. Streaming respons untuk fungsi Lambda kami dikonfigurasi menggunakan properti. FunctionUrlConfig

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

Biasanya, Anda dapat menggunakan sam build dan sam deploy --guided untuk membangun dan menyebarkan aplikasi produksi. Dalam contoh ini, kita akan mengasumsikan lingkungan pengembangan dan menggunakan sam sync perintah untuk membangun dan menyebarkan aplikasi kita.

catatan

sam syncPerintah ini direkomendasikan untuk lingkungan pengembangan. Untuk mempelajari selengkapnya, lihat Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud.

Sebelum menjalankansam sync, kami memverifikasi bahwa proyek kami dikonfigurasi dengan benar di samconfig.toml file kami. Yang terpenting, kami memverifikasi nilai untuk stack_name danwatch. Dengan nilai-nilai ini ditentukan dalam file konfigurasi kami, kami tidak harus menyediakannya di baris perintah.

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"

Selanjutnya, kita jalankan sam sync untuk membangun dan menyebarkan aplikasi kita. Karena --watch opsi dikonfigurasi dalam file konfigurasi kami, AWS SAMCLI akan membangun aplikasi kami, menyebarkan aplikasi kami, dan melihat perubahan.

$ 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.

Sekarang fungsi kita diterapkan ke cloud, kita dapat menggunakan sam remote invoke untuk berinteraksi dengan fungsi kita. AWS SAMCLISecara otomatis mendeteksi bahwa fungsi kami dikonfigurasi untuk streaming respons dan segera mulai mengeluarkan respons streaming dari fungsi kami secara real time.

$ 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

Ketika kita memodifikasi kode fungsi kita, AWS SAMCLI langsung mendeteksi dan segera menyebarkan perubahan kita. Berikut adalah contoh AWS SAMCLI output setelah perubahan dilakukan pada kode fungsi kami:

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. 

Kita sekarang dapat menggunakan sam remote invoke lagi untuk berinteraksi dengan fungsi kita di cloud dan menguji perubahan kita.

Contoh SQS

Contoh dasar

Memanggil antrian Amazon SQS dengan memberikan ARN sebagai ID sumber daya:

$ 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 } }%

Contoh Step Functions

Contoh dasar

Memanggil mesin status dengan memberikan ID fisiknya sebagai ID sumber daya:

Pertama, kami gunakan sam list resources untuk mendapatkan ID fisik kami:

$ 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" } ]

Selanjutnya, kami memanggil mesin negara kami menggunakan ID fisik sebagai ID sumber daya. Kami lulus dalam suatu acara di baris perintah dengan --event opsi:

$ 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"%

Memanggil mesin status dengan melewatkan acara kosong:

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

Untuk dokumentasi yang terkait dengan sam remote invoke dan menggunakan AWS SAMCLI, lihat berikut ini: