Membangun fungsi Lambda dengan Node.js - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membangun fungsi Lambda dengan Node.js

Anda dapat menjalankan JavaScript kode dengan Node.js di AWS Lambda. Lambda menyediakan runtime untuk Node.js yang menjalankan kode Anda untuk memproses peristiwa. Kode Anda berjalan di lingkungan yang menyertakan AWS SDK for JavaScript, dengan kredensi dari peran AWS Identity and Access Management (IAM) yang Anda kelola. Untuk mempelajari lebih lanjut tentang versi SDK yang disertakan dengan runtime Node.js, lihat. Versi SDK yang disertakan Runtime

Lambda mendukung runtime Node.js berikut.

Node.js
Nama Pengidentifikasi Sistem operasi Tanggal pengusangan Buat fungsi blok Pembaruan fungsi blok

Node.js 20

nodejs20.x

Amazon Linux 2023

Node.js 18

nodejs18.x

Amazon Linux 2

Node.js 16

nodejs16.x

Amazon Linux 2

12 Jun 2024

Februari 28, 2025

31 Mar 2025

catatan

Node.js 18 dan runtime yang lebih baru menggunakan AWS SDK untuk JavaScript v3. Untuk memigrasikan fungsi dari runtime sebelumnya, ikuti lokakarya migrasi di. GitHub Untuk informasi selengkapnya tentang AWS SDK untuk JavaScript versi 3, lihat Modular AWS SDK untuk posting blog JavaScript yang sekarang tersedia secara umum.

Untuk membuat fungsi Node.js
  1. Buka Konsol Lambda.

  2. Pilih Buat fungsi.

  3. Konfigurasikan pengaturan berikut:

    • Nama fungsi: Masukkan nama untuk fungsi tersebut.

    • Runtime: Pilih Node.js 20.x.

  4. Pilih Buat fungsi.

  5. Untuk mengonfigurasi peristiwa uji, pilih Uji.

  6. Untuk Nama peristiwa, masukkan test.

  7. Pilih Simpan perubahan.

  8. Untuk mengaktifkan fungsi, pilih Uji.

Konsol membuat fungsi Lambda dengan satu file sumber bernama index.js atau. index.mjs Anda dapat mengedit file ini dan menambahkan lebih banyak file di editor kode bawaan. Untuk menyimpan perubahan Anda, pilih Simpan. Selanjutnya, untuk menjalankan kode, pilih Uji.

catatan

Konsol Lambda digunakan AWS Cloud9 untuk menyediakan lingkungan pengembangan terintegrasi di browser. Anda juga dapat menggunakan AWS Cloud9 untuk mengembangkan fungsi Lambda di lingkungan Anda sendiri. Untuk informasi selengkapnya, lihat Bekerja dengan AWS Lambda fungsi menggunakan AWS Toolkit dalam panduan AWS Cloud9 pengguna.

index.mjsFile index.js or mengekspor fungsi bernama handler yang mengambil objek acara dan objek konteks. Ini adalah fungsi handler yang dipanggil Lambda saat fungsi tersebut dipanggil. Waktu habis fungsi Node.js mendapatkan peristiwa invokasi dari Lambda dan meneruskannya ke handler. Dalam konfigurasi fungsi, nilai handler adalah index.handler.

Saat Anda menyimpan kode fungsi, konsol Lambda membuat paket penyebaran arsip file.zip. Saat Anda mengembangkan kode fungsi di luar konsol (menggunakan IDE), Anda perlu membuat paket penerapan untuk mengunggah kode Anda ke fungsi Lambda.

catatan

Untuk memulai pengembangan aplikasi di lingkungan lokal Anda, gunakan salah satu contoh aplikasi yang tersedia di GitHub repositori panduan ini.

Aplikasi sampel Lambda dalam Node.js
  • blank-nodejs - Fungsi Node.js yang menunjukkan penggunaan logging, variabel lingkungan, AWS X-Ray tracing, lapisan, pengujian unit, dan SDK. AWS

  • nodejs-apig – Fungsi dengan titik akhir API publik yang memproses peristiwa dari API Gateway dan mengembalikan respons HTTP.

  • efs-nodejs – Fungsi yang menggunakan sistem file Amazon EFS di Amazon VPC. Sampel ini mencakup VPC, sistem file, target pemasangan, dan titik akses yang dikonfigurasi untuk penggunaan dengan Lambda.

Runtime fungsi meneruskan objek konteks ke handler, selain peristiwa invokasi. Objek konteks berisi informasi tambahan tentang lingkungan invokasi, fungsi, dan eksekusi. Informasi selengkapnya tersedia dari variabel lingkungan.

Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log Log. Fungsi runtime mengirimkan detail tentang setiap pemanggilan ke Log. CloudWatch Detail tersebut menyampaikan log yang dihasilkan fungsi Anda selama invokasi. Jika fungsi mengembalikan kesalahan, Lambda memformat kesalahan dan mengembalikannya ke pemanggil.

Inisialisasi Node.js

Node.js memiliki model loop peristiwa unik yang menyebabkan perilaku inisialisasi berbeda dari runtime lainnya. Secara khusus, Node.js menggunakan model I/O non-pemblokiran yang mendukung operasi asinkron. Model ini memungkinkan Node.js bekerja secara efisien untuk sebagian besar beban kerja. Misalnya, jika fungsi Node.js membuat panggilan jaringan, permintaan tersebut dapat ditetapkan sebagai operasi asinkron dan ditempatkan ke dalam antrean panggilan balik. Fungsi ini dapat terus memproses operasi lain dalam tumpukan panggilan utama tanpa diblokir dengan menunggu panggilan jaringan kembali. Setelah panggilan jaringan selesai, callback dijalankan dan kemudian dihapus dari antrian callback.

