Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
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 layer, raggruppa i pacchetti in un archivio di file.zip che soddisfi i seguenti requisiti:
-
Create il layer utilizzando la stessa versione di Node.js che intendete 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
(X
/node_modulesX
dov'è 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.
-
Se il tuo layer include file binari o eseguibili nativi, devono avere come target la stessa architettura (x86_64 o arm64) della tua funzione.
È possibile creare livelli che contengono librerie Node.js di terze parti installate con npm
(come axios
olodash
) o moduli personalizzati. JavaScript
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 axios
Questo comando installa i pacchetti direttamente nella
nodejs/node_modules
directory, 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 il flag:
--platform
npm install --prefix nodejs --platform=linux --arch=x64 sharp
Per dipendenze native più complesse, potrebbe essere necessario compilarle in un ambiente Linux che corrisponda al runtime Lambda. Puoi usare Docker per questo scopo.
-
Comprimi il contenuto del livello:
La struttura delle cartelle del file.zip dovrebbe essere simile alla seguente:
nodejs/ └── node_modules/ ├── lodash/ ├── axios/ └── (dependencies of the other packages)
Nota
Assicurati che il tuo file.zip includa la
nodejs
directory a livello principale alnode_modules
suo interno. Questa struttura assicura che Lambda possa localizzare e importare i tuoi pacchetti.
Per creare un livello utilizzando il proprio codice
-
Crea la struttura di directory richiesta per il tuo livello:
mkdir -p nodejs/node_modules/validator
-
Crea un
package.json
file per il tuo modulo personalizzato per definire come deve essere importato:Esempio pacchetto.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 del livello:
La struttura delle cartelle del file.zip dovrebbe essere simile alla 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 il seguente evento di test per richiamare 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 layer in Lambda
È possibile pubblicare il layer utilizzando la console AWS CLI o la console Lambda.
Aggiungete il layer alla vostra funzione
App di esempio
Per altri esempi di utilizzo dei layer Lambda, consulta l'applicazione di esempio layer-nodejs