Bekerja dengan lapisan untuk fungsi Lambda Node.js - AWS Lambda

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:

  1. Package konten layer Anda. Ini berarti membuat arsip file.zip yang berisi dependensi yang ingin Anda gunakan dalam fungsi Anda.

  2. Buat layer di Lambda.

  3. 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/nodeX/node_modules(di X 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
  1. 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.

  2. Zip konten lapisan:

    Linux/macOS
    zip -r layer.zip nodejs/
    PowerShell
    Compress-Archive -Path .\nodejs -DestinationPath .\layer.zip

    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 dengan node_modules di dalamnya. Struktur ini memastikan bahwa Lambda dapat menemukan dan mengimpor paket Anda.

    • package-lock.jsonFile package.json dan dalam nodejs/ direktori digunakan oleh npm untuk manajemen ketergantungan tetapi tidak diperlukan oleh Lambda untuk fungsionalitas lapisan. Setiap paket yang diinstal sudah berisi package.json file sendiri yang mendefinisikan bagaimana Lambda mengimpor paket.

Untuk membuat layer menggunakan kode Anda sendiri
  1. Buat struktur direktori yang diperlukan untuk layer Anda:

    mkdir -p nodejs/node_modules/validator cd nodejs/node_modules/validator
  2. 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" }
  3. 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) }; }
  4. Zip konten lapisan:

    Linux/macOS
    zip -r layer.zip nodejs/
    PowerShell
    Compress-Archive -Path .\nodejs -DestinationPath .\layer.zip

    Struktur direktori file.zip Anda akan terlihat seperti ini:

    nodejs/              
    └── node_modules/
        └── validator/
            ├── package.json
            └── index.mjs
  5. 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.

AWS CLI

Jalankan publish-layer-version AWS CLI perintah untuk membuat layer Lambda:

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes nodejs22.x

Parameter runtime yang kompatibel adalah opsional. Saat ditentukan, Lambda menggunakan parameter ini untuk memfilter lapisan di konsol Lambda.

Console
Untuk membuat lapisan (konsol)
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih Buat lapisan.

  3. Pilih Unggah file.zip, lalu unggah arsip.zip yang Anda buat sebelumnya.

  4. (Opsional) Untuk runtime yang kompatibel, pilih runtime Node.js yang sesuai dengan versi Node.js yang Anda gunakan untuk membangun layer Anda.

  5. Pilih Buat.

Tambahkan layer ke fungsi Anda

AWS CLI

Untuk melampirkan layer ke fungsi Anda, jalankan update-function-configuration AWS CLI perintah. Untuk --layers parameter, gunakan lapisan ARN. ARN harus menentukan versi (misalnya,arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). Untuk informasi selengkapnya, lihat Versi lapisan dan lapisan.

aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"

cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

Console
Untuk menambahkan lapisan ke fungsi
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsinya.

  3. Gulir ke bawah ke bagian Layers, lalu pilih Add a layer.

  4. Di bawah Pilih layer, pilih Custom layers, dan kemudian pilih layer Anda.

    catatan

    Jika Anda tidak menambahkan runtime yang kompatibel saat membuat layer, layer Anda tidak akan tercantum di sini. Anda dapat menentukan lapisan ARN sebagai gantinya.

  5. Pilih Tambahkan.

Contoh aplikasi

Untuk contoh lebih lanjut tentang cara menggunakan layer Lambda, lihat contoh aplikasi layer-nodejs di repositori Panduan Pengembang. AWS Lambda GitHub Aplikasi ini mencakup lapisan yang berisi pustaka lodash. Setelah membuat layer, Anda dapat menerapkan dan memanggil fungsi yang sesuai untuk mengonfirmasi bahwa lapisan berfungsi seperti yang diharapkan.