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 Python ?

Date de la 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 Python.

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 Python. Cela est dû au fait que Lambda n'est pas prépackagé avec l'ensemble des bibliothèques Python.

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 Python 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. 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 avoir besoin de spécifier le chemin d'accès.

Important : placez la bibliothèque que vous importez pour Python dans le dossier /python.

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, Python 3.8 est basé sur une Amazon Machine Image (AMI) Amazon Linux 2. Cependant, Python 3.7 et Python 3.6 sont basés sur l'AMI Amazon Linux.

Pour créer une couche Lambda pour une bibliothèque Python 3.8 :

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 Python 3.8 et pip3:

$ sudo amazon-linux-extras install python3.8
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3.8 get-pip.py --user

4.    Créez un dossier Python :

$ mkdir python

5.    Installez les fichiers de bibliothèque aws-xray-sdk dans le dossier Python :

$ pip3 install -t python/ aws-xray-sdk

Remarque : remplacez la bibliothèque d'exemples aws-xray-sdk par le nom de la bibliothèque Python que vous souhaitez importer.

6.    Compressez le contenu du dossier Python dans un fichier layer.zip :

$ zip -r layer.zip python

7.    Publiez la couche Lambda :

$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes python3.8 --region us-west-2