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 AWS Serverless Application Model sam local start-api
subperintah Command Line Interface (AWS SAMCLI) untuk menjalankan AWS Lambda fungsi Anda secara lokal dan menguji melalui host server HTTP lokal. Jenis pengujian ini berguna untuk fungsi Lambda yang dipanggil oleh titik akhir Amazon API Gateway.
-
Untuk pengantar AWS SAMCLI, lihat Apa itu AWS SAMCLI?
-
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 SAMCLI dengan menyelesaikan yang berikut ini:
Sebelum menggunakansam local start-api
, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
Menggunakan sam local start-api
Ketika Anda menjalankansam local start-api
, AWS SAMCLI mengasumsikan bahwa direktori kerja Anda saat ini adalah direktori root proyek Anda. Yang pertama AWS SAMCLI akan mencari template.[yaml|yml]
file dalam .aws-sam
subfolder. Jika tidak ditemukan, AWS SAMCLI akan mencari template.[yaml|yml]
file dalam direktori kerja Anda saat ini.
Untuk memulai server HTTP lokal
-
Dari direktori root proyek Anda, jalankan yang berikut ini:
$
sam local start-api
<options>
-
AWS SAMCLIMembangun fungsi Lambda Anda dalam wadah Docker lokal. Kemudian output alamat lokal dari endpoint server HTTP Anda. Berikut ini 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 ini adalah contohnya:
sam-app$
curl http://127.0.0.1:3000/hello
{"message": "Hello world!"}% -
Saat Anda membuat perubahan pada kode fungsi Lambda Anda, pertimbangkan hal berikut untuk menyegarkan server HTTP lokal Anda:
-
Jika aplikasi Anda tidak memiliki
.aws-sam
direktori dan fungsi Anda menggunakan bahasa yang ditafsirkan, AWS SAMCLI maka 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 SAMCLI versi 1.80.0. Untuk meningkatkan, lihat Memutakhirkan AWS SAM CLI.
Untuk fungsi Lambda yang menggunakan otorisasi Lambda, Lambda akan AWS SAMCLI secara otomatis memanggil otorisasi Lambda Anda sebelum menjalankan titik akhir fungsi Lambda Anda.
Berikut ini adalah contoh memulai server HTTP 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 HTTP lokal, AWS SAMCLI yang pertama memanggil otorisasi Lambda Anda. Jika otorisasi berhasil, AWS SAMCLI akan memanggil titik akhir fungsi Lambda Anda. Berikut ini 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 SAMCLI membuat wadah baru setiap kali fungsi Anda dipanggil melalui server HTTP lokal. Gunakan --warm-containers
opsi untuk menggunakan kembali wadah Anda secara otomatis untuk pemanggilan fungsi. Ini mempercepat waktu yang dibutuhkan untuk mempersiapkan fungsi Lambda Anda AWS SAMCLI 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 ini 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, secara AWS SAMCLI otomatis menutup wadah fungsi Lambda.
-
Ketika Anda memanggil fungsi lagi, secara AWS SAMCLI otomatis membuat wadah baru.
Tentukan gambar kontainer yang akan digunakan untuk fungsi Lambda Anda
Secara default, AWS SAMCLI menggunakan gambar dasar Lambda dari Amazon Elastic Container Registry (Amazon ECR) Registry (Amazon ECR) untuk menjalankan fungsi Anda secara lokal. Gunakan --invoke-image
opsi untuk mereferensikan gambar kontainer kustom. Berikut ini 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 ini 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 referensi AWS SAMCLI ke, gunakan --template
opsi. AWS SAMCLIAkan memuat hanya AWS SAM template itu dan sumber daya yang ditunjukkannya. Berikut ini 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 server HTTP 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 ini 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 ini 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.