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

Puoi 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) gestito dall'utente. Per ulteriori informazioni sulle versioni SDK incluse nei runtime di Node.js, consulta. Versioni SDK incluse in Runtime

Lambda supporta i seguenti runtime di Node.js.

Node.js
Nome Identificatore Sistema operativo Data di ritiro Blocco creazione funzioni Blocco aggiornamento funzioni

Node.js 20

nodejs20.x

Amazon Linux 2023

Node.js 18

nodejs18.x

Amazon Linux 2

Node.js 16

nodejs16.x

Amazon Linux 2

12 giugno 2024

28 febbraio 2025

31 marzo 2025

Nota

I runtime di Node.js 18 e versioni successive utilizzano 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 sull' AWS SDK per la JavaScript versione 3, consulta il post sul blog Modular AWS SDK for JavaScript is now general available.

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. Seleziona Salvataggio delle 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).

Nota

La console AWS Cloud9 Lambda fornisce un ambiente di sviluppo integrato nel browser. Puoi anche usarle AWS Cloud9 per sviluppare funzioni Lambda nel tuo ambiente. Per ulteriori informazioni, consulta Lavorare con AWS Lambda le funzioni utilizzando la Kit di strumenti AWS guida per l' AWS Cloud9 utente.

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 funzione al di fuori della console (utilizzando un IDE) devi creare un pacchetto di implementazione per caricare il codice nella funzione Lambda.

Nota

Per iniziare a sviluppare applicazioni nell'ambiente locale, implementate una delle applicazioni di esempio disponibili nell' GitHub archivio di questa guida.

Applicazioni Lambda di esempio in Node.js
  • blank-nodejs — Una funzione Node.js che mostra l'uso della registrazione, delle variabili di ambiente, del AWS X-Ray tracciamento, dei livelli, dei test unitari e dell'SDK. AWS

  • nodejs-apig – Una funzione con un endpoint API pubblico che elabora un evento proveniente da API Gateway e restituisce una risposta HTTP.

  • efs-nodejs - Una funzione che utilizza un file system Amazon EFS in un Amazon VPC. Questo esempio include un VPC, un file system, destinazioni di montaggio e un punto di accesso configurati per l'utilizzo con 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 l' AWS SDK incluso nel runtime utilizzando le istruzioni del modulo ES. import È inoltre possibile caricare i moduli ES dai livelli.

Versioni SDK incluse in Runtime

La versione dell' AWS SDK inclusa nel runtime di Node.js dipende dalla versione di runtime e dalle tue. Regione AWS Per trovare la versione dell'SDK inclusa nel runtime che stai utilizzando, crea una funzione Lambda con il codice seguente.

Nota

Il codice di esempio mostrato 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'agente HTTP/HTTPS Node.js predefinito crea una nuova connessione TCP per ogni nuova richiesta. Per evitare il costo della creazione di nuove connessioni, puoi keepAlive: true riutilizzare le connessioni che la tua funzione effettua utilizzando l' AWS SDK. JavaScript Il keep-alive può ridurre i tempi di richiesta per le funzioni Lambda che effettuano più chiamate API utilizzando l'SDK.

Nell' AWS SDK per 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 SDK per 3.x.AWS JavaScript Per ulteriori informazioni sull'utilizzo di keep-alive, consulta HTTP keep-alive è attivo di default nell'SDK modulare o sul blog Developer Tools. AWS 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 i certificati Amazon RDS 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, per RDS, includi i certificati richiesti insieme al codice come certificates/rds.pem. Quindi, carica i certificati impostando NODE_EXTRA_CA_CERTS su /var/task/certificates/rds.pem.