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 pengantar AWS SAM CLI, lihat Apa itu AWS SAM CLI?
-
Untuk daftar opsi
sam local start-api
perintah, lihatsam local start-api. -
Untuk contoh penggunaan
sam local start-api
selama alur kerja pengembangan tipikal, lihatLangkah 7: (Opsional) Uji aplikasi Anda secara lokal.
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
-
Dari direktori root proyek Anda, jalankan yang berikut ini:
$
sam local start-api
<options>
-
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 -
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!"}% -
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 menjalankansam build
untuk memperbarui fungsi Anda. Kemudian jalankansam 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, jalankansam 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.