Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pengantar pengujian dengan sam local invoke
Gunakan Antarmuka Baris AWS Serverless Application Model Perintah (AWS SAM CLI) sam local invoke
subperintah untuk memulai pemanggilan satu kali fungsi secara lokal. AWS Lambda
-
Untuk pengantar AWS SAM CLI, lihat Apa itu AWS SAM CLI?
-
Untuk daftar opsi
sam local invoke
perintah, lihatsam local invoke. -
Untuk contoh penggunaan
sam local invoke
selama alur kerja pengembangan tipikal, lihatLangkah 7: (Opsional) Uji aplikasi Anda secara lokal.
Untuk menggunakansam local invoke
, instal AWS SAM CLI dengan menyelesaikan hal-hal berikut:
Sebelum menggunakansam local invoke
, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
Memanggil fungsi Lambda secara lokal
Ketika Anda berlarisam local invoke
, AWS SAM CLI mengasumsikan bahwa direktori kerja Anda saat ini adalah direktori root proyek Anda. The AWS SAM CLI pertama-tama akan mencari template.[yaml|yml]
file dalam .aws-sam
subfolder. Jika tidak ditemukan, AWS SAM CLI akan mencari template.[yaml|yml]
file dalam direktori kerja Anda saat ini.
Untuk menjalankan fungsi Lambda secara lokal
-
Dari direktori root proyek Anda, jalankan yang berikut ini:
$
sam local invoke
<options>
-
Jika aplikasi Anda berisi lebih dari satu fungsi, berikan ID logis fungsi tersebut. Berikut adalah contohnya:
$
sam local invoke
HelloWorldFunction
-
The AWS SAM CLI membangun fungsi Anda dalam wadah lokal menggunakan Docker. Kemudian memanggil fungsi Anda dan mengeluarkan respons fungsi Anda.
Berikut adalah contohnya:
$
sam local invoke
Invoking app.lambda_handler (python3.9) Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image Building image.................................................................................................................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Init Duration: 1.09 ms Duration: 608.42 ms Billed Duration: 609 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
Mengelola log
Saat menggunakansam local invoke
, output runtime fungsi Lambda (misalnya, log) adalah output kestderr
, dan hasil fungsi Lambda adalah output ke. stdout
Berikut ini adalah contoh fungsi Lambda dasar:
def handler(event, context): print("some log") # this goes to stderr return "hello world" # this goes to stdout
Anda dapat menyimpan output standar ini. Berikut adalah contohnya:
$
sam local invoke 1> stdout.log
...$
cat stdout.log
"hello world"$
sam local invoke 2> stderr.log
...$
cat stderr.log
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST some log END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Init Duration: 0.91 ms Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
Anda dapat menggunakan output standar ini untuk lebih mengotomatiskan proses pengembangan lokal Anda.
Opsi
Lulus acara khusus untuk menjalankan fungsi Lambda
Untuk meneruskan acara ke fungsi Lambda, gunakan opsi. --event
Berikut adalah contohnya:
$
sam local invoke --event
events/s3.json S3JsonLoggerFunction
Anda dapat membuat acara dengan sam local generate-event
subperintah. Untuk mempelajari selengkapnya, lihat Pengantar pengujian dengan sam local generate-event.
Lulus variabel lingkungan saat menjalankan fungsi Lambda Anda
Jika fungsi Lambda Anda menggunakan variabel lingkungan, Anda dapat meneruskannya selama pengujian lokal dengan opsi. --env-vars
Ini adalah cara yang bagus untuk menguji fungsi Lambda secara lokal dengan layanan di aplikasi Anda yang sudah digunakan di cloud. Berikut adalah contohnya:
$
sam local invoke --env-vars
locals.json
Tentukan templat atau fungsi
Untuk menentukan template untuk AWS SAM CLI untuk referensi, gunakan --template
opsi. The AWS SAM CLI akan memuat hanya AWS SAM template itu dan sumber daya yang ditunjukkannya.
Untuk memanggil fungsi aplikasi atau tumpukan bersarang, berikan aplikasi atau tumpukan ID logis bersama dengan ID logika fungsi. Berikut adalah contohnya:
$
sam local invoke
StackLogicalId/FunctionLogicalId
Uji fungsi Lambda dari Anda Terraform proyek
Gunakan --hook-name
opsi untuk menguji fungsi Lambda secara lokal dari Terraform proyek. Untuk mempelajari selengkapnya, lihat Menggunakan AWS SAM CLI dengan Terraform untuk debugging dan pengujian lokal.
Berikut adalah contohnya:
$
sam local invoke --hook-name terraform --beta-features
Praktik terbaik
Jika aplikasi Anda memiliki .aws-sam
direktori dari berjalansam build
, pastikan untuk menjalankan sam build
setiap kali Anda memperbarui kode fungsi Anda. Kemudian, jalankan sam local invoke
untuk menguji kode fungsi Anda yang diperbarui secara lokal.
Pengujian lokal adalah solusi hebat untuk pengembangan dan pengujian cepat sebelum menerapkan ke cloud. Namun, pengujian lokal tidak memvalidasi semuanya, seperti izin antar sumber daya Anda di cloud. Sebisa mungkin, uji aplikasi Anda di cloud. Sebaiknya gunakan sam sync untuk mempercepat alur kerja pengujian cloud Anda.
Contoh
Buat contoh peristiwa Amazon API Gateway dan gunakan untuk menjalankan fungsi Lambda secara lokal
Pertama, kami menghasilkan payload HTTP API acara API Gateway dan menyimpannya ke events
folder kami.
$
sam local generate-event
apigateway http-api-proxy > events/apigateway_event.json
Selanjutnya, kami memodifikasi fungsi Lambda kami untuk mengembalikan nilai parameter dari acara tersebut.
def lambda_handler(event, context): print("HelloWorldFunction invoked") return { "statusCode": 200, "body": json.dumps({ "message": event['queryStringParameters']['parameter2'], }), }
Selanjutnya, kami secara lokal memanggil fungsi Lambda kami dan menyediakan acara khusus kami.
$
sam local invoke --event
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"value\"}"}%events/apigateway_event.json
Lulus variabel lingkungan saat menjalankan fungsi Lambda secara lokal
Aplikasi ini memiliki fungsi Lambda yang menggunakan variabel lingkungan untuk nama tabel Amazon DynamoDB. Berikut ini adalah contoh fungsi yang didefinisikan dalam AWS SAM template:
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 ... Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Description: get all items Policies: - DynamoDBReadPolicy: TableName: !Ref SampleTable Environment: Variables: SAMPLE_TABLE: !Ref SampleTable ...
Kami ingin menguji fungsi Lambda kami secara lokal sambil berinteraksi dengan tabel DynamoDB kami di cloud. Untuk melakukan ini, kami membuat file variabel lingkungan kami dan menyimpannya di direktori root proyek kami sebagailocals.json
. Nilai yang disediakan di sini untuk SAMPLE_TABLE
referensi tabel DynamoDB kami di cloud.
{ "getAllItemsFunction": { "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98" } }
Selanjutnya, kita menjalankan sam local invoke
dan meneruskan variabel lingkungan kita dengan --env-vars
opsi.
$
sam local invoke
Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"body":"{}"}getAllItemsFunction
--env-varslocals.json
Pelajari selengkapnya
Untuk daftar semua sam local invoke
opsi, lihatsam local invoke.
Untuk demo penggunaansam local
, lihat AWS SAM untuk pengembangan lokal. Menguji AWS Cloud sumber daya dari lingkungan pengembangan lokal