Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan lapisan untuk fungsi Lambda Node.js
Gunakan lapisan Lambda untuk mengemas kode dan dependensi yang ingin Anda gunakan kembali di beberapa fungsi. Lapisan biasanya berisi dependensi pustaka, runtime kustom, atau file konfigurasi. Membuat layer melibatkan tiga langkah umum:
-
Package konten layer Anda. Ini berarti membuat arsip file.zip yang berisi dependensi yang ingin Anda gunakan dalam fungsi Anda.
-
Buat layer di Lambda.
-
Tambahkan layer ke fungsi Anda.
Package konten layer Anda
Untuk membuat layer, bundel paket Anda ke dalam arsip file.zip yang memenuhi persyaratan berikut:
-
Bangun layer menggunakan versi Node.js yang sama yang Anda rencanakan untuk digunakan untuk fungsi Lambda. Misalnya, jika Anda membangun layer Anda menggunakan Node.js 22, gunakan runtime Node.js 22 untuk fungsi Anda.
-
File.zip layer Anda harus menggunakan salah satu struktur direktori ini:
-
nodejs/node_modules
-
nodejs/node
(diX
/node_modulesX
mana versi Node.js Anda, misalnyanode22
)
Untuk informasi selengkapnya, lihat Jalur lapisan untuk setiap runtime Lambda.
-
-
Paket di lapisan Anda harus kompatibel dengan Linux. Fungsi Lambda berjalan di Amazon Linux.
Anda dapat membuat lapisan yang berisi pustaka Node.js pihak ketiga yang diinstal dengan npm
(seperti axios
ataulodash
) atau JavaScript modul Anda sendiri.
Untuk membuat layer menggunakan paket npm
-
Buat struktur direktori yang diperlukan dan instal paket langsung ke dalamnya:
mkdir -p nodejs npm install --prefix nodejs lodash axios
Perintah ini menginstal paket langsung ke
nodejs/node_modules
direktori, yang merupakan struktur yang dibutuhkan Lambda.catatan
Untuk paket dengan dependensi asli atau komponen biner (seperti sharp atau bcrypt), pastikan bahwa mereka kompatibel dengan lingkungan Linux Lambda dan arsitektur fungsi Anda. Anda mungkin perlu menggunakan
--platform
bendera:npm install --prefix nodejs --platform=linux --arch=x64 sharp
Untuk dependensi asli yang lebih kompleks, Anda mungkin perlu mengompilasinya di lingkungan Linux yang cocok dengan runtime Lambda. Anda dapat menggunakan Docker untuk tujuan ini.
-
Zip konten lapisan:
Struktur direktori file.zip Anda akan terlihat seperti ini:
nodejs/ ├── package.json ├── package-lock.json └── node_modules/ ├── lodash/ ├── axios/ └── (dependencies of the other packages)
catatan
Pastikan file.zip Anda menyertakan
nodejs
direktori di tingkat root dengannode_modules
di dalamnya. Struktur ini memastikan bahwa Lambda dapat menemukan dan mengimpor paket Anda.-
package-lock.json
Filepackage.json
dan dalamnodejs/
direktori digunakan oleh npm untuk manajemen ketergantungan tetapi tidak diperlukan oleh Lambda untuk fungsionalitas lapisan. Setiap paket yang diinstal sudah berisipackage.json
file sendiri yang mendefinisikan bagaimana Lambda mengimpor paket.
Untuk membuat layer menggunakan kode Anda sendiri
-
Buat struktur direktori yang diperlukan untuk layer Anda:
mkdir -p nodejs/node_modules/validator cd nodejs/node_modules/validator
-
Buat
package.json
file untuk modul kustom Anda untuk menentukan bagaimana seharusnya diimpor:contoh nodejs/node_modules/validator/package.json
{ "name": "validator", "version": "1.0.0", "type": "module", "main": "index.mjs" }
-
Buat file JavaScript modul Anda:
contoh nodejs/node_modules/validator/index.mjs
export function validateOrder(orderData) { // Validates an order and returns formatted data const requiredFields = ['productId', 'quantity']; // Check required fields const missingFields = requiredFields.filter(field => !(field in orderData)); if (missingFields.length > 0) { throw new Error(`Missing required fields: ${missingFields.join(', ')}`); } // Validate quantity const quantity = orderData.quantity; if (!Number.isInteger(quantity) || quantity < 1) { throw new Error('Quantity must be a positive integer'); } // Format and return the validated data return { productId: String(orderData.productId), quantity: quantity, shippingPriority: orderData.priority || 'standard' }; } export function formatResponse(statusCode, body) { // Formats the API response return { statusCode: statusCode, body: JSON.stringify(body) }; }
-
Zip konten lapisan:
Struktur direktori file.zip Anda akan terlihat seperti ini:
nodejs/ └── node_modules/ └── validator/ ├── package.json └── index.mjs
-
Dalam fungsi Anda, impor dan gunakan modul. Contoh:
import { validateOrder, formatResponse } from 'validator'; export const handler = async (event) => { try { // Parse the order data from the event body const orderData = JSON.parse(event.body || '{}'); // Validate and format the order const validatedOrder = validateOrder(orderData); return formatResponse(200, { message: 'Order validated successfully', order: validatedOrder }); } catch (error) { if (error instanceof Error && error.message.includes('Missing required fields')) { return formatResponse(400, { error: error.message }); } return formatResponse(500, { error: 'Internal server error' }); } };
Anda dapat menggunakan peristiwa pengujian berikut untuk menjalankan fungsi:
{ "body": "{\"productId\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
Tanggapan yang diharapkan:
{ "statusCode": 200, "body": "{\"message\":\"Order validated successfully\",\"order\":{\"productId\":\"ABC123\",\"quantity\":2,\"shippingPriority\":\"express\"}}" }
Buat layer di Lambda
Anda dapat mempublikasikan layer Anda menggunakan konsol AWS CLI atau Lambda.
Tambahkan layer ke fungsi Anda
Contoh aplikasi
Untuk contoh lebih lanjut tentang cara menggunakan layer Lambda, lihat contoh aplikasi layer-nodejs