Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membangun runtime khusus untuk AWS Lambda
Anda dapat mengimplementasikan AWS Lambda runtime dalam bahasa pemrograman apa pun. Runtime adalah program yang menjalankan metode handler fungsi Lambda saat fungsi tersebut dipanggil. Anda dapat menyertakan runtime dalam paket penerapan fungsi Anda atau mendistribusikannya dalam lapisan. Saat Anda membuat fungsi Lambda, pilih OS-only runtime (keluarga provided runtime).
catatan
Membuat runtime khusus adalah kasus penggunaan lanjutan. Jika Anda mencari informasi tentang mengkompilasi ke biner asli atau menggunakan runtime siap pakai pihak ketiga, lihat. Kapan menggunakan runtime Lambda OS-only
Untuk panduan proses penerapan runtime khusus, lihatTutorial: Membangun runtime khusus.
Topik
Persyaratan
Runtime khusus harus menyelesaikan tugas inisialisasi dan pemrosesan tertentu. Runtime menjalankan kode pengaturan fungsi, membaca nama handler dari variabel lingkungan, dan membaca peristiwa pemanggilan dari API runtime Lambda. Runtime meneruskan data event ke handler fungsi, dan memposting respons dari handler kembali ke Lambda.
Tugas inisialisasi
Tugas inisialisasi dijalankan sekali per instans fungsi untuk menyiapkan lingkungan untuk menangani invokasi.
-
Ambil pengaturan – Baca variabel lingkungan untuk mendapatkan detail tentang fungsi dan lingkungan.
-
_HANDLER– Lokasi ke handler, dari konfigurasi fungsi. Format standar adalah, denganfile.methodfileadalah nama file tanpa ekstensi, danmethodmerupakan nama metode atau fungsi yang ditentukan dalam file. -
LAMBDA_TASK_ROOT– Direktori yang berisi kode fungsi. -
AWS_LAMBDA_RUNTIME_API– Host dan port API runtime.
Untuk daftar lengkap variabel yang tersedia, lihatVariabel lingkungan runtime yang ditetapkan.
-
-
Inisialisasi fungsi – Muat file handler dan jalankan kode global atau statis yang ada di dalamnya. Fungsi harus membuat sumber daya statis seperti klien SDK dan koneksi database satu kali, dan menggunakannya kembali untuk beberapa invokasi.
-
Mengatasi kesalahan – Jika terjadi kesalahan, hubungi kesalahan inisialisasi API dan segera keluar.
Inisialisasi diperhitungkan dalam waktu dan batas waktu eksekusi yang ditagih. Saat eksekusi memicu inisialisasi instans baru dari fungsi, Anda dapat melihat waktu inisialisasi dalam log dan jejak AWS X-Ray.
contoh log
REPORT RequestId: f8ac1208... Init Duration: 48.26 ms Duration: 237.17 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 26 MB
Memproses tugas
Saat belajar, runtime menggunakan antarmuka runtime Lambda untuk mengelola event masuk dan melaporkan kesalahan. Setelah menyelesaikan tugas inisialisasi, runtime memproses event masuk secara berulang. Dalam kode runtime Anda, lakukan langkah berikut secara berurutan.
-
Dapatkan event – Hubungi API invokasi beikutnya untuk mendapatkan event berikutnya. Badan respons berisi data event. Header respons berisi ID permintaan dan informasi lainnya.
-
Menyebarkan header pelacakan — X-Ray Dapatkan header pelacakan dari
Lambda-Runtime-Trace-Idheader dalam respons API. Tetapkan variabel lingkungan_X_AMZN_TRACE_IDsecara lokal dengan nilai yang sama. X-Ray SDK menggunakan nilai ini untuk menghubungkan data pelacakan antar layanan. -
Buat objek konteks – Buat objek dengan informasi konteks dari variabel lingkungan dan header dalam respons API.
-
Memanggil handler fungsi – Berikan event dan objek konteks ke handler.
-
Menangani respons – Hubungi respons pemanggil API untuk memposting respons dari penanggung jawab.
-
Mengatasi kesalahan – Jika terjadi kesalahan, hubungi kesalahan invokasi API.
-
Pembersihan – Lepaskan sumber daya yang tidak digunakan, kirim data ke layanan lain, atau lakukan tugas tambahan sebelum melanjutkan ke event berikutnya.
Entrypoint
Titik entri runtime kustom adalah file eksekusi bernama bootstrap. File bootstrap dapat menjadi runtime, atau dapat memanggil file lain yang membuat runtime. Jika root paket penerapan Anda tidak berisi file bernamabootstrap, Lambda mencari file di lapisan fungsi. Jika bootstrap file tidak ada atau tidak dapat dieksekusi, fungsi Anda mengembalikan Runtime.InvalidEntrypoint kesalahan saat pemanggilan.
Berikut adalah contoh bootstrap file yang menggunakan versi bundel Node.js untuk menjalankan JavaScript runtime dalam file terpisah bernamaruntime.js.
contoh bootstrap
#!/bin/sh cd $LAMBDA_TASK_ROOT ./node-v11.1.0-linux-x64/bin/node runtime.js
Menerapkan streaming respons dalam runtime khusus
Untuk fungsi streaming respons, error titik akhir response dan memiliki perilaku yang sedikit dimodifikasi yang memungkinkan runtime mengalirkan respons parSIAL ke klien dan mengembalikan muatan dalam potongan. Untuk informasi selengkapnya tentang perilaku tertentu, lihat berikut ini:
-
/runtime/invocation/AwsRequestId/response- MenyebarkanContent-Typeheader dari runtime untuk dikirim ke klien. Lambda mengembalikan payload respons dalam potongan dengan menggunakan pengkodean transfer HTTP/1.1 chunked. Untuk melakukan streaming respons ke Lambda, runtime harus:-
Atur header
Lambda-Runtime-Function-Response-ModeHTTP kestreaming. -
Atur header
Transfer-Encodingkechunked. -
Tulis respons yang sesuai dengan spesifikasi pengko HTTP/1.1 dean transfer terpotong.
-
Tutup koneksi yang mendasarinya setelah berhasil menulis respons.
-
-
/runtime/invocation/AwsRequestId/error- Runtime dapat menggunakan titik akhir ini untuk melaporkan kesalahan fungsi atau runtime ke Lambda, yang juga menerimaTransfer-Encodingheader. Titik akhir ini hanya dapat dipanggil sebelum runtime mulai mengirim respons pemanggilan. -
Laporkan kesalahan midstream menggunakan trailer kesalahan di
/runtime/invocation/AwsRequestId/response— Untuk melaporkan kesalahan yang terjadi setelah runtime mulai menulis respons pemanggilan, runtime dapat secara opsional melampirkan header trailing HTTP bernama dan.Lambda-Runtime-Function-Error-TypeLambda-Runtime-Function-Error-BodyLambda memperlakukan ini sebagai respons yang berhasil dan meneruskan metadata kesalahan yang disediakan runtime kepada klien.catatan
Untuk melampirkan header trailing, runtime harus mengatur nilai
Trailerheader di awal permintaan HTTP. Ini adalah persyaratan dari spesifikasi pengko HTTP/1.1 dean transfer terpotong.-
Lambda-Runtime-Function-Error-Type- Jenis kesalahan yang ditemui runtime. Header ini terdiri dari nilai string. Lambda menerima string apa pun, tetapi kami merekomendasikan format.<category.reason>Misalnya,Runtime.APIKeyNotFound. -
Lambda-Runtime-Function-Error-Body- Base64-encoded informasi tentang kesalahan.
-
Membangun runtime khusus untuk Instans Terkelola Lambda
Instans Terkelola Lambda menggunakan API runtime yang sama dengan fungsi Lambda (default). Namun, ada perbedaan utama dalam bagaimana runtime khusus harus diimplementasikan untuk mendukung model eksekusi bersamaan dari Instans Terkelola.
Penanganan permintaan bersamaan
Perbedaan utama saat membuat runtime khusus untuk Instans Terkelola adalah dukungan untuk pemanggilan bersamaan. Tidak seperti fungsi Lambda (default) di mana runtime memproses satu pemanggilan pada satu waktu, Instans Terkelola dapat memproses beberapa pemanggilan secara bersamaan dalam satu lingkungan eksekusi.
Runtime kustom Anda harus:
-
Mendukung
/nextpermintaan bersamaan - Runtime dapat membuat beberapa panggilan simultan ke API pemanggilan berikutnya, hingga batas yang ditentukan oleh variabelAWS_LAMBDA_MAX_CONCURRENCYlingkungan. -
Menangani
/responsepermintaan bersamaan — Beberapa pemanggilan dapat memanggil API respons pemang gilan secara bersamaan. -
Menerapkan penanganan permintaan yang aman dari utas — Pastikan bahwa pemanggilan bersamaan tidak saling mengganggu dengan mengelola sumber daya dan status bersama dengan benar.
-
Gunakan ID permintaan unik — Lacak setiap pemanggilan secara terpisah menggunakan
Lambda-Runtime-Aws-Request-Idheader untuk mencocokkan tanggapan dengan permintaan yang sesuai.
Pola implementasi
Pola implementasi tipikal untuk runtime Instans Terkelola melibatkan pembuatan utas atau proses pekerja untuk menangani pemanggilan bersamaan:
-
Baca batas konkurensi — Pada inisialisasi, baca variabel
AWS_LAMBDA_MAX_CONCURRENCYlingkungan untuk menentukan berapa banyak pemanggilan bersamaan yang akan didukung. -
Buat kumpulan pekerja — Menginisialisasi kumpulan pekerja (thread, proses, atau tugas asinkron) sama dengan batas konkurensi.
-
Lingkaran pemrosesan pekerja - Setiap pekerja secara mandiri:
Panggilan
/runtime/invocation/nextuntuk mendapatkan acara pemanggilanMemanggil handler fungsi dengan data peristiwa
Memposting tanggapan ke
/runtime/invocation/AwsRequestId/responseMengulangi loop
Pertimbangan tambahan
-
Format logging — Instans Terkelola hanya mendukung format log JSON. Pastikan runtime Anda menghormati variabel
AWS_LAMBDA_LOG_FORMATlingkungan dan hanya menggunakan format JSON. Untuk informasi selengkapnya, lihat Mengkonfigurasi JSON dan format log teks biasa. -
Sumber daya bersama — Berhati-hatilah saat menggunakan sumber daya bersama seperti
/tmpdirektori dengan pemanggilan bersamaan. Menerapkan mekanisme penguncian yang tepat untuk mencegah kondisi balapan.
Untuk informasi selengkapnya tentang lingkungan eksekusi Instans Terkelola Lambda, lihatMemahami lingkungan eksekusi Instans Terkelola Lambda.