Comment puis-je résoudre les erreurs « Autorisation refusée » ou « Unable to import module » lorsque je télécharge un package de déploiement Lambda ?
Lorsque je télécharge un package de déploiement AWS Lambda, le message d’erreur « Autorisation refusée » ou « Unable to import module » s’affiche.
Brève description
Le service Lambda nécessite des autorisations de lecture globales sur les fichiers de code et toutes les bibliothèques dépendantes du package de déploiement. Si vous ne configurez pas le package de déploiement Lambda avec les autorisations de sécurité appropriées, Lambda renvoie une erreur lorsque vous essayez de télécharger le fichier. Les erreurs Autorisation refusée et Unable to import module se produisent fréquemment lorsque les applications d’intégration continue créent des packages de déploiement.
Pour les environnements d’exécution interprétés comme Python, l’autorisation correcte pour les fichiers du package de déploiement est 644. Pour les dossiers du package de déploiement, l’autorisation correcte est 755.
Pour les environnements d’exécution compilés comme Go, l’autorisation correcte pour les fichiers exécutables et les répertoires d’un package de déploiement est 755 dans la notation numérique des autorisations Unix.
Remarque : comme Lambda utilise des autorisations POSIX, il est recommandé de créer des packages de déploiement Lambda avec un système d’exploitation (SE) conforme à POSIX. Les systèmes d’exploitation compatibles sont Linux, Unix ou macOS. L’égalité entre le modèle d’autorisations de l’environnement de génération et l’environnement d’exécution de Lambda réduit les risques de problèmes d’autorisations.
Pour résoudre un problème d’autorisations en tant qu’utilisateur Windows, effectuez l’une des tâches suivantes pour configurer un environnement Linux :
- Installez une distribution Linux sur votre PC. Pour plus d’informations, consultez Comment installer Linux sous Windows avec WSL sur le site Web de Microsoft.
- À l’aide d’une Amazon Machine Image (AMI) de Lambda, lancez une instance Amazon Elastic Compute Cloud (Amazon EC2).
Résolution
Localisation du fichier ou du dossier à l’origine de l’erreur
Selon le langage de programmation que vous avez utilisé pour écrire le code de la fonction Lambda, la cause de l’erreur peut ne pas être clairement définie dans le message d’erreur.
Par exemple, un message d’erreur de la fonction Node.js répertorie le nom du fichier ou du dossier à l’origine de l’erreur. En revanche, le message d’erreur d’une fonction Python ne répertorie pas le nom du fichier ou du dossier à l’origine de l’erreur.
Exemple d’erreur d’autorisation refusée pour la fonction Lambda Node.js
{ "errorMessage": "EACCES: permission denied, open '/var/task/index.js'", "errorType": "Error", "stackTrace": [ "Object.fs.openSync (fs.js:641:18)", "Object.fs.readFileSync (fs.js:509:33)", "Object.Module._extensions..js (module.js:578:20)", "Module.load (module.js:487:32)", "tryModuleLoad (module.js:446:12)", "Function.Module._load (module.js:438:3)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)" ] }
Exemple d’erreur d’une fonction Lambda Python incapable d’importer le module
« Unable to import module 'index' : No module named index »
Pour corriger cette erreur, consultez Comment puis-je résoudre l’erreur « Unable to import module » qui s’affiche lorsque j’exécute du code Lambda en Python ?
Si le package de déploiement Lambda n’est pas Amazon Linux 2 ou Amazon Linux 2023, vous devez configurer la compatibilité avec les versions d’Amazon Linux. Pour ce faire, définissez les paramètres suivants lors de l’installation du package. L’exemple suivant utilise un système d’exploitation Python 3.12 et des bibliothèques NumPy dans le même dossier où se trouve la fonction Lambda :
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
En fonction de votre cas d’utilisation, ajustez les valeurs suivantes :
- La valeur platform manylinux2014_x86_64 spécifie la plateforme du package.
- La valeur python-version 3.12 indique que le package est compatible avec la version Python spécifiée. Ajustez cette valeur en fonction de la version d’exécution Python que vous ciblez dans Lambda.
- Le paramètre only-binary=:all indique à pip de ne télécharger que les fichiers binaires. Ainsi, il est possible de s’assurer que le package est compatible avec l’environnement d’exécution Lambda.
Exemple d’erreur de fonction Python Lambda pour des bibliothèques externes qui ne disposent pas des autorisations requises
« Unable to import module 'index' : No module named requests »
Pour vérifier les autorisations sur tous les fichiers et dossiers du fichier .zip du package de déploiement, exécutez la commande zipinfo dans l’interface de ligne de commande (CLI) :
zipinfo lambda-package.zip
Remarque : remplacez lambda-package.zip par le nom de fichier .zip du package de déploiement.
Exemple de réponse à la commande zipinfo
Archive: lambda-package.zipZip file size: 305 bytes, number of entries: 1-r-------- 3.0 unx 188 tx defN 21-Feb-13 20:48 example.py 1 file, 188 bytes uncompressed, 135 bytes compressed: 28.2%
Remarque : dans l’exemple précédent, l’autorisation sur example.py est -r--------, ou 400 en notation numérique des autorisations Unix. Mettez à jour l’autorisation sur le fichier avec la valeur 644. Pour plus d’informations, consultez Notation of traditional Unix permissions sur le site Web de Wikipedia.
Mise à jour des autorisations sur le package de déploiement
Remarque : les commandes suivantes ne fonctionnent que pour Linux, Unix et macOS.
-
Pour décompresser les fichiers et les dossiers du package de déploiement dans un dossier temporaire, exécutez la commande suivante dans l’interface de la ligne de commande :
mkdir temp-folder; unzip lambda-package.zip -d temp-folder ;cd temp-folder;ls -l
Remarque : remplacez lambda-package.zip par le nom de fichier du package de déploiement et temp-folder par le nom du dossier temporaire.
-
Mettez à jour les autorisations sur les fichiers de la bibliothèque.
Remarque : pour rendre les répertoires exécutables et tous les fichiers et dossiers du package de déploiement décompressé lisibles par n’importe quel utilisateur, exécutez la commande chmod suivante :$ sudo chmod 644 $(find -type f) && chmod 755 $(find -type d)
Pour rendre les fichiers du package de déploiement décompressés exécutables dans les environnements d’exécution compilés, exécutez la commande suivante :
$ chmod 755 -R
-
Une fois les autorisations définies, exécutez la commande suivante pour reconditionner les fichiers et le dossier dans un nouveau fichier .zip :
zip -r new-lambda-package.zip *
Contenus pertinents
- demandé il y a 3 moislg...
- demandé il y a 2 anslg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 8 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 3 ans