Comment résoudre l'erreur « Unable to import module » (Impossible d'importer le module) que je reçois lorsque j'exécute le code Lambda dans Node.js ?

Dernière mise à jour : 26/07/2021

Je reçois le message d'erreur « Unable to import module » (Impossible d'importer le module) lorsque j'essaie d'exécuter mon code AWS Lambda dans Node.js.

Brève description

Vous recevez généralement ce message d'erreur lorsque votre environnement Lambda ne trouve pas la bibliothèque spécifiée dans le code Node.js. Cela est dû à Lambda qui n'est pas prépackagé avec l'ensemble des bibliothèques Node.js.

Pour résoudre cette erreur, 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 Lambda.

Remarque : les étapes suivantes vous montrent comment créer une couche Lambda plutôt qu'un package de déploiement. En effet, vous pouvez réutiliser la couche Lambda dans plusieurs fonctions Lambda. Pour chaque exécution Lambda, la variable PATH ajoute des dossiers spécifiques dans le répertoire /opt. 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 avoir besoin de spécifier le chemin d'accès.

Important : placez la bibliothèque que vous importez pour Node.js dans le dossier nodejs/node_modules.

Résolution

Il est recommandé de créer une couche Lambda sur le même système d'exploitation que celui sur lequel est basé votre environnement d'exécution Lambda. Par exemple, toutes les versions de Node.js sont basées sur Amazon Linux 2 Amazon Machine Images (AMI).

Pour créer une couche Lambda pour une bibliothèque Node.js :

1.    Créez une instance Amazon Elastic Compute Cloud (Amazon EC2) à partir d'une AMI Amazon Linux 2.

2.    Créez un rôle AWS Identity and Access Management (IAM) avec des autorisations pour appeler l'API publish-layer-version. Ensuite, attachez le rôle IAM à l'instance EC2.

Remarque : votre instance EC2 dispose désormais des autorisations afin de télécharger des couches Lambda pour l'appel d'API publish-layer-version.

3.    Connectez-vous à votre instance EC2, puis installez Node.js :

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

4.    Créez un dossier nodejs :

$ mkdir nodejs

5.    Installez la bibliothèque aws-xray-sdk dans le dossier nodejs :

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

Remarque : remplacez la bibliothèque d'exemples aws-xray-sdk par la bibliothèque Node.js que vous souhaitez importer.

6.    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_modules.

7.    Publiez la couche Lambda :

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