Compilazione di funzioni Lambda con Node.js - AWS Lambda

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

nodejs20.x

Amazon Linux 2023

Non pianificato

Non programmato

Non programmato

Node.js 18

nodejs18.x

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 su. GitHub Per ulteriori informazioni sulla AWS SDK JavaScript versione 3, consulta il post sul blog Modular AWS SDK for JavaScript è ora generalmente disponibile.

Per creare una funzione Node.js.
  1. Aprire la console Lambda.

  2. Scegli Crea funzione.

  3. Configurare le impostazioni seguenti:

    • Nome della funzione: inserisci il nome della funzione.

    • Runtime: scegli Node.js 20.x.

  4. Scegli Crea funzione.

  5. Per configurare un evento di test scegliere Test.

  6. Per Event name (Nome evento) immettere test.

  7. Scegli Save changes (Salva modifiche).

  8. 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.

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 .mjssono 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. AWS SDK JavaScript AWS

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.