Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memahami lingkungan eksekusi Instans Terkelola Lambda
Instans Terkelola Lambda menyediakan model penerapan alternatif yang menjalankan kode fungsi Anda pada instans Amazon EC2 milik pelanggan sementara Lambda mengelola aspek operasional. Lingkungan eksekusi untuk Instans Terkelola memiliki beberapa perbedaan penting dari fungsi Lambda (default), terutama dalam cara menangani pemanggilan bersamaan dan mengelola siklus hidup kontainer.
Catatan: Untuk informasi tentang lingkungan eksekusi Lambda (default), lihat Memahami siklus hidup lingkungan eksekusi Lambda.
Siklus hidup lingkungan eksekusi
Siklus hidup lingkungan eksekusi fungsi Instans Terkelola Lambda berbeda dari Lambda (default) dalam beberapa cara utama:
Fase inisialisasi
Selama fase Init, Lambda melakukan langkah-langkah berikut:
-
Inisialisasi dan daftarkan semua ekstensi
-
Bootstrap titik masuk runtime. Runtime memunculkan jumlah pekerja runtime yang dikonfigurasi (implementasi tergantung pada runtime)
-
Jalankan kode inisialisasi fungsi (kode di luar handler)
-
Tunggu setidaknya satu pekerja runtime untuk memberi sinyal kesiapan dengan menelepon
/runtime/invocation/next
Fase Init dianggap selesai ketika ekstensi telah diinisialisasi dan setidaknya satu pekerja runtime telah memanggil. /runtime/invocation/next Fungsi tersebut kemudian siap untuk memproses pemanggilan.
catatan
Untuk fungsi Instans Terkelola Lambda, inisialisasi dapat memakan waktu hingga 15 menit. Batas waktu maksimum 130 detik atau batas waktu fungsi yang dikonfigurasi (hingga 900 detik).
Fase invokasi
Fase Invoke untuk fungsi Instans Terkelola Lambda memiliki beberapa karakteristik unik:
Operasi berkelanjutan. Tidak seperti Lambda (default), lingkungan eksekusi tetap terus aktif, memproses pemanggilan saat mereka tiba tanpa membeku di antara pemanggilan.
Pemrosesan paralel. Beberapa pemanggilan dapat dijalankan secara bersamaan dalam lingkungan eksekusi yang sama, masing-masing ditangani oleh pekerja runtime yang berbeda.
Batas waktu independen. Batas waktu yang dikonfigurasi fungsi berlaku untuk setiap pemanggilan individu. Ketika waktu pemanggilan habis, Lambda menandai pemanggilan tertentu sebagai gagal tetapi tidak mengganggu pemanggilan lain yang sedang berjalan atau menghentikan lingkungan eksekusi.
Penanganan tekanan balik. Jika semua pekerja runtime sibuk memproses pemanggilan, permintaan pemanggilan baru ditolak hingga pekerja tersedia.
Penanganan dan pemulihan kesalahan
Penanganan kesalahan di lingkungan eksekusi fungsi Instans Terkelola Lambda berbeda dari Lambda (default):
Kegagalan pekerja runtime. Jika proses runtime worker macet, lingkungan eksekusi terus beroperasi dengan pekerja sehat yang tersisa.
Ekstensi mogok. Jika proses ekstensi mogok selama inisialisasi atau operasi, seluruh lingkungan eksekusi ditandai sebagai tidak sehat dan dihentikan. Lambda menciptakan lingkungan eksekusi baru untuk menggantikannya.
Tidak reset/repair. Tidak seperti Lambda (default), Instans Terkelola tidak mencoba mengatur ulang dan menginisialisasi ulang lingkungan eksekusi setelah kesalahan. Sebaliknya, wadah yang tidak sehat dihentikan dan diganti dengan yang baru.
Memanggil batas waktu
Ketika waktu pemanggilan individu habis, Lambda mengembalikan Task timed out after <timeout> seconds kesalahan dengan status kesalahan fungsi ke pemanggil. Namun, Instans Terkelola Lambda tidak secara paksa menghentikan kode Anda—kode ini terus berjalan di lingkungan eksekusi. Sebagai pengembang fungsi, Anda bertanggung jawab untuk mendeteksi dan menangani batas waktu. Objek konteks memperlihatkan sisa waktu untuk pemanggilan. Nilai nol atau negatif menunjukkan waktu pemanggilan telah habis. Pemanggilan bersamaan lainnya di lingkungan eksekusi terus diproses secara normal.
Coba lagi perilaku
Saat waktu pemanggilan habis:
-
Pemanggilan sinkron: Penelepon menerima kesalahan batas waktu dan bertanggung jawab untuk mencoba kembali.
-
Pemanggilan asinkron: Lambda mencoba ulang berdasarkan kebijakan coba ulang fungsi Anda (default: 2 percobaan ulang). Setelah semua percobaan ulang habis, acara dikirim ke antrian huruf mati yang dikonfigurasi atau tujuan gagal, jika ada.
-
Pemetaan sumber peristiwa: Perilaku coba lagi bergantung pada konfigurasi sumber peristiwa (misalnya, ukuran batch, membagi dua kesalahan, upaya coba ulang maksimum). Batch dapat dicoba ulang atau dikirim ke tujuan yang gagal berdasarkan kebijakan coba ulang Anda.
Apa yang terjadi jika Anda tidak menangani batas waktu
Jika kode Anda tidak memeriksa sisa waktu dan menghentikan eksekusi:
-
Doa sudah ditandai sebagai gagal. Lambda telah mengembalikan kesalahan batas waktu ke pemanggil—pekerjaan apa pun yang diselesaikan kode Anda setelah batas waktu hilang secara efektif dari perspektif pemanggil.
-
Sumber daya tetap dikonsumsi. Kode Anda terus menempati slot runtime worker, mengurangi konkurensi yang tersedia untuk pemanggilan baru pada instance itu.
-
Perilaku nondeterministik. Kode Anda tidak berhenti saat batas waktu menyala — kode ini terus berjalan di latar belakang. Ini berarti efek samping masih dapat terjadi setelah Lambda memberi tahu penelepon bahwa pemanggilan gagal. Misalnya, handler Anda menulis catatan ke DynamoDB, lalu batas waktu diaktifkan dan Lambda mengembalikan kesalahan batas waktu ke pemanggil, tetapi kode Anda masih berjalan dan melanjutkan untuk mengirim pemberitahuan SNS. Penelepon mencoba ulang pemanggilan, yang menulis catatan lagi dan mengirim notifikasi lagi. Anda sekarang memiliki data duplikat dan pemberitahuan duplikat — dan tidak ada cara mudah untuk mengetahui mana yang berasal dari pemanggilan “gagal” yang masih berjalan di latar belakang.
Menangani batas waktu dalam kode Anda
Gunakan objek konteks untuk memeriksa sisa waktu dan menghentikan pemrosesan sebelum batas waktu. Konfigurasikan buffer berdasarkan durasi yang diharapkan dari unit kerja Anda berikutnya—misalnya, jika setiap item membutuhkan waktu sekitar 500 ms untuk diproses, atur buffer ke setidaknya 500 ms plus margin.
Untuk contoh penanganan batas waktu khusus bahasa, lihat bagian konteks permintaan dari setiap halaman runtime: