Come posso risolvere gli errori "Cannot find module" or "Cannot find Package" quando eseguo il codice Lambda in Node.js?
Ricevo errori "Cannot find module" or "Cannot find Package" 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, ricevi uno di questi errori. Questi errori si verificano perché Lambda non contiene già tutte le librerie Node.js.
Se manca un modulo con CommonJS, ricevi 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]: Cannot find package.
Risoluzione
Per risolvere questi errori, crea un pacchetto di implementazione 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. Devi includere le dipendenze nell'implementazione. Lambda supporta le dipendenze del modulo JavaScript ES per Node.js 20.
Crea un layer Lambda anziché un pacchetto di implementazione in modo da poter riutilizzare il layer su più funzioni Lambda. Ogni runtime di Lambda aggiunge specifiche cartelle di directory /opt alla variabile PATH. Se il layer utilizza la stessa struttura di cartelle, il codice della funzione Lambda può accedere al contenuto del layer senza specificare il percorso.
Importante: la libreria importata per Node.js deve trovarsi all'interno della struttura di cartelle nodejs/node_modules.
È consigliabile creare un layer Lambda sullo stesso sistema operativo in cui si basa il runtime supportato da Lambda . Ad esempio, tutte le versioni di Node.js sono basate su Amazon Machine Images (AMI) Amazon Linux 2023.
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Per creare un layer Lambda per una libreria Node.js, completa i seguenti passaggi:
-
Crea un'istanza Amazon Elastic Compute Cloud (Amazon EC2) da un'AMI Amazon Linux 2.
-
Crea un ruolo AWS Identity and Access Management (AWS IAM) con le autorizzazioni per chiamare l'API publish-layer-version.
-
Collega il ruolo IAM all'istanza Amazon EC2.
Nota: l'istanza EC2 ora ha le autorizzazioni per caricare i layer Lambda per la chiamata API publish-layer-version. -
Installa Node.js:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash$ . ~/.nvm/nvm.sh nvm install node -
Crea una cartella nodejs:
mkdir nodejs -
Installa la libreria aws-xray-sdk nella cartella nodejs:
cd nodejs$ npm init ***answer all queries for initialization that create a package.json file*** npm install --save aws-xray-sdkNota: sostituisci l'esempio di libreria aws-xray-sdk con la libreria Node.js che desideri importare.
-
Crea un archivio zip per la libreria aws-xray-sdk:
zip -r layer.zip nodejsNota: la libreria aws-xray-sdk è nel formato di cartella richiesto per un layer Node.js: nodejs/node_modules.
-
Per pubblicare il layer Lambda, esegui questo comando publish-layer-version:
aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region your-regionNota: sostituisci your-region con la tua Regione AWS.
Per aggiungere moduli ECMAScript 6 (ES6) o CommonJS al codice, consulta Sintassi JavaScript ES6/CommonJS.
Informazioni correlate
Come posso creare un pacchetto di implementazione Lambda per Node.js?
- Argomenti
- ServerlessCompute
- Tag
- AWS Lambda
- Lingua
- Italiano
Video correlati

