Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mener SnapStart apkan kait untuk gambar kontainer
Gambaran umum
Saat menggunakan SnapStart dengan fungsi gambar kontainer, runtime perlu mengoordinasikan siklus hidup fungsi dan memanggil kait sebelum-snapshot dan setelah pemulihan selama fase siklus hidup yang sesuai. Pengait ini memungkinkan Anda menjalankan logika kustom (seperti menyegarkan kredenSIAL atau menyemai ulang generator nomor acak) pada titik-titik dalam siklus hidup snapshot dan pemulihan. Jika Anda menggunakan runtime terkelola yang SnapStart 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. Daftarkan kait Anda melalui API yang dijelaskan diTerapkan kode sebelum atau sesudah snapshot fungsi Lambda.
Jika Anda menggunakan image wadah dasar Anda sendiri, Runtime Interface Clients (RICs), atau gambar dasar Lambda untuk provided.al2023,, atau Ruby Node.js, ikuti langkah-langkah di halaman ini untuk digunakan. SnapStart
Prasyarat
Ketika Lambda mengembalikan fungsi dari snapshot, setiap status yang ditentukan selama inisialisasi, seperti generator nomor acak, ID unik, dan kredenSIAL cache, dibagikan di semua lingkungan eksekusi yang dipulihkan dari snapshot tersebut. Sebelum menggunakan SnapStart dengan fungsi Lambda berbasis gambar wadah Anda, tinjau Menangani keunikan dengan Lambda SnapStart dan pastikan bahwa persyaratan yang diuraikan dalam Gunakan generator nomor pseudorandom yang aman secara kriptografis (CSPRNG) terpenuhi.
Setelah memvalidasi bahwa persyaratan terpenuhi, pilih salah satu dari dua opsi berikut:
-
Opsi 1: Jika Anda memerlukan kait sebelum-snapshot dan setelah pemulihan untuk menjalankan logika khusus saat snapshot fungsi Anda dilanjutkan, ikuti instruksi di bagian tersebut. Mener SnapStart apkan kait siklus hidup
-
Opsi 2: Jika Anda tidak memerlukan kait ini, aktifkan SnapStart untuk image wadah ini dengan menentukan label berikut dalam Dockerfile Anda:
LABEL com.amazonaws.lambda.feature.snapstart="Allow"
Jika image kontainer Anda tidak mengimplementasikan /restore/next API atau menyertakan label, penerbitan versi akan gagal.
catatan
Prasyarat ini tidak diperlukan jika Anda menggunakan gambar dasar yang dikelola Lambda untuk Java (versi 11+), Python (versi 3.12+), dan .NET (versi 8+) karena mereka sudah mengoordinasikan siklus hidup dan menyediakan persyaratan keunikan. SnapStart
Ikhtisar siklus hidup
Diagram berikut menunjukkan urutan panggilan Runtime API yang diharapkan dilakukan oleh runtime SnapStart khusus. Semua panggilan adalah bagian dari kontrak Runtime API; sedangkan panggilan #3, #4, #5, dan #6 khusus untuk SnapStart.
Mener SnapStart apkan kait siklus hidup
Untuk digunakan SnapStart dengan fungsi gambar kontainer Anda, ikuti langkah-langkah di bawah ini:
-
Jalankan kait sebelum-snapshot dan memicu 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 disetel kesnap-start. Jalankan hook sebelum-snapshot terdaftar Anda, lalu panggilGET /runtime/restore/nextuntuk memicu proses snapshotting. Jika hook sebelum-snapshot melontarkan atau mengembalikan kesalahan, runtime memposting kesalahan ke titik akhir/runtime/init/error. Lihat contoh kode semu 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 hook sebelum-snapshot berbagi batas waktu gabungan dari.
max(function_timeout, 130 seconds)Jika batas ini terlampaui, Lambda gagal dalam PublishVersion permintaan. Selain itu, seperti/runtime/invocation/next,/runtime/restore/nextpanggilan adalah panggilan pemblokiran. Ini memblokir sampai Lambda mengembalikan lingkungan eksekusi dari snapshot. -
Jalankan kait setelah pemulihan, lalu masukkan loop invoke. Saat
GET /runtime/restore/nextmengembalikan 200, runtime Anda harus menjalankan kait setelah pemulihan yang terdaftar sebelum melanjutkan ke loop invoke. Jika kait setelah pemulihan gagal, laporkan kesalahan ke/runtime/restore/error. Setelah kait setelah pemulihan selesai, masukkan loop pemanggilan standar dengan memanggil.GET /runtime/invocation/nextDari titik ini, perilakunya identik dengan fungsi yang tidak menggunakan SnapStart. Lihat contoh kode semu 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
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 dalam PublishVersion permintaan. Keluar dari proses. |
| After-restore | POST /runtime/restore/error |
Lambda gagal dalam pemanggilan dalam penerbangan dan meruntuhkan lingkungan eksekusi. Keluar dari proses. |
Untuk kedua titik akhir API, atur 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 titik akhir API lengkap dan kode respons, lihat Kesalahan inisialisasi dan Kesalahan pemulihan (hanya berlaku untuk SnapStart) di referensi Runtime API.