Je souhaite résoudre l'erreur « Unable to import module » lorsque j'exécute du code Python dans une fonction AWS Lambda.
Brève description
Le message d’erreur « Unable to import module » s’affiche lorsque l’environnement AWS Lambda ne trouve pas la bibliothèque spécifiée dans votre package de déploiement Lambda.
Pour résoudre cette erreur, créez un package de déploiement contenant toutes les bibliothèques requises. Vous pouvez également créer une couche Lambda avec les bibliothèques requises et associer la couche à votre fonction Lambda. Vous pouvez ensuite réutiliser la couche dans plusieurs fonctions Lambda.
Résolution
Créer une couche Lambda à associer à plusieurs fonctions Lambda
Remarque : Lorsque vous créez la couche Lambda, placez les bibliothèques dans les dossiers /python ou python/lib/python3.x/site-packages. Il est recommandé de créer la 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, Python 3.12 est basé sur une Amazon Machine Image (AMI) Amazon Linux 2023. Créez donc la couche sur un système d’exploitation Amazon Linux 2023.
Si votre instance Amazon Elastic Compute Cloud (Amazon EC2) est autorisée à utiliser l'appel d'API PublishLayerVersion pour charger des couches Lambda, passez à l'étape 5.
Effectuez les opérations suivantes :
-
Utilisez la console Amazon EC2 pour créer une instance avec l’AMI Amazon Linux 2023. Vous pouvez également utiliser la console AWS Cloud9.
-
Créez une stratégie AWS Identity and Access Management (IAM) qui accorde les autorisations nécessaires pour appeler l’opération d’API PublishLayerVersion.
Exemple de stratégie IAM :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:PublishLayerVersion",
"Resource": "*"
}
]
}
-
Créez un rôle IAM, puis associez-y la stratégie IAM.
-
Attachez le rôle IAM à l’instance.
-
Connectez-vous à votre instance ou à l’environnement AWS Cloud9.
-
Exécutez les commandes suivantes pour créer un nouveau dossier et utilisez pip pour installer la bibliothèque nommée « numpy » :
mkdir -p lambda-layer/pythoncd lambda-layer/python
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
Remarque : mettez à jour le paramètre de plateforme correspondant à votre type de fonction. Pour une fonction Lambda x86_64, définissez la valeur sur manylinux2014_x86_64. Pour une fonction arm64, définissez la valeur sur manylinux2014_aarch64. Mettez à jour le paramètre python-version vers la même version que celle utilisée par votre fonction Lambda.
-
Exécutez la commande suivante pour placer le contenu du dossier python dans un fichier layer.zip :
cd ..zip -r layer.zip python
-
Exécutez la commande suivante pour publier la couche Lambda :
aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1
Remarque : Remplacez us-east-1 par la région AWS de votre fonction Lambda.
-
Ajoutez la couche à votre fonction Lambda.
-
Pour tester votre fonction Lambda, importez le package et imprimez la version.
Exemple de résultat :
import jsonimport numpy
def lambda_handler(event, context):
print(numpy.__version__)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Informations connexes
Comment puis-je installer et dépanner les bibliothèques Python dans des clusters Amazon EMR et Amazon EMR sans serveur ?