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
Un livello Lambda è un archivio di file .zip che può contenere codice o dati aggiuntivi. 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.
Questo argomento contiene passaggi e indicazioni su come creare un pacchetto e un livello Lambda per Node.js con dipendenze di librerie esterne.
Argomenti
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
Node.js 20
e il gestore di pacchetti npm . Per ulteriori informazioni sull'installazione di Node.js, consulta Installazione di Node.js tramite il gestore di pacchetti nella documentazione di Node.js.
In questo argomento, facciamo riferimento all'applicazione di esempio layer-nodejs nel repository
L'applicazione layer-nodejs
di esempio impacchetterà la libreria lodashlayer
contiene gli script per generare il livello. La directory function
contiene una funzione di esempio per verificare il funzionamento del livello. Questo documento spiega come creare, impacchettare, implementare e testare questo livello.
Compatibilità dei livelli Node.js con l'ambiente di runtime Lambda
Quando si impacchetta il codice in un livello Node.js, si specificano gli ambienti di runtime Lambda con cui il codice è compatibile. Per valutare la compatibilità del codice con un runtime, considerate le versioni di Node.js, i sistemi operativi e le architetture di set di istruzioni per cui è progettato il codice.
I runtime Lambda Node.js specificano la versione Node.js e il sistema operativo. In questo documento, utilizzerai il runtime Node.js 20, basato su AL2023. Per ulteriori informazioni sulle versioni di runtime, consulta Runtime supportati. Quando crei una funzione Lambda, puoi specificare l'architettura del set di istruzioni. In questo documento, utilizzerai l'architettura arm64
. Per ulteriori informazioni sulle architetture in Lambda, consulta Selezione e configurazione di un'architettura di set di istruzioni per la funzione Lambda.
Quando si utilizza il codice fornito in un pacchetto, ogni manutentore del pacchetto definisce in modo indipendente la propria compatibilità. La maggior parte dello sviluppo di Node.js è progettato per funzionare indipendentemente dal sistema operativo e dall'architettura del set di istruzioni. Inoltre, l'interruzione delle incompatibilità con le nuove versioni di Node.js non è così comune. Aspettati di dedicare più tempo alla valutazione della compatibilità tra i pacchetti che alla valutazione della compatibilità dei pacchetti con la versione di Node.js, il sistema operativo o l'architettura del set di istruzioni.
A volte i pacchetti Node.js includono codice compilato, che richiede di considerare la compatibilità del sistema operativo e dell'architettura del set di istruzioni. Se è necessario valutare la compatibilità del codice per i pacchetti, sarà necessario esaminare i pacchetti e la relativa documentazione. I pacchetti in NPM possono specificare la loro compatibilità tramite i campi engines
, os
e cpu
del loro file manifesto package.json
. Per ulteriori informazioni sui file package.json
, consulta package.json
Percorsi dei livelli per i runtime Node.js
Quando si aggiunge un livello a una funzione, Lambda carica il contenuto del livello nell'ambiente di esecuzione. Se il livello impacchetta le dipendenze in percorsi di cartelle specifici, l'ambiente di esecuzione Node.js riconoscerà i moduli e sarà possibile fare riferimento ai moduli dal codice della funzione.
Per garantire che i moduli vengano raccolti, impacchettali nel file layer.zip in uno dei seguenti percorsi di cartella. Questi file vengono archiviati in /opt
e i percorsi delle cartelle vengono caricati nella variabile di ambiente PATH
.
nodejs/node_modules
nodejs/node
X
/node_modules
Ad esempio, il file .zip del livello risultante creato in questo tutorial ha la seguente struttura di directory:
layer_content.zip
└ nodejs
└ node20
└ node_modules
└ lodash
└ <other potential dependencies>
└ ...
Inserisci la libreria lodash
nodejs/node20/node_modules
. Ciò garantisce che Lambda possa localizzare la libreria durante l'invocazione delle funzioni.
Impacchettamento del contenuto dei livelli
In questo esempio, impacchetti la libreria lodash
in un file .zip di livelli. Per installare e creare il pacchetto del contenuto del livello, completa i seguenti passaggi.
Per installare e creare il pacchetto del contenuto dei livelli
-
Clona il repository aws-lambda-developer-guide
da GitHub, che contiene il codice di esempio di cui hai bisogno nella directory sample-apps/layer-nodejs
.git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
-
Passa alla directory
layer
dell'app di esempiolayer-nodejs
. Questa directory contiene gli script che usi per creare e impacchettare correttamente il livello.cd aws-lambda-developer-guide/sample-apps/layer-nodejs/layer
-
Assicurati che il file
package.json
riportilodash
. Questo file definisce le dipendenze da includere nel livello. È possibile aggiornare questo file per includere tutte le dipendenze che si desidera nel livello.Nota
I dati
package.json
utilizzati in questo passaggio non vengono archiviati o utilizzati con le dipendenze dopo il caricamento su un livello Lambda. Viene utilizzato solo nel processo di impacchettamento dei livelli e non specifica un comando di esecuzione e la compatibilità come farebbe il file in un'applicazione Node.js o in un pacchetto pubblicato. -
Assicurati di disporre dell'autorizzazione shell per eseguire gli script nella directory
layer
.chmod 744 1-install.sh && chmod 744 2-package.sh
-
Esegui lo script 1-install.sh
utilizzando il seguente comando: ./1-install.sh
Questo script esegue
npm install
, che leggepackage.json
e scarica le dipendenze definite al suo interno.Esempio 1-install.sh
npm install .
-
Esegui lo script 2-package.sh
utilizzando il seguente comando: ./2-package.sh
Questo script copia il contenuto della directory
node_modules
in una nuova directory denominatanodejs/node20
. Comprime quindi il contenuto della directorynodejs
in un file denominatolayer_content.zip
. Questo è il file con estensione .zip per il livello. È possibile decomprimere il file e verificare che contenga la struttura di file corretta, come mostrato nella sezione Percorsi dei livelli per i runtime Node.js.Esempio 2-package.sh
mkdir -p nodejs/node20 cp -r node_modules nodejs/node20/ zip -r layer_content.zip nodejs
Creazione del livello
Prendi il file layer_content.zip
che hai generato nella sezione precedente e caricalo come livello Lambda. È possibile caricare un livello utilizzando la AWS Management Console o l'API Lambda tramite la AWS Command Line Interface (AWS CLI). Quando carichi il file .zip dei livelli, nel seguente comando AWS CLIPublishLayerVersion, specifica nodejs20.x
come runtime compatibile e arm64
come architettura compatibile.
aws lambda publish-layer-version --layer-name nodejs-lodash-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes nodejs20.x \ --compatible-architectures "arm64"
Dalla risposta, nota LayerVersionArn
, che assomiglia a arn:aws:lambda:us-east-1:
. Avrai bisogno di questo nome della risorsa Amazon (ARN) nel passaggio successivo di questo tutorial, quando aggiungerai il livello alla tua funzione.123456789012
:layer:nodejs-lodash-layer:1
Aggiunta del livello alla tua funzione
Implementa una funzione Lambda di esempio che utilizza la libreria lodash
nel suo codice funzione, quindi collega il livello che hai creato. Per implementare la funzione, è necessario un ruolo di esecuzione. Per ulteriori informazioni, consulta Definizione delle autorizzazioni della funzione Lambda con un ruolo di esecuzione. Se non disponi ancora di un ruolo di esecuzione, completa i passaggi nella sezione comprimibile. Altrimenti, passa alla sezione successiva per implementare la funzione.
Per creare un ruolo di esecuzione
-
Apri la pagina Ruoli
nella console IAM. -
Scegliere Create role (Crea ruolo).
-
Creare un ruolo con le seguenti proprietà.
-
Trusted entity (Entità attendibile – Lambda
-
Permissions (Autorizzazioni) – AWSLambdaBasicExecutionRole.
-
Role name (Nome ruolo) –
lambda-role
.
La policy AWSLambdaBasicExecutionRole dispone delle autorizzazioni delle quali la funzione necessita per scrivere i log in CloudWatch Logs.
-
Il codice della funzione_.findLastIndex
lodash per leggere una serie di oggetti. Confronta gli oggetti con un criterio per trovare l'indice di una corrispondenza. Quindi, restituisce l'indice e il valore dell'oggetto nella risposta Lambda.
import _ from "lodash" export const handler = async (event) => { var users = [ { 'user': 'Carlos', 'active': true }, { 'user': 'Gil-dong', 'active': false }, { 'user': 'Pat', 'active': false } ]; let out = _.findLastIndex(users, function(o) { return o.user == 'Pat'; }); const response = { statusCode: 200, body: JSON.stringify(out + ", " + users[out].user), }; return response; };
Per implementare la funzione Lambda
-
Passa alla directory
function/
. Se ti trovi attualmente nella directorylayer/
, esegui il seguente comando:cd ../function-js
-
Crea un pacchetto di implementazione di file .zip utilizzando il seguente comando:
zip my_deployment_package.zip index.mjs
-
Implementare la funzione. Nel comando AWS CLI seguente, sostituisci il parametro
--role
con l'ARN del tuo ruolo di esecuzione:aws lambda create-function --function-name nodejs_function_with_layer \ --runtime nodejs20.x \ --architectures "arm64" \ --handler index.handler \ --role
arn:aws:iam::123456789012:role/lambda-role
\ --zip-file fileb://my_deployment_package.zip -
Collega il livello alla tua funzione. Nel comando AWS CLI seguente, sostituisci il parametro
--layers
con l'ARN della versione del livello notato in precedenza:aws lambda update-function-configuration --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "
arn:aws:lambda:us-east-1:123456789012:layer:nodejs-lodash-layer:1
" -
Richiama la funzione per verificarne il funzionamento utilizzando il seguente comando AWS CLI:
aws lambda invoke --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{}' response.json
L'output visualizzato dovrebbe essere di questo tipo:
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }
Il file
response.json
di output contiene dettagli sulla risposta.
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando le risorse AWS che non si utilizzano più, è possibile evitare addebiti superflui sul proprio account Account AWS.
Per eliminare il livello Lambda
-
Apri la pagina Layers
(Livelli) nella console Lambda. -
Seleziona il livello che hai creato.
-
Seleziona Elimina, quindi scegli di nuovo Elimina.
Per eliminare la funzione Lambda
-
Aprire la pagina Functions (Funzioni)
della console Lambda. -
Selezionare la funzione creata.
-
Scegliere Operazioni, Elimina.
-
Digita
delete
nel campo di immissione testo e scegli Delete (Elimina).