View a markdown version of this page

Mener SnapStart apkan kait untuk gambar kontainer - AWS Lambda

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:

  1. 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

  2. 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.

Diagram urutan yang menunjukkan urutan panggilan Runtime API untuk runtime SnapStart khusus: init, before-snapshot hook, GET/runtime/restore/next, after restore hook, dan loop invoke standar.

Mener SnapStart apkan kait siklus hidup

Untuk digunakan SnapStart dengan fungsi gambar kontainer Anda, ikuti langkah-langkah di bawah ini:

  1. 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_TYPE lingkungan disetel kesnap-start. Jalankan hook sebelum-snapshot terdaftar Anda, lalu panggil GET /runtime/restore/next untuk 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 IF
    catatan

    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/next panggilan adalah panggilan pemblokiran. Ini memblokir sampai Lambda mengembalikan lingkungan eksekusi dari snapshot.

  2. Jalankan kait setelah pemulihan, lalu masukkan loop invoke. Saat GET /runtime/restore/next mengembalikan 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/next Dari 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.