Pengantar pengujian dengan sam local start-api - 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 dengan sam local start-api

Gunakan Antarmuka Baris AWS Serverless Application Model Perintah (AWS SAM CLI) sam local start-api subperintah untuk menjalankan AWS Lambda fungsi Anda secara lokal dan menguji melalui host HTTP server lokal. Jenis pengujian ini berguna untuk fungsi Lambda yang dipanggil oleh titik akhir Amazon API Gateway.

Untuk menggunakansam local start-api, instal AWS SAM CLI dengan menyelesaikan hal-hal berikut:

Sebelum menggunakansam local start-api, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:

Menggunakan sam local start-api

Ketika Anda berlarisam local start-api, 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 memulai HTTP server lokal
  1. Dari direktori root proyek Anda, jalankan yang berikut ini:

    $ sam local start-api <options>
  2. The AWS SAM CLI membangun fungsi Lambda Anda di lokal Docker wadah. Kemudian menampilkan alamat lokal titik akhir HTTP server Anda. Berikut adalah contohnya:

    $ sam local start-api Initializing the lambda functions containers. 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 Containers Initialization is done. Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template 2023-04-12 14:41:05 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:3000
  3. Anda dapat menjalankan fungsi Lambda Anda melalui browser atau command prompt. Berikut adalah contohnya:

    sam-app$ curl http://127.0.0.1:3000/hello {"message": "Hello world!"}%
  4. Saat Anda membuat perubahan pada kode fungsi Lambda, pertimbangkan hal berikut untuk menyegarkan server lokal HTTP Anda:

    • Jika aplikasi Anda tidak memiliki .aws-sam direktori dan fungsi Anda menggunakan bahasa yang ditafsirkan, AWS SAM CLI akan secara otomatis memperbarui fungsi Anda dengan membuat wadah baru dan menghostingnya.

    • Jika aplikasi Anda memiliki .aws-sam direktori, Anda perlu menjalankan sam build untuk memperbarui fungsi Anda. Kemudian jalankan sam local start-api lagi untuk meng-host fungsi.

    • Jika fungsi Anda menggunakan bahasa yang dikompilasi atau jika proyek Anda memerlukan dukungan pengemasan yang kompleks, jalankan solusi build Anda sendiri untuk memperbarui fungsi Anda. Kemudian jalankan sam local start-api lagi untuk meng-host fungsi.

Fungsi Lambda yang menggunakan otorisasi Lambda

catatan

Fitur ini baru di AWS SAM CLI versi 1.80.0. Untuk meningkatkan, lihat Upgrade AWS SAMCLI.

Untuk fungsi Lambda yang menggunakan otorisasi Lambda, AWS SAM CLI akan secara otomatis memanggil otorisasi Lambda Anda sebelum menjalankan titik akhir fungsi Lambda Anda.

Berikut ini adalah contoh memulai HTTP server lokal untuk fungsi yang menggunakan otorisasi Lambda:

$ sam local start-api 2023-04-17 15:02:13 Attaching import module proxy for analyzing dynamic imports AWS SAM CLI does not guarantee 100% fidelity between authorizers locally and authorizers deployed on AWS. Any application critical behavior should be validated thoroughly before deploying to production. Testing application behaviour against authorizers deployed on AWS can be done using the sam sync command. Mounting HelloWorldFunction at http://127.0.0.1:3000/authorized-request [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template 2023-04-17 15:02:13 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:3000 2023-04-17 15:02:13 Press CTRL+C to quit

Saat Anda memanggil titik akhir fungsi Lambda Anda melalui server lokal, HTTP AWS SAM CLI pertama memanggil otorisasi Lambda Anda. Jika otorisasi berhasil, AWS SAM CLI akan memanggil titik akhir fungsi Lambda Anda. Berikut adalah contohnya:

