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à.
Compilazione di funzioni Lambda con Node.js
È possibile eseguire il JavaScript codice con Node.js in AWS Lambda. Lambda fornisce Runtime per Node.js che eseguono il tuo codice per elaborare gli eventi. Il codice viene eseguito in un ambiente che include AWS SDK for JavaScript, con le credenziali di un ruolo AWS Identity and Access Management (IAM) che gestisci. Per ulteriori informazioni sulle SDK versioni incluse nei runtime di Node.js, consultate. Versioni incluse in Runtime SDK
Lambda supporta i seguenti runtime di Node.js.
Nome | Identificatore | Sistema operativo | Data di ritiro | Blocco creazione funzioni | Blocco aggiornamento funzioni |
---|---|---|---|---|---|
Node.js 20 |
|
Amazon Linux 2023 |
Non pianificato |
Non programmato |
Non programmato |
Node.js 18 |
|
Amazon Linux 2 |
31 luglio 2025 |
1 settembre 2025 |
1 ottobre 2025 |
Nota
I runtime di Node.js 18 e versioni successive vengono utilizzati AWS SDK per la versione 3. JavaScript Per migrare una funzione da un runtime precedente, segui il workshop sulla migrazione
Per creare una funzione Node.js.
-
Aprire la console Lambda
. -
Scegli Crea funzione.
-
Configurare le impostazioni seguenti:
-
Nome della funzione: inserisci il nome della funzione.
-
Runtime: scegli Node.js 20.x.
-
-
Scegli Crea funzione.
-
Per configurare un evento di test scegliere Test.
-
Per Event name (Nome evento) immettere
test
. -
Scegli Save changes (Salva modifiche).
-
Per invocare la funzione, scegliere Test (Testa).
La console crea una funzione Lambda con un singolo file di origine denominato index.js
o index.mjs
. È possibile modificare questo file e aggiungere altri file nell'editor di codice predefinito. Per salvare le modifiche, scegliere Save (Salva). Quindi, per eseguire il codice, scegliere Test (Testa).
Il file index.js
o index.mjs
esporta una funzione denominata handler
che richiede un oggetto evento e un oggetto contesto. Questa è la funzione del gestore chiamata da Lambda quando la funzione viene richiamata. Il runtime della funzione Node.js riceve gli eventi di chiamata da Lambda e li passa al gestore. Nella configurazione della funzione il valore del gestore è index.handler
.
Quando si salva il codice funzione, la console Lambda crea un pacchetto di implementazione dell'archivio di file .zip. Quando sviluppi il codice della funzione all'esterno della console (utilizzando unIDE), devi creare un pacchetto di distribuzione per caricare il codice nella funzione Lambda.
Il runtime della funzione passa un oggetto contesto al gestore, oltre all'evento di chiamata. L'oggetto contesto contiene ulteriori informazioni sulla chiamata, sulla funzione e sull'ambiente di esecuzione. Altre informazioni sono disponibili con le variabili di ambiente.
La funzione Lambda include un gruppo di CloudWatch log Logs. Il runtime della funzione invia i dettagli su ogni chiamata a Logs. CloudWatch Si trasmette qualsiasi log che la tua funzione emette durante la chiamata. Se la funzione restituisce un errore, Lambda formatta l'errore e lo restituisce al chiamante.
Argomenti
- Inizializzazione di Node.js
- Versioni incluse in Runtime SDK
- Utilizzo di keep-alive per le connessioni TCP
- Caricamento di certificati CA
- Definire il gestore della funzione Lambda in Node.js
- Distribuisci funzioni Lambda in Node.js con archivi di file .zip
- Distribuisci funzioni Lambda in Node.js con immagini di container
- Utilizzo dei livelli per le funzioni Lambda di Node.js
- Utilizzo dell'oggetto contesto Lambda per recuperare le informazioni sulla funzione Node.js
- Registra e monitora le funzioni Lambda di Node.js
- Strumentazione del codice Node.js in AWS Lambda
Inizializzazione di Node.js
Node.js ha un modello di ciclo di eventi univoco che fa sì che il suo comportamento di inizializzazione sia diverso dagli altri tempi di esecuzione. In particolare, Node.js utilizza un modello di I/O senza blocchi che supporta operazioni asincrone. Questo modello consente a Node.js di funzionare in modo efficiente per la maggior parte dei carichi di lavoro. Ad esempio, se una funzione Node.js effettua una chiamata di rete, tale richiesta può essere designata come operazione asincrona e inserita in una coda di callback. La funzione può continuare a elaborare altre operazioni all'interno dello stack di chiamate principale senza essere bloccata in attesa che la chiamata di rete sia restituita. Una volta completata la chiamata di rete, viene eseguita la richiamata e quindi rimossa dalla coda di richiamata.
Alcune attività di inizializzazione possono essere eseguite in modo asincrono. L'esecuzione di queste attività asincrone potrebbe non essere completata prima di una chiamata. Ad esempio, il codice che effettua una chiamata di rete per recuperare un AWS parametro da Parameter Store potrebbe non essere completo nel momento in cui Lambda esegue la funzione di gestione. Di conseguenza, la variabile potrebbe essere null durante una chiamata. Per evitare ciò, assicurati che le variabili e altri codici asincroni siano completamente inizializzati prima di continuare con il resto della logica di business principale della funzione.
In alternativa, è possibile impostare il codice funzione come modulo ES, consentendo di utilizzare await
al primo livello del file, al di fuori dell'ambito del gestore di funzioni. Quando await
ogni Promise
, il codice di inizializzazione asincrono viene completato prima delle chiamate del gestore, massimizzando l'efficacia della simultaneità con provisioning nella riduzione della latenza di avvio a freddo. Per ulteriori informazioni e un esempio, consulta Utilizzo di moduli ES Node.js e attesa di primo livello in AWS Lambda
Impostazione di un gestore di funzioni come modulo ES
Per impostazione predefinita, Lambda tratta i file con il suffisso .js
come moduli CommonJS. Facoltativamente, puoi designare il tuo codice come modulo ES. Ciò è possibile in due modi: specificando il type
come module
nel file package.json
della funzione o utilizzando l'estensione del nome file .mjs
. Nel primo scenario, il codice funzione tratta tutti i file .js
come moduli ES, mentre nel secondo scenario solo il file specificato con .mjs
è un modulo ES. È possibile combinare moduli ES e moduli CommonJS chiamandoli rispettivamente .mjs
e .cjs
, poiché i file .mjs
sono sempre moduli ES e i file .cjs
sono sempre moduli CommonJS.
Lambda cerca le cartelle nella variabile di NODE_PATH
ambiente durante il caricamento dei moduli ES. Puoi caricare AWS SDK ciò che è incluso nel runtime utilizzando le istruzioni del modulo import
ES. È inoltre possibile caricare i moduli ES dai livelli.
Versioni incluse in Runtime SDK
La versione AWS SDK inclusa nel runtime di Node.js dipende dalla versione di runtime e dalla tua. Regione AWS Per trovare la versione SDK inclusa nel runtime che stai utilizzando, crea una funzione Lambda con il codice seguente.
Nota
Il codice di esempio riportato di seguito per le versioni 18 e successive di Node.js utilizza il formato CommonJS. Se crei la funzione nella console Lambda, assicurati di rinominare il file contenente il codice in. index.js
Esempio Node.js 18 e versioni successive
const { version } = require("@aws-sdk/client-s3/package.json"); exports.handler = async () => ({ version });
Ciò restituisce una risposta nel seguente formato:
{ "version": "3.462.0" }
Utilizzo di keep-alive per le connessioni TCP
L'HTTPSagente Node.jsHTTP/predefinito crea una nuova TCP connessione per ogni nuova richiesta. Per evitare il costo di stabilire nuove connessioni, puoi keepAlive: true
riutilizzare le connessioni che la tua funzione effettua utilizzando AWS SDK for JavaScript. Keep-alive può ridurre i tempi di richiesta per le funzioni Lambda che effettuano più API chiamate utilizzando. SDK
In AWS SDK for JavaScript 3.x, incluso nei runtime Lambda nodejs18.x
e successivi, keep-alive è abilitato per impostazione predefinita. Per disabilitare keep-alive, consulta Riutilizzo delle connessioni con keep-alive in Node.js nella Guida per sviluppatori per 3.x.AWS SDK JavaScript Per ulteriori informazioni sull'uso di keep-alive, vedi HTTPkeep-alive è attivo di default in modular o nel blog Developer Tools
Caricamento di certificati CA
Per le versioni di runtime di Node.js fino a Node.js 18, Lambda carica automaticamente i certificati CA (autorità di certificazione) specifici di Amazon per semplificare la creazione di funzioni che interagiscono con altri servizi. AWS Ad esempio, Lambda include RDS i certificati Amazon necessari per convalidare il certificato di identità del server installato sul tuo database Amazon. RDS Questo comportamento può avere un impatto sulle prestazioni durante gli avvii a freddo.
A partire da Node.js 20, Lambda non carica più certificati CA aggiuntivi per impostazione predefinita. Il runtime Node.js 20 contiene un file di certificato con tutti i certificati Amazon CA nella posizione /var/runtime/ca-cert.pem
. Per ripristinare lo stesso comportamento da Node.js 18 e runtime precedenti, imposta la variabile di ambiente NODE_EXTRA_CA_CERTS
su /var/runtime/ca-cert.pem
.
Per prestazioni ottimali, consigliamo di raggruppare nel pacchetto di implementazione solo i certificati necessari e di caricarli tramite la variabile di ambiente NODE_EXTRA_CA_CERTS
. Il file dei certificati deve essere composto da uno o più certificati CA root o intermedi affidabili in formato. PEM Ad esempio, forRDS, includi i certificati richiesti insieme al codice ascertificates/rds.pem
. Quindi, carica i certificati impostando NODE_EXTRA_CA_CERTS
su /var/task/certificates/rds.pem
.