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 Antarmuka Baris AWS Serverless Application Model Perintah (AWS SAM CLI) sam remote invoke
perintah untuk berinteraksi dengan AWS sumber daya yang didukung di 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.
-
Layanan Antrian Sederhana Amazon (AmazonSQS) - Kirim pesan ke SQS antrian Amazon.
-
AWS Step Functions— Memanggil mesin status Step Functions untuk memulai eksekusi.
Untuk pengantar AWS SAM CLI, lihat Apa itu AWS SAM CLI?
Untuk contoh penggunaan sam remote invoke
selama alur kerja pengembangan tipikal, lihatLangkah 5: Berinteraksi dengan fungsi Anda di AWS Cloud.
Topik
Untuk menggunakansam remote invoke
, instal AWS SAM CLI dengan menyelesaikan hal-hal berikut:
Kami juga merekomendasikan untuk meningkatkan ke versi terbaru AWS SAM CLI. Untuk mempelajari lebih lanjut, lihatUpgrade 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. The AWS SAM CLI akan mengirim catatan data Anda dan mengembalikan ID pecahan dan nomor urut. Berikut adalah contohnya:
$
sam remote invoke
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" }%KinesisStream
--stack-namekinesis-example
--eventhello-world
Untuk mengirim catatan data
-
Berikan nilai ID sumber daya sebagai argumen untuk aplikasi Kinesis Data Streams Anda. Untuk informasi tentang sumber daya yang validIDs, lihat ID Sumber Daya.
-
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. The AWS SAM CLI akan memanggil fungsi Lambda Anda dan mengembalikan responsnya. Berikut adalah contohnya:
$
sam remote invoke
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\"}"}%HelloWorldFunction
--stack-namesam-app
Untuk menjalankan fungsi Lambda
-
Berikan nilai ID sumber daya sebagai argumen untuk fungsi Lambda Anda. Untuk informasi tentang sumber daya yang validIDs, lihat ID Sumber Daya.
-
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 invoke
Perintah 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 . Ketika Anda menggunakansam remote invoke
, AWS SAM CLI 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-namesam-app
--test-event-namedemo-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-namesam-app
--event-filedemo-event.json
Menggunakan dengan Amazon SQS
Anda dapat mengirim pesan ke SQS antrian Amazon. The AWS SAM CLI mengembalikan yang berikut:
-
ID Pesan
-
MD5dari badan pesan
-
Metadata respons
Berikut adalah contohnya:
$
sam remote invoke
Sending message to SQS queue MySqsQueue { "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592", "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652" }%MySqsQueue
--stack-namesqs-example
-eventhello
Untuk mengirim pesan
-
Berikan nilai ID sumber daya sebagai argumen untuk SQS antrian Amazon. Untuk informasi tentang sumber daya yang validIDs, lihat ID Sumber Daya.
-
Berikan acara untuk dikirim ke SQS antrian Amazon 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. The AWS SAM CLI akan menunggu alur kerja mesin negara selesai dan mengembalikan output dari langkah terakhir dalam eksekusi. Berikut adalah contohnya:
$
sam remote invoke
Invoking Step Function HelloWorldStateMachine "Hello Developer World"%HelloWorldStateMachine
--stack-namestate-machine-example
--event'{"is_developer": true}'
Untuk memanggil mesin negara
-
Berikan nilai ID sumber daya sebagai argumen untuk mesin status Step Functions. Untuk informasi tentang sumber daya yang validIDs, lihat ID Sumber Daya.
-
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
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!\"}"}%HelloWorldFunction
--stack-namesam-app
--event'{"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
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\"}"}%HelloWorldFunction
--stack-namesam-app
--event-fileevent.json
Lulus acara menggunakanstdin
:
$
cat event.json
{"message": "hello from file"}%$
cat
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\"}"}%event.json
| sam remote invokeHelloWorldFunction
--stack-namesam-app
--event-file -
Konfigurasikan AWS SAM CLI keluaran respon
Saat Anda memanggil sumber daya yang didukung dengansam remote invoke
, AWS SAM CLI mengembalikan respon yang berisi berikut:
-
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 AWS SAM CLI respon keluaran. Nilai opsi berikut tersedia:
-
json
— Metadata dan respons sumber daya dikembalikan dalam JSON struktur. Tanggapan berisi penuh SDK keluaran. -
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
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\\\"}\"}" }%sam-app
--outputjson
Saat Anda menentukan json
output, seluruh respons dikembalikan kestdout
. Berikut adalah contohnya:
$
sam remote invoke --stack-name
Invoking Lambda Function HelloWorldFunctionsam-app
--outputjson
1>stdout.log
$
cat
{ "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\\\"}\"}" }%stdout.log
Berikut ini adalah contoh text
output:
$
sam remote invoke --stack-name
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\"}"}%sam-app
--outputtext
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
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%sam-app
--outputtext
2>stderr.log
$
cat
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 MBstderr.log
$
sam remote invoke --stack-name
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 MBsam-app
--outputtext
1>stdout.log
$
cat
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%stdout.log
Kustomisasi 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-namesam-app
--parameterInvocationType="DryRun"
Gunakan --parameter
opsi beberapa kali dalam satu perintah untuk menyediakan beberapa parameter:
$
sam remote invoke
HelloWorldFunction
--stack-namesam-app
--parameterInvocationType="Event"
--parameterLogType="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
Contoh Kinesis Data Streams
Contoh dasar
Kirim catatan data ke aplikasi Kinesis Data Streams dari file. Aplikasi Kinesis Data Streams diidentifikasi dengan ARN menyediakan ID sumber daya:
$
sam remote invoke
arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ
--event-fileevent.json
Kirim acara yang disediakan di baris perintah ke aplikasi Kinesis Data Streams:
$
sam remote invoke
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" }%KinesisStream
--stack-namekinesis-example
--eventhello-world
Dapatkan ID fisik dari aplikasi Kinesis Data Streams. Kemudian, berikan acara di baris perintah:
$
sam list resources --stack-name
[ { "LogicalResourceId": "KinesisStream", "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ" } ]kinesis-example
--outputjson
$
sam remote invoke
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" }%kinesis-example-KinesisStream-ZgnLcQey4xUQ
--eventhello
Berikan JSON string pada baris perintah sebagai acara:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904492868617924990209230536441858" }%KinesisStream
--stack-namekinesis-example
--event'{"method": "GET", "body": ""}'
Kirim acara kosong ke aplikasi Kinesis Data Streams:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStream { "ShardId": "shardId-000000000000", "SequenceNumber": "49646251411914806775980904866469008589597168190416224258" }%KinesisStream
--stack-namekinesis-example
Kembalikan AWS SAM CLI respon dalam JSON format:
$
sam remote invoke
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 } }%KinesisStream
--stack-namekinesis-example
--event'{"hello": "world"}'
--outputjson
Kembalikan JSON output ke stdout:
$
sam remote invoke
Putting record to Kinesis data stream KinesisStreamKinesisStream
--stack-namekinesis-example
--event'{"hello": "world"}'
--outputjson 1> stdout.log
$
cat
{ "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 } }%stdout.log
Contoh Lambda
Contoh dasar
Memanggil fungsi Lambda dengan menyediakan sebagai ID ARN 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-namesam-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
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\": {}}"}%ChildStack/HelloWorldFunction
--stack-namelambda-example
Memanggil fungsi Lambda yang dikonfigurasi untuk mengalirkan respons
Dalam contoh ini, kita menggunakan AWS SAM CLI 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
The AWS SAM CLI membuat 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
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 sync
Perintah 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 SAM CLI akan membangun aplikasi kita, menyebarkan aplikasi kita, 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. The AWS SAM CLI secara otomatis mendeteksi bahwa fungsi kami dikonfigurasi untuk streaming respons dan segera mulai mengeluarkan respons streaming dari fungsi kami secara real time.
$
sam remote invoke
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 msStreamingFunction
Ketika kita memodifikasi kode fungsi kita, AWS SAM CLI langsung mendeteksi dan segera menyebarkan perubahan kami. Berikut adalah contoh dari AWS SAM CLI 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.
SQScontoh
Contoh dasar
Memanggil SQS antrian Amazon dengan memberikan ID ARN sebagai sumber daya:
$
sam remote invoke
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 } }%arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b
--event'{"hello": "world"}'
--outputjson
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
[ { "LogicalResourceId": "HelloWorldStateMachine", "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66" }, { "LogicalResourceId": "HelloWorldStateMachineRole", "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw" } ]state-machine-example
--outputjson
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
Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 "Hello Developer World"%arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66
--event'{"is_developer": true}'
Memanggil mesin status dengan melewatkan acara kosong:
$
sam remote invoke
Invoking Step Function HelloWorldStateMachine "Hello World"%HelloWorldStateMachine
--stack-namestate-machine-example
Tautan terkait
Untuk dokumentasi yang berkaitan dengan sam remote invoke
dan menggunakan AWS SAM CLI, lihat yang berikut ini: