Je reçois le message d'erreur « Module introuvable » ou « Package introuvable » lorsque j'exécute le code AWS Lambda dans Node.js.
Brève description
Si votre environnement Lambda ne trouve pas la bibliothèque spécifiée dans le code Node.js, vous recevez l'une de ces erreurs. Ces erreurs se produisent car Lambda n'est pas pré-packagé avec toutes les bibliothèques Node.js.
Si un module est manquant dans CommonJS, le message d'erreur suivant s’affiche : Erreur du module Runtime.Import : Erreur: Impossible de trouver le module.
S'il manque un module avec JavaScript ES6, le message d'erreur suivant s'affiche : Erreur [ERR_MODULE_NOT_FOUND] : Le package est introuvable.
Résolution
Pour résoudre ces erreurs, créez un package de déploiement ou une couche Lambda qui inclut les bibliothèques que vous souhaitez utiliser dans votre code Node.js.
Pour les environnements d'exécution Node.js 16 et antérieurs, Lambda ne prend pas en charge les dépendances en couches du module JavaScript ES. Vous devez inclure les dépendances dans le déploiement. Lambda prend en charge les dépendances du module JavaScript ES pour Node.js 20.
Créez une couche Lambda au lieu d'un package de déploiement afin de pouvoir réutiliser la couche dans plusieurs fonctions Lambda. Chaque environnement d'exécution Lambda ajoute des dossiers de répertoire /opt spécifiques à la variable PATH. Si la couche utilise la même structure de dossiers, le code de votre fonction Lambda peut accéder au contenu de la couche sans spécifier un chemin.
Important : La bibliothèque que vous importez pour Node.js doit se trouver dans la structure de dossiers nodejs/node\ _modules.
Il est recommandé de créer une couche Lambda sur le même système d’exploitation (OS) que celui sur lequel est basé votre environnement d’exécution Lambda. Par exemple, les dernières versions de Node.js sont basées sur les Amazon Machine Images (AMI) Amazon Linux 2023.
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Pour créer une couche Lambda pour une bibliothèque Node.js, procédez comme suit :
-
Créez une instance Amazon Elastic Compute Cloud (Amazon EC2) à partir d'une AMI Amazon Linux 2.
-
Créez un rôle Gestion des identités et des accès (IAM) avec les autorisations nécessaires pour appeler l'API publish-layer-version.
-
Associez le rôle IAM à une instance Amazon EC2.
Remarque : Votre instance EC2 est maintenant autorisée à charger des couches Lambda pour l'appel d'API publish-layer-version.
-
Utilisez le protocole SSH pour vous connecter à l’instance EC2.
-
Installez Node.js :
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash$ . ~/.nvm/nvm.sh
nvm install node
-
Créez un dossier nodejs :
mkdir nodejs
-
Installez la bibliothèque aws-xray-sdk dans le dossier nodejs :
cd nodejs$ npm init ***answer all queries for initialization that create a package.json file***
npm install --save aws-xray-sdk
Remarque : Remplacez la bibliothèque d'exemple aws-xray-sdk par la bibliothèque Node.js que vous souhaitez importer.
-
Créez une archive zip pour la bibliothèque aws-xray-sdk :
zip -r layer.zip nodejs
Remarque : La bibliothèque aws-xray-sdk est au format de dossier requis pour une couche Node.js : nodejs/node_module.
-
Pour publier la couche Lambda, exécutez la commande publish-layer-version suivante :
aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region your-region
Remarque : Remplacez your-region par votre région AWS.
Pour ajouter des modules ECMAScript 6 (ES6) ou CommonJS dans votre code lu, consultez la section Syntaxe JavaScript ES6/CommonJS.
Informations connexes
Comment puis-je résoudre les erreurs « Autorisation refusée » ou « Impossible d’importer le module » lorsque je charge un package de déploiement Lambda ?
Comment créer un package de déploiement Lambda pour Node.js ?