Utilizzo dei livelli per le funzioni Lambda Node.js
Usa i livelli Lambda per impacchettare codice e dipendenze che desideri riutilizzare in più funzioni. I livelli di solito contengono dipendenze dalla libreria, un runtime personalizzato o file di configurazione. La creazione di un livello prevede tre passaggi generali:
-
Crea un pacchetto per il contenuto del livello. Ciò significa creare un archivio di file con estensione .zip che contiene le dipendenze che desideri utilizzare nelle funzioni.
-
Crea il livello in Lambda.
-
Aggiungi il livello alle tue funzioni.
Argomenti
Crea un pacchetto per il contenuto del livello
Per creare un livello, raggruppa i pacchetti in un archivio di file con estensione zip che soddisfi i seguenti requisiti:
-
Crea il livello utilizzando la stessa versione di Node.js che intendi utilizzare per la funzione Lambda. Ad esempio, se create il layer utilizzando Node.js 22, utilizzate il runtime Node.js 22 per la vostra funzione.
-
Il file.zip del livello deve utilizzare una di queste strutture di directory:
-
nodejs/node_modules -
nodejs/node(doveX/node_modulesXè la versione di Node.js, ad esempionode22)
Per ulteriori informazioni, consulta Percorsi dei livelli per ciascun runtime Lambda.
-
-
I pacchetti del livello devono essere compatibili con Linux. Le funzioni Lambda vengono eseguite su Amazon Linux.
È possibile creare livelli che contengono librerie Node.js di terze parti installate con npm (come axios olodash) o moduli JavaScript personalizzati.
Per creare un livello utilizzando i pacchetti npm
-
Crea la struttura di directory richiesta e installa i pacchetti direttamente al suo interno:
mkdir -p nodejs npm install --prefix nodejs lodash axiosQuesto comando installa i pacchetti direttamente nella
nodejs/node_modulesdirectory, che è la struttura richiesta da Lambda.Nota
Per i pacchetti con dipendenze native o componenti binari (come sharp o bcrypt), assicurati che siano compatibili con l'ambiente Lambda Linux e l'architettura della tua funzione. Potrebbe essere necessario utilizzare la
--platformbandiera:npm install --prefix nodejs --platform=linux --arch=x64 sharpPer dipendenze native più complesse, potrebbe essere necessario compilarle in un ambiente Linux che corrisponda al runtime Lambda. Consente di utilizzare Docker per questo scopo.
-
Comprimi il contenuto dei livelli:
L'aspetto della struttura di directory dovrebbe essere simile al seguente:
nodejs/ ├── package.json ├── package-lock.json └── node_modules/ ├── lodash/ ├── axios/ └── (dependencies of the other packages)Nota
Assicurati che il tuo file.zip includa la
nodejsdirectory a livello principale alnode_modulessuo interno. Questa struttura garantisce che Lambda possa localizzare e importare i pacchi.-
package-lock.jsonI filepackage.jsonand nellanodejs/directory vengono utilizzati da npm per la gestione delle dipendenze ma non sono richiesti da Lambda per la funzionalità dei livelli. Ogni pacchetto installato contiene già il propriopackage.jsonfile che definisce il modo in cui Lambda importa il pacchetto.
Per creare un livello utilizzando il tuo codice
-
Crea la struttura di directory richiesta per il tuo livello:
mkdir -p nodejs/node_modules/validator cd nodejs/node_modules/validator -
Crea un
package.jsonfile per il tuo modulo personalizzato per definire come deve essere importato:Esempio nodejs/node_modules/validator/package.json
{ "name": "validator", "version": "1.0.0", "type": "module", "main": "index.mjs" } -
Crea il tuo file del modulo JavaScript:
Esempio 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) }; } -
Comprimi il contenuto dei livelli:
L'aspetto della struttura di directory dovrebbe essere simile al seguente:
nodejs/ └── node_modules/ └── validator/ ├── package.json └── index.mjs -
Nella tua funzione, importa e usa i moduli. Esempio:
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' }); } };È possibile utilizzare i seguenti dati evento per invocare la funzione:
{ "body": "{\"productId\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }Risposta prevista:
{ "statusCode": 200, "body": "{\"message\":\"Order validated successfully\",\"order\":{\"productId\":\"ABC123\",\"quantity\":2,\"shippingPriority\":\"express\"}}" }
Crea il livello in Lambda.
È possibile creare la funzione Lambda mediante la AWS CLI o la console Lambda.
Aggiungi il livello alla tua funzione.
app di esempio
Per altri esempi di utilizzo dei layer Lambda, consulta l'applicazione di esempio layer-nodejs