Beberapa tugas inisialisasi dapat berjalan secara asinkron. Tugas asinkron ini tidak dijamin untuk menyelesaikan eksekusi sebelum pemanggilan. Misalnya, kode yang membuat panggilan jaringan untuk mengambil parameter dari AWS Parameter Store mungkin tidak lengkap pada saat Lambda menjalankan fungsi handler. Akibatnya, variabel mungkin nol selama pemanggilan. Untuk menghindari hal ini, pastikan bahwa variabel dan kode asinkron lainnya sepenuhnya diinisialisasi sebelum melanjutkan dengan logika bisnis inti fungsi lainnya.

Atau, Anda dapat menunjuk kode fungsi Anda sebagai modul ES, memungkinkan Anda untuk menggunakan await di tingkat atas file, di luar lingkup penangan fungsi Anda. Saat Anda melakukannya awaitPromise, kode inisialisasi asinkron selesai sebelum pemanggilan handler, memaksimalkan efektivitas konkurensi yang disediakan dalam mengurangi latensi start dingin. Untuk informasi selengkapnya dan contoh, lihat Menggunakan modul ES Node.js dan menunggu tingkat atas. AWS Lambda

Menunjuk penangan fungsi sebagai modul ES

Secara default, Lambda memperlakukan file dengan .js akhiran sebagai modul CommonJS. Secara opsional, Anda dapat menunjuk kode Anda sebagai modul ES. Anda dapat melakukan ini dengan dua cara: menentukan type as module dalam package.json file fungsi, atau dengan menggunakan ekstensi nama .mjs file. Pada pendekatan pertama, kode fungsi Anda memperlakukan semua .js file sebagai modul ES, sedangkan dalam skenario kedua, hanya file yang Anda tentukan .mjs adalah modul ES. Anda dapat mencampur modul ES dan modul CommonJS dengan menamainya .mjs dan .cjs masing-masing, karena .mjs file selalu modul ES dan .cjs file selalu modul CommonJS.

Lambda mencari folder dalam variabel NODE_PATH lingkungan saat memuat modul ES. Anda dapat memuat AWS SDK yang disertakan dalam runtime menggunakan pernyataan modul import ES. Anda juga dapat memuat modul ES dari lapisan.

Versi SDK yang disertakan Runtime

Versi AWS SDK yang disertakan dalam runtime Node.js bergantung pada versi runtime dan versi Anda. Wilayah AWS Untuk menemukan versi SDK yang disertakan dalam runtime yang Anda gunakan, buat fungsi Lambda dengan kode berikut.

catatan

Contoh kode yang ditunjukkan di bawah ini untuk Node.js versi 18 ke atas menggunakan format CommonJS. Jika Anda membuat fungsi di konsol Lambda, pastikan untuk mengganti nama file yang berisi kode menjadi. index.js

contoh Node.js 18 dan di atas
const { version } = require("@aws-sdk/client-s3/package.json"); exports.handler = async () => ({ version });

Ini mengembalikan respons dalam format berikut:

{ "version": "3.462.0" }

Menggunakan keep-alive untuk koneksi TCP

Agen HTTP/HTTPS Node.js default membuat koneksi TCP baru untuk setiap permintaan baru. Untuk menghindari biaya pembuatan koneksi baru, Anda dapat menggunakan keepAlive: true untuk menggunakan kembali koneksi yang dibuat oleh fungsi Anda menggunakan AWS SDK. JavaScript Keep-alive dapat mengurangi waktu permintaan untuk fungsi Lambda yang membuat beberapa panggilan API menggunakan SDK.

Di AWS SDK untuk JavaScript 3.x, yang disertakan dalam runtime Lambda nodejs18.x dan yang lebih baru, keep-alive diaktifkan secara default. Untuk menonaktifkan keep-alive, lihat Menggunakan kembali koneksi dengan keep-alive di Node.js di SDK for 3.x Developer Guide.AWS JavaScript Untuk informasi selengkapnya tentang penggunaan keep-alive, lihat HTTP keep-alive aktif secara default di AWS SDK modular untuk di Blog Alat Pengembang. JavaScript AWS

Pemuatan sertifikat CA

Untuk versi runtime Node.js hingga Node.js 18, Lambda secara otomatis memuat sertifikat CA (otoritas sertifikat) khusus Amazon untuk memudahkan Anda membuat fungsi yang berinteraksi dengan layanan lain. AWS Misalnya, Lambda menyertakan sertifikat Amazon RDS yang diperlukan untuk memvalidasi sertifikat identitas server yang diinstal pada database Amazon RDS Anda. Perilaku ini dapat memiliki dampak kinerja selama start dingin.

Dimulai dengan Node.js 20, Lambda tidak lagi memuat sertifikat CA tambahan secara default. Runtime Node.js 20 berisi file sertifikat dengan semua sertifikat Amazon CA terletak di/var/runtime/ca-cert.pem. Untuk memulihkan perilaku yang sama dari Node.js 18 dan runtime sebelumnya, setel variabel NODE_EXTRA_CA_CERTS lingkungan ke/var/runtime/ca-cert.pem.

Untuk kinerja yang optimal, kami sarankan untuk menggabungkan hanya sertifikat yang Anda butuhkan dengan paket penerapan Anda dan memuatnya melalui variabel NODE_EXTRA_CA_CERTS lingkungan. File sertifikat harus terdiri dari satu atau lebih root tepercaya atau sertifikat CA perantara dalam format PEM. Misalnya, untuk RDS, sertakan sertifikat yang diperlukan di samping kode Anda sebagaicertificates/rds.pem. Kemudian, muat sertifikat dengan menyetel NODE_EXTRA_CA_CERTS ke/var/task/certificates/rds.pem.