Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menerapkan SnapStart kait untuk gambar kontainer
Gambaran umum
Saat menggunakan SnapStart dengan fungsi image container, runtime perlu mengoordinasikan siklus hidup fungsi dan memanggil kait before-snapshot dan after-restore selama fase siklus hidup yang sesuai. Kait ini memungkinkan Anda menjalankan logika kustom (seperti menyegarkan kredensyal atau menyemai ulang generator nomor acak) pada titik-titik dalam siklus hidup snapshot-and-restore. Jika Anda menggunakan runtime terkelola yang didukung atau gambar dasar yang sesuai untuk runtime tersebut (Java versi 11+, Python versi 3.12+, dan.NET versi 8+) Lambda mengoordinasikan siklus hidup untuk Anda. SnapStart Daftarkan hook Anda melalui API yang dijelaskan diMenerapkan kode sebelum atau sesudah snapshot Fungsi Peristiwa Lambda.
Jika Anda menggunakan gambar wadah dasar Anda sendiri, Klien Antarmuka Runtime (RIC), atau gambar dasar Lambda untuk disediakan.al2023,, atau Ruby Node.js, ikuti langkah-langkah di halaman ini untuk digunakan. SnapStart
Prasyarat
Saat Lambda mengembalikan fungsi dari snapshot, status apa pun yang ditentukan selama inisialisasi, seperti generator nomor acak, ID unik, dan kredensyal cache, akan dibagikan di semua lingkungan eksekusi yang dipulihkan dari snapshot tersebut. Sebelum menggunakan SnapStart dengan Fungsi Peristiwa Lambda berbasis gambar kontainer Anda, tinjau Menangani keunikan dengan Lambda SnapStart dan pastikan bahwa persyaratan yang diuraikan dalam Gunakan generator nomor pseudorandom yang aman secara kriptografis (CSPrNGs) terpenuhi.
Setelah memvalidasi bahwa persyaratan terpenuhi, pilih salah satu dari dua opsi berikut:
-
Opsi 1: Jika Anda memerlukan kait sebelum-snapshot dan sesudah pemulihan untuk menjalankan logika khusus saat snapshot fungsi Anda dilanjutkan, ikuti petunjuk di bagian. Menerapkan SnapStart kait siklus hidup
-
Opsi 2: Jika Anda tidak memerlukan kait ini, aktifkan SnapStart gambar kontainer ini dengan menentukan label berikut dalam Dockerfile Anda:
LABEL com.amazonaws.lambda.feature.snapstart="Allow"
Jika image container Anda tidak mengimplementasikan /restore/next API atau menyertakan label, versi publish akan gagal.
catatan
Prasyarat ini tidak diperlukan jika Anda menggunakan gambar dasar terkelola Lambda untuk Java (versi 11+), Python (versi 3.12+), dan .NET (versi 8+) karena sudah mengoordinasikan siklus hidup dan memberikan persyaratan keunikan. SnapStart
Ikhtisar siklus hidup
Diagram berikut menunjukkan urutan panggilan Runtime API yang diharapkan dibuat oleh runtime SnapStart kustom. Semua panggilan adalah bagian dari kontrak Runtime API; sedangkan panggilan #3, #4, #5, dan #6 khusus untuk SnapStart.
Menerapkan SnapStart kait siklus hidup
Untuk menggunakan SnapStart fungsi image container Anda, ikuti langkah-langkah di bawah ini:
-
Jalankan kait sebelum snapshot dan picu proses snapshotting: Sebagai langkah terakhir dari kode inisialisasi fungsi Anda, jalankan kait sebelum snapshot jika diperlukan dan picu proses snapshotting. Lakukan langkah-langkah ini hanya jika SnapStart diaktifkan, dengan memeriksa bahwa nilai variabel
AWS_LAMBDA_INITIALIZATION_TYPElingkungan diatur kesnap-start. Jalankan kait sebelum snapshot terdaftar Anda, lalu panggilGET /runtime/restore/nextuntuk memicu proses snapshotting. Jika hook before-snapshot melempar atau mengembalikan kesalahan, runtime akan memposting kesalahan ke titik akhir./runtime/init/errorLihat contoh pseudo-code di bawah ini:# After all initialization code has finished: READ initialization_type FROM environment variable "AWS_LAMBDA_INITIALIZATION_TYPE" IF initialization_type IS "snap-start" THEN TRY EXECUTE registered before-snapshot hooks ON ERROR POST error to /runtime/init/error SET header Lambda-Runtime-Function-Error-Type TO <Category.Reason> SET body TO { errorMessage, errorType, stackTrace } EXIT process with non-zero code # Signal readiness for snapshot SEND GET request to /runtime/restore/next # The request blocks until Lambda restores the execution environment from the snapshot, then returns HTTP 200. END IFcatatan
Fase init dan kait sebelum snapshot berbagi batas waktu gabungan.
max(function_timeout, 130 seconds)Jika batas ini terlampaui, Lambda gagal PublishVersion permintaan. Selain itu, seperti/runtime/invocation/next,/runtime/restore/nextpanggilan adalah panggilan pemblokiran. Ini memblokir sampai Lambda mengembalikan lingkungan eksekusi dari snapshot. -
Jalankan after-restore hooks, lalu masukkan loop pemanggilan. Saat
GET /runtime/restore/nextmengembalikan 200, runtime Anda harus mengeksekusi hook after-restore yang terdaftar sebelum melanjutkan ke loop pemanggilan. Jika hook after-restore gagal, laporkan kesalahannya ke/runtime/restore/error. Setelah kait after-restore selesai, masukkan loop pemanggilan standar dengan menelepon.GET /runtime/invocation/nextMulai saat ini, perilaku identik dengan fungsi yang tidak digunakan SnapStart. Lihat contoh pseudo-code di bawah ini:# After the snapshot has been restored # (i.e., GET /runtime/restore/next has returned HTTP 200): TRY EXECUTE registered after-restore hooks ON ERROR POST error to /runtime/restore/error SET header Lambda-Runtime-Function-Error-Type TO <Category.Reason> SET body TO { errorMessage, errorType, stackTrace } # Proceed to the invoke loop GET /runtime/invocation/next
Penanganan kesalahan
Jika hook gagal, runtime harus melaporkan kesalahan ke titik akhir API yang sesuai dan keluar dari proses. Tabel di bawah ini merangkum perilaku untuk setiap fase:
| Fase | Titik akhir API kesalahan | Apa yang terjadi pada kegagalan |
|---|---|---|
| Init/sebelum-snapshot | POST /runtime/init/error |
Lambda gagal permintaan. PublishVersion Keluar dari proses. |
| After-restore | POST /runtime/restore/error |
Lambda gagal dalam pemanggilan dalam penerbangan dan merobohkan lingkungan eksekusi. Keluar dari proses. |
Untuk kedua titik akhir API, setel Lambda-Runtime-Function-Error-Type header ke nilai dalam format <Category.Reason> (misalnya, Runtime.BeforeSnapshotError atauRuntime.AfterRestoreError). Sertakan badan kesalahan denganerrorMessage,errorType, dan opsionalstackTrace.
Untuk spesifikasi endpoint API lengkap dan kode respons, lihat Kesalahan inisialisasi dan Mengembalikan kesalahan (hanya berlaku untuk SnapStart) di referensi Runtime API.