Come faccio a risolvere gli errori "Impossibile trovare il modulo" o "Impossibile trovare il pacchetto" quando eseguo il codice Lambda in Node.js?

3 minuti di lettura
0

Ricevo l'errore "Impossibile trovare il modulo" o "Impossibile trovare il pacchetto" quando eseguo il codice AWS Lambda in Node.js.

Breve descrizione

Se l'ambiente Lambda non riesce a trovare la libreria specificata nel codice Node.js, verrà visualizzato uno di questi errori. Questi errori si verificano perché Lambda non contiene già tutte le librerie Node.js.

  • Se manca un modulo con CommonJS, verrà visualizzato il seguente errore: Runtime.ImportModuleError: Errore: Impossibile trovare il modulo.
  • Se manca un modulo con JavaScript ES6, verrà visualizzato il seguente errore: Errore [ERR_MODULE_NOT_FOUND]: Impossibile trovare il pacchetto.

Per risolvere questi errori, crea un pacchetto di distribuzione o un layer Lambda che includa le librerie che desideri utilizzare nel codice Node.js.

Per i runtime di Node.js 16 e versioni precedenti, Lambda non supporta le dipendenze dei moduli JavaScript ES a più livelli. È necessario includere le dipendenze nella distribuzione.
Lambda supporta le dipendenze del modulo JavaScript ES per Node.js 18.

Utilizza i seguenti passaggi per creare un layer Lambda. Crea un layer Lambda anziché un pacchetto di distribuzione in modo da poter riutilizzare il layer su più funzioni Lambda. Ogni runtime di Lambda aggiunge cartelle di directory /opt specifiche alla variabile PATH. Se il livello utilizza la stessa struttura di cartelle, il codice della funzione Lambda può accedere al contenuto del livello senza specificare il percorso.

Importante: La libreria importata per Node.js deve trovarsi all'interno della struttura della cartella nodejs/node_modules.

Risoluzione

È consigliabile creare un layer Lambda sullo stesso sistema operativo su cui si basa il runtime Lambda. Ad esempio, tutte le versioni di Node.js sono basate su Amazon Linux 2 Amazon Machine Images (AMI).

Crea un livello Lambda per una libreria Node.js:

1.    Crea un'istanza Amazon Elastic Compute Cloud (Amazon EC2) da un'AMI Amazon Linux 2.

2.    Crea un ruolo di AWS Identity and Access Management (IAM) con le autorizzazioni per richiamare l'API publish-layer-version. Quindi, associa il ruolo IAM all'istanza EC2.

Nota: La tua istanza EC2 ora dispone delle autorizzazioni per caricare i layer Lambda per la chiamata API publish-layer-version.

3.    Connettiti alla tua istanza EC2, quindi installa Node.js:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install node

4.    Crea una cartella nodejs:

$ mkdir nodejs

5.    Installa la libreria aws-xray-sdk nella cartella nodejs:

$ cd nodejs
$ npm init  ***answer all queries regarding initialization that create a package.json file***
$ npm install --save aws-xray-sdk

Nota: Sostituisci la libreria di esempio aws-xray-sdk con la libreria Node.js che desideri importare.

6.    Crea un archivio zip per la libreria aws-xray-sdk:

$ zip -r layer.zip nodejs

Nota: La libreria aws-xray-sdk è nel formato di cartella richiesto per un livello Node.js: nodejs/node_modules.

7.    Pubblica il layer Lambda:

$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region us-east-1

Nota: Per aggiungere i moduli ECMAScript 6 (ES6) o CommonJS nella lettura del codice, consulta la sintassi JavaScript ES6/CommonJS.

Informazioni correlate

Come faccio a risolvere gli errori di "autorizzazione negata" o "impossibilità di importare il modulo" durante il caricamento di un pacchetto di distribuzione Lambda?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa