Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Lingkungan eksekusi Lambda
Lambda melakukan invokasi fungsi dalam lingkungan eksekusi, yang menyediakan lingkungan waktu pengoperasian yang aman dan terisolasi. Lingkungan eksekusi mengelola sumber daya yang diperlukan untuk menjalankan fungsi Anda. Lingkungan eksekusi juga menyediakan dukungan siklus hidup untuk waktu pengoperasian fungsi dan ekstensi eksternal terkait fungsi Anda.
Waktu pengoperasian fungsi tersebut berkomunikasi dengan Lambda menggunakan API Waktu Pengoperasian. Ekstensi berkomunikasi dengan Lambda menggunakan API Ekstensi. Ekstensi juga dapat menerima pesan log dan telemetri lain dari fungsi dengan menggunakan API Telemetri.
Saat membuat fungsi Lambda, Anda menentukan informasi konfigurasi, seperti jumlah memori yang tersedia dan waktu eksekusi maksimal yang diizinkan untuk fungsi Anda. Lambda menggunakan informasi ini untuk menyiapkan lingkungan eksekusi.
Waktu pengoperasian fungsi dan setiap ekstensi eksternal adalah proses yang berjalan di dalam lingkungan eksekusi. Izin, sumber daya, kredensial, dan variabel lingkungan dibagikan di antara fungsi dan ekstensi.
Siklus hidup lingkungan eksekusi Lambda
Setiap fase dimulai dengan kejadian yang dikirimkan Lambda ke waktu pengoperasian dan ke semua ekstensi terdaftar. Waktu pengoperasian dan setiap ekstensi menunjukkan penyelesaian dengan mengirimkan permintaan API Next
. Lambda membekukan lingkungan eksekusi saat waktu pengoperasian dan setiap ekstensi telah selesai dan tidak ada kejadian yang tertunda.
Topik
Fase inisialisasi
Di fase Init
, Lambda melakukan tiga tugas:
-
Memulai semua ekstensi (
Extension init
) -
Melakukan bootstrap waktu pengoperasian (
Runtime init
) -
Menjalankan kode statis fungsi (
Function init
) -
Jalankan kait beforeCheckpoint runtime apa pun (hanya Lambda) SnapStart
Fase Init
berakhir ketika waktu pengoperasian dan semua ekstensi menandakan bahwa ekstensi siap dengan mengirim permintaan API Next
. Fase Init
dibatasi 10 detik. Jika ketiga tugas tidak selesai dalam 10 detik, Lambda mencoba kembali Init
fase pada saat pemanggilan fungsi pertama dengan batas waktu fungsi yang dikonfigurasi.
Ketika Lambda SnapStart diaktifkan, Init
fase terjadi ketika Anda mempublikasikan versi fungsi. Lambda menyimpan snapshot memori dan status disk dari lingkungan eksekusi yang diinisialisasi, mempertahankan snapshot terenkripsi, dan menyimpannya dalam cache untuk akses latensi rendah. Jika Anda memiliki hook beforeCheckpoint runtime, maka kode berjalan di akhir Init
fase.
catatan
Batas waktu 10 detik tidak berlaku untuk fungsi yang menggunakan konkurensi yang disediakan atau. SnapStart Untuk konkurensi dan SnapStart fungsi yang disediakan, kode inisialisasi Anda dapat berjalan hingga 15 menit. Batas waktu adalah 130 detik atau batas waktu fungsi yang dikonfigurasi (maksimum 900 detik), mana yang lebih tinggi.
Saat Anda menggunakan konkurensi yang disediakan, Lambda menginisialisasi lingkungan eksekusi saat Anda mengonfigurasi pengaturan PC untuk suatu fungsi. Lambda juga memastikan bahwa lingkungan eksekusi yang diinisialisasi selalu tersedia sebelum pemanggilan. Anda mungkin melihat kesenjangan antara fase pemanggilan dan inisialisasi fungsi Anda. Bergantung pada runtime dan konfigurasi memori fungsi Anda, Anda juga dapat melihat latensi variabel pada pemanggilan pertama pada lingkungan eksekusi yang diinisialisasi.
Untuk fungsi yang menggunakan konkurensi sesuai permintaan, Lambda terkadang dapat menginisialisasi lingkungan eksekusi sebelum permintaan pemanggilan. Ketika ini terjadi, Anda juga dapat mengamati kesenjangan waktu antara fase inisialisasi dan pemanggilan fungsi Anda. Kami menyarankan Anda untuk tidak mengambil ketergantungan pada perilaku ini.
Kegagalan selama fase Init
Jika fungsi macet atau habis waktu selama Init
fase, Lambda memancarkan informasi kesalahan di log. INIT_REPORT
contoh — Log INIT_REPORT untuk batas waktu
INIT_REPORT Init Duration: 1236.04 ms Phase: init Status: timeout
contoh — Log INIT_REPORT untuk kegagalan ekstensi
INIT_REPORT Init Duration: 1236.04 ms Phase: init Status: error Error Type: Extension.Crash
Jika Init
fase berhasil, Lambda tidak memancarkan INIT_REPORT
log SnapStart— kecuali diaktifkan. SnapStart fungsi selalu memancarkanINIT_REPORT
. Untuk informasi selengkapnya, lihat Pemantauan untuk Lambda SnapStart.
Fase pemulihan (hanya Lambda SnapStart )
Saat Anda pertama kali memanggil SnapStartfungsi dan saat fungsi meningkat, Lambda melanjutkan lingkungan eksekusi baru dari snapshot yang bertahan alih-alih menginisialisasi fungsi dari awal. Jika Anda memiliki hook afterRestore() runtime, kode berjalan di akhir Restore
fase. Anda dikenakan biaya untuk durasi kait afterRestore()
runtime. Runtime (JVM) harus dimuat dan kait afterRestore()
runtime harus selesai dalam batas waktu tunggu (10 detik). Jika tidak, Anda akan mendapatkan SnapStartTimeoutException. Ketika Restore
fase selesai, Lambda memanggil fungsi handler (the). Fase invokasi
Kegagalan selama fase Restore
Jika Restore
fase gagal, Lambda memancarkan informasi kesalahan di log. RESTORE_REPORT
contoh — RESTORE_REPORT log untuk batas waktu
RESTORE_REPORT Restore Duration: 1236.04 ms Status: timeout
contoh — RESTORE_REPORT log untuk kegagalan hook runtime
RESTORE_REPORT Restore Duration: 1236.04 ms Status: error Error Type: Runtime.ExitError
Untuk informasi lebih lanjut tentang RESTORE_REPORT
log, lihatPemantauan untuk Lambda SnapStart.
Fase invokasi
Saat fungsi Lambda diinvokasi untuk menanggapi permintaan API Next
, Lambda mengirim kejadian Invoke
ke waktu pengoperasian dan untuk setiap perpanjangan.
Pengaturan waktu habis fungsi membatasi durasi seluruh fase Invoke
. Misalnya, jika Anda mengatur waktu fungsi habis sebagai 360 detik, fungsi dan semua ekstensi harus selesai dalam 360 detik. Perhatikan bahwa tidak ada fase pasca-invokasi yang independen. Durasi adalah jumlah semua waktu invokasi (waktu pengoperasian + ekstensi) dan tidak dihitung hingga fungsi dan semua ekstensi selesai dijalankan.
Fase invokasi berakhir ketika waktu pengoperasian dan semua ekstensi menandakan bahwa ekstensi selesai dengan mengirim permintaan API Next
.
Kegagalan selama fase pemanggilan
Jika fungsi Lambda mengalami crash atau waktu habis selama fase Invoke
, Lambda mengatur ulang lingkungan eksekusi. Diagram berikut menggambarkan perilaku lingkungan eksekusi Lambda ketika ada kegagalan pemanggilan:
Pada diagram sebelumnya:
-
Fase pertama adalah fase INIT, yang berjalan tanpa kesalahan.
-
Fase kedua adalah fase INVOKE, yang berjalan tanpa kesalahan.
-
Pada titik tertentu, misalkan fungsi Anda mengalami kegagalan pemanggilan (seperti batas waktu fungsi atau kesalahan runtime). Fase ketiga, berlabel INVOKE WITH ERROR, menggambarkan skenario ini. Ketika ini terjadi, layanan Lambda melakukan reset. Reset berperilaku seperti kejadian
Shutdown
. Pertama, Lambda mematikan runtime, lalu mengirimkanShutdown
acara ke setiap ekstensi eksternal terdaftar. Kejadian ini mencakup alasan untuk pematian. Jika lingkungan ini digunakan untuk pemanggilan baru, Lambda menginisialisasi ulang ekstensi dan runtime bersama dengan pemanggilan berikutnya.catatan
Reset Lambda tidak menghapus konten
/tmp
direktori sebelum fase init berikutnya. Perilaku ini konsisten dengan fase shutdown reguler. -
Fase keempat mewakili fase INVOKE segera setelah kegagalan pemanggilan. Di sini, Lambda menginisialisasi lingkungan lagi dengan menjalankan kembali fase INIT. Ini disebut init yang ditekan. Ketika input yang ditekan terjadi, Lambda tidak secara eksplisit melaporkan fase INIT tambahan di Log. CloudWatch Sebagai gantinya, Anda mungkin memperhatikan bahwa durasi di baris LAPORAN menyertakan durasi INIT tambahan+durasi INVOKE. Misalnya, Anda melihat log berikut di CloudWatch:
2022-12-20T01:00:00.000-08:00 START RequestId: XXX Version: $LATEST 2022-12-20T01:00:02.500-08:00 END RequestId: XXX 2022-12-20T01:00:02.500-08:00 REPORT RequestId: XXX Duration: 3022.91 ms Billed Duration: 3000 ms Memory Size: 512 MB Max Memory Used: 157 MB
Dalam contoh ini, perbedaan antara stempel waktu REPORT dan START adalah 2,5 detik. Ini tidak cocok dengan durasi yang dilaporkan 3022,91 milldetik, karena tidak memperhitungkan INIT ekstra (init yang ditekan) yang dilakukan Lambda. Dalam contoh ini, Anda dapat menyimpulkan bahwa fase INVOKE yang sebenarnya membutuhkan waktu 2,5 detik.
Untuk wawasan lebih lanjut tentang perilaku ini, Anda dapat menggunakanAPI Telemetri Lambda. API Telemetri memancarkan
INIT_START
,INIT_RUNTIME_DONE
, danINIT_REPORT
peristiwa dengan input yang ditekanphase=invoke
setiap kali terjadi di antara fase pemanggilan. -
Fase kelima mewakili fase SHUTDOWN, yang berjalan tanpa kesalahan.
Fase pematian
Ketika Lambda akan mematikan runtime, ia mengirimkan Shutdown
acara ke setiap ekstensi eksternal yang terdaftar. Ekstensi dapat menggunakan waktu ini untuk tugas pembersihan akhir. Kejadian Shutdown
adalah respons terhadap permintaan API Next
.
Durasi: Keseluruhan fase Shutdown
dibatasi hingga 2 detik. Jika waktu pengoperasian atau ekstensi tidak merespons, Lambda menghentikannya melalui sinyal (SIGKILL
).
Setelah fungsi dan semua ekstensi selesai, Lambda mempertahankan lingkungan eksekusi selama beberapa waktu untuk mengantisipasi invokasi fungsi lain. Namun, Lambda menghentikan lingkungan eksekusi setiap beberapa jam untuk memungkinkan pembaruan dan pemeliharaan runtime — bahkan untuk fungsi yang dipanggil terus menerus. Anda tidak boleh berasumsi bahwa lingkungan eksekusi akan bertahan tanpa batas waktu. Untuk informasi selengkapnya, lihat Menerapkan kewarganegaraan dalam fungsi.
Saat fungsinya diinvokasi lagi, Lambda mencairkan lingkungan untuk digunakan kembali. Menggunakan kembali lingkungan eksekusi memiliki implikasi berikut:
-
Objek yang dinyatakan di luar metode penangan fungsi tetap diinisialisasi, memberikan pengoptimalan tambahan ketika fungsi diinvokasi lagi. Misalnya, jika fungsi Lambda Anda menetapkan koneksi database, alih-alih menetapkan kembali koneksi, koneksi asli digunakan dalam invokasi berikutnya. Kami menyarankan Anda menambahkan logika dalam kode untuk memeriksa apakah ada koneksi sebelum membuat yang baru.
-
Setiap lingkungan eksekusi menyediakan antara 512 MB dan 10.240 MB, dalam peningkatan 1-MB, ruang disk dalam direktori.
/tmp
Isi direktori tetap ada ketika lingkungan eksekusi dibekukan, menyediakan cache sementara yang dapat digunakan untuk beberapa invokasi. Anda dapat menambahkan kode tambahan untuk memeriksa apakah cache memiliki data yang Anda simpan. Untuk informasi lebih lanjut tentang batas ukuran deployment, lihat Kuota Lambda. -
Proses latar belakang atau panggilan balik yang diinisialisasi fungsi Lambda Anda dan tidak selesai ketika fungsi berakhir akan dilanjutkan jika Lambda menggunakan kembali lingkungan eksekusi. Pastikan setiap proses latar belakang atau panggilan balik dalam kode Anda selesai sebelum kode tersebut ditutup.
Menerapkan kewarganegaraan dalam fungsi
Saat menulis kode fungsi Lambda Anda, perlakukan lingkungan eksekusi sebagai stateless, dengan asumsi bahwa itu hanya ada untuk satu pemanggilan. Lambda menghentikan lingkungan eksekusi setiap beberapa jam untuk memungkinkan pembaruan dan pemeliharaan runtime — bahkan untuk fungsi yang dipanggil terus menerus. Inisialisasi status apa pun yang diperlukan (misalnya, mengambil keranjang belanja dari tabel Amazon DynamoDB) saat fungsi Anda dimulai. Sebelum keluar, lakukan perubahan data permanen ke toko tahan lama seperti Amazon Simple Storage Service (Amazon S3), DynamoDB, atau Amazon Simple Queue Service (Amazon Simple Queue Service). Hindari mengandalkan struktur data yang ada, file sementara, atau status yang mencakup pemanggilan, seperti penghitung atau agregat. Ini memastikan bahwa fungsi Anda menangani setiap pemanggilan secara independen.