Membangun runtime khusus untuk AWS Lambda - AWS Lambda

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 menerapkan 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 runtime khusus OS (keluarga runtime). provided

catatan

Membuat runtime kustom adalah kasus penggunaan lanjutan. Jika Anda mencari informasi tentang kompilasi ke biner asli atau menggunakan off-the-shelf runtime pihak ketiga, lihat. Kapan menggunakan runtime khusus OS Lambda

Untuk panduan tentang proses penerapan runtime kustom, lihat. Tutorial: Membangun runtime khusus Anda juga dapat menjelajahi runtime khusus yang diterapkan di C++ di aws-lambda-cppawslabs/ on. GitHub

Persyaratan

Runtime kustom harus menyelesaikan tugas inisialisasi dan pemrosesan tertentu. Runtime menjalankan kode penyiapan 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 intitialisasi

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 file.method, dengan file adalah nama file tanpa ekstensi, dan method merupakan 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.

  • Sebakan header pelacakan – Dapatkan header pelacakan X-Ray dari header Lambda-Runtime-Trace-Id di respons API. Tetapkan variabel lingkungan _X_AMZN_TRACE_ID secara lokal dengan nilai yang sama. X-Ray SDK menggunakan nilai ini untuk menghubungkan data pelacakan di antara 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 penyebaran 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 bernama. runtime.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, titik akhir response dan error titik akhir memiliki perilaku yang sedikit dimodifikasi yang memungkinkan runtime mengalirkan sebagian respons ke klien dan mengembalikan muatan dalam potongan. Untuk informasi selengkapnya tentang perilaku tertentu, lihat berikut ini:

  • /runtime/invocation/AwsRequestId/response— Menyebarkan Content-Type header dari runtime untuk dikirim ke klien. Lambda mengembalikan payload respons dalam potongan melalui HTTP/1.1 chunked transfer encoding. Stream respons dapat berukuran maksimum 20 MiB. Untuk melakukan streaming respons ke Lambda, runtime harus:

    • Atur header Lambda-Runtime-Function-Response-Mode HTTP kestreaming.

    • Atur header Transfer-Encoding ke chunked.

    • Tulis respons yang sesuai dengan spesifikasi pengkodean transfer chunked HTTP/1.1.

    • 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 menerima header. Transfer-Encoding Titik akhir ini hanya dapat dipanggil sebelum runtime mulai mengirimkan 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-Type Lambda-Runtime-Function-Error-Body Lambda memperlakukan ini sebagai respons yang berhasil dan meneruskan metadata kesalahan yang disediakan runtime kepada klien.

    catatan

    Untuk melampirkan header tambahan, runtime harus menetapkan nilai Trailer header di awal permintaan HTTP. Ini adalah persyaratan dari spesifikasi pengkodean transfer chunked HTTP/1.1.

    • Lambda-Runtime-Function-Error-Type— Jenis kesalahan yang ditemui runtime. Header ini terdiri dari nilai string. <category.reason>Lambda menerima string apa pun, tetapi kami merekomendasikan format. Misalnya, Runtime.APIKeyNotFound.

    • Lambda-Runtime-Function-Error-Body— Informasi yang dikodekan Base64 tentang kesalahan.