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 : 12/04/2022

Je reçois un message d'erreur « Unable to import module » (Impossible d'importer le module) lorsque j'essaie d'exécuter mon code AWS Lambda dans Python. Comment résoudre ce problème ?

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 voulez utiliser dans votre code Python pour Lambda.

Important : assurez-vous de placer la bibliothèque que vous importez pour Python dans le dossier /python.

Solution

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, alors 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.

La bonne pratique consiste à 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, procédez comme suit :

1.    Dans la console AWS Cloud9, créez une instance Amazon Elastic Compute Cloud (Amazon EC2) avec l'AMI Amazon Linux 2. Pour obtenir des instructions, consultez Création d'un environnement EC2 dans le guide de l'utilisateur AWS Cloud9.

2.    Créez une politique AWS Identity and Access Management (IAM) qui accorde des autorisations pour appeler l'opération d'API PublishLayerVersion.

Exemple de déclaration de politique IAM qui accorde des autorisations pour appeler l'opération d'API PublishLayerVersion

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:PublishLayerVersion",
            "Resource": "*"
        }
    ]
}

3.    Créez un rôle IAM et attachez la politique IAM au rôle. Ensuite, attachez le rôle IAM à l'instance Amazon EC2.

Remarque : votre instance EC2 dispose désormais des autorisations afin de charger des couches Lambda pour l'appel d'API PublishLayerVersion.

4.    Ouvrez votre environnement Amazon EC2 AWS Cloud9. Ensuite, installez Python 3.8 et pip3 en exécutant les commandes suivantes :

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

5.    Créez un dossier python en exécutant la commande suivante :

$ mkdir python

6.    Installez les fichiers de la bibliothèque Pandas dans le dossier python en exécutant la commande suivante :

Important : remplacez Pandas par le nom de la bibliothèque Python que vous voulez importer.

$ python3.8 -m pip install pandas -t python/

7.    Compressez le contenu du dossier python dans un fichier layer.zip en exécutant la commande suivante :

$ zip -r layer.zip python

8.    Publiez la couche Lambda en exécutant la commande suivante :

Important : remplacez us-east-1 par la région AWS dans laquelle se trouve votre fonction Lambda.

$ aws lambda publish-layer-version --layer-name pandas-layer --zip-file fileb://layer.zip --compatible-runtimes python3.8 --region us-east-1

9.    Ajoutez la couche à votre fonction Lambda.