Comment résoudre les erreurs « autorisation refusée» ou « impossible d'importer le module » dans Lambda lors du téléchargement d'un package de déploiement ?

Date de la dernière mise à jour : 10/04/2019

J'ai téléchargé mon fichier de package de déploiement AWS Lambda et une erreur s'est affichée. Qu'est-ce qui ne va pas et comment puis-je le réparer ? 

Brève description

Les problèmes d’autorisations incorrectes sont fréquents pour les packages générés par des applications d'intégration continue. Si les autorisations de sécurité définies pour votre fichier .zip ou .jar du package de déploiement Lambda sont incorrectes, une erreur s’affiche lorsque vous essayez de télécharger le fichier. Lambda nécessite des autorisations de lecture globales sur les fichiers de code et toutes les bibliothèques dépendantes de votre package de déploiement.

Remarque : Lambda utilise les autorisations POSIX, nous vous recommandons donc d'utiliser un système d'exploitation compatible POSIX (par exemple, Linux, Unix ou macOS) lors de la création de packages de déploiement Lambda. La parité entre le modèle d'autorisations dans votre environnement de construction et votre environnement d'exécution réduit les risques de problèmes d'autorisations.

Si vous utilisez Windows pour le développement et que vous avez besoin de résoudre un problème d’autorisations, vous pouvez configurer un environnement Linux en procédant comme suit :

Résolution

Identifier la cause de l'erreur

En fonction de la langue que vous utilisez pour écrire votre code de fonction Lambda, la cause de l'erreur peut ne pas être claire dans le message d'erreur. Par exemple, dans une fonction Node.js, l'erreur est claire :

{
  "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)"
  ]
}

Pour une fonction Python, il peut être plus difficile d'identifier l'erreur. Par exemple : 

Unable to import module 'index': No module named index

Ou, si des bibliothèques externes ne possèdent pas les autorisations requises : 

Unable to import module 'index': No module named exlib

Corrigez les autorisations pour votre package de déploiement

Remarque : ces commandes sont valides uniquement pour les systèmes Linux/Unix/macOS.

1.    (Facultatif) Vérifiez les autorisations de votre fichier de package de déploiement en exécutant zipinfo dans l'interface de ligne de commande. Pour plus d'informations, consultez Stratégies d'autorisations sur les packages de déploiement Lambda.

2.    Exécutez la commande suivante dans l’interface de ligne de commande pour corriger les autorisations de manière récursive :

$ chmod 644 $(find /tmp/package_contents -type f)$ chmod 755 $(find /tmp/package_contents -type d)

3.    Après avoir corrigé les autorisations, téléchargez le package de déploiement à nouveau.


Cet article vous a-t-il aidé ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?