$ curl http://127.0.0.1:3000/authorized-request --header "header:my_token" {"message": "from authorizer"}% Invoking app.authorizer_handler (python3.8) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64. Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container START RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 Version: $LATEST END RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 REPORT RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 Init Duration: 1.08 ms Duration: 628.26 msBilled Duration: 629 ms Memory Size: 128 MB Max Memory Used: 128 MB Invoking app.request_handler (python3.8) Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64. Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container START RequestId: fdc12255-79a3-4365-97e9-9459d06446ff Version: $LATEST END RequestId: fdc12255-79a3-4365-97e9-9459d06446ff REPORT RequestId: fdc12255-79a3-4365-97e9-9459d06446ff Init Duration: 0.95 ms Duration: 659.13 msBilled Duration: 660 ms Memory Size: 128 MB Max Memory Used: 128 MB No Content-Type given. Defaulting to 'application/json'. 2023-04-17 15:03:03 127.0.0.1 - - [17/Apr/2023 15:03:03] "GET /authorized-request HTTP/1.1" 200 -

Opsi

Terus menggunakan kembali kontainer untuk mempercepat pemanggilan fungsi lokal

Secara default, AWS SAM CLI membuat wadah baru setiap kali fungsi Anda dipanggil melalui HTTP server lokal. Gunakan --warm-containers opsi untuk menggunakan kembali wadah Anda secara otomatis untuk pemanggilan fungsi. Ini mempercepat waktu yang dibutuhkan untuk AWS SAM CLI untuk mempersiapkan fungsi Lambda Anda untuk pemanggilan lokal. Anda dapat menyesuaikan opsi ini lebih lanjut dengan memberikan lazy argumen eager atau.

  • eager— Wadah untuk semua fungsi dimuat saat startup dan bertahan di antara pemanggilan.

  • lazy— Kontainer hanya dimuat ketika setiap fungsi pertama kali dipanggil. Mereka kemudian bertahan untuk doa tambahan.

Berikut adalah contohnya:

$ sam local start-api --warm-containers eager

Saat menggunakan --warm-containers dan memodifikasi kode fungsi Lambda Anda:

  • Jika aplikasi Anda memiliki .aws-sam direktori, jalankan sam build untuk memperbarui kode fungsi Anda di artefak build aplikasi Anda.

  • Ketika perubahan kode terdeteksi, AWS SAM CLI secara otomatis mematikan wadah fungsi Lambda.

  • Ketika Anda memanggil fungsi lagi, AWS SAM CLI secara otomatis membuat wadah baru.

Tentukan gambar kontainer yang akan digunakan untuk fungsi Lambda Anda

Secara default, AWS SAM CLI menggunakan gambar dasar Lambda dari Amazon Elastic Container Registry ECR (Amazon) untuk menjalankan fungsi Anda secara lokal. Gunakan --invoke-image opsi untuk mereferensikan gambar kontainer kustom. Berikut adalah contohnya:

$ sam local start-api --invoke-image public.ecr.aws/sam/emu-python3.8

Anda dapat menentukan fungsi yang akan digunakan dengan gambar wadah khusus. Berikut adalah contohnya:

$ sam local start-api --invoke-image Function1=amazon/aws/sam-cli-emulation-image-python3.8

Tentukan templat untuk diuji secara lokal

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. Berikut adalah contohnya:

$ sam local start-api --template myTemplate.yaml

Tentukan lingkungan pengembangan host dari fungsi Lambda Anda

Secara default, sam local start-api subperintah membuat HTTP server menggunakan localhost dengan alamat 127.0.0.1 IP. Anda dapat menyesuaikan nilai-nilai ini jika lingkungan pengembangan lokal Anda terisolasi dari mesin lokal Anda.

Gunakan --container-host opsi untuk menentukan host. Berikut adalah contohnya:

$ sam local start-api --container-host host.docker.internal

Gunakan --container-host-interface opsi untuk menentukan alamat IP jaringan host yang harus diikat oleh port kontainer. Berikut adalah contohnya:

$ sam local start-api --container-host-interface 0.0.0.0

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 start-api 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.

Pelajari selengkapnya

Untuk daftar semua sam local start-api opsi, lihatsam local start-api.