web-dev-qa-db-fra.com

aws-lambda Impossible de trouver le module

Je continue à avoir cette erreur dans la console aws-lambda lors du téléchargement du code à partir d'un fichier Zip. J'ai essayé de télécharger d'autres fichiers Zip et ils fonctionnent correctement. Le fichier .js s'appelle "CreateThumbnail.js" dans le fichier Zip. Je crois que le gestionnaire est également nommé correctement "CreateThumbnail.handler". le sous-répertoire node_modules est également configuré. Quelqu'un a quelquonque idée?

{
  "errorMessage": "Cannot find module 'CreateThumbnail'",
  "errorType": "Error",
  "stackTrace": [
  "Function.Module._resolveFilename (module.js:338:15)",
  "Function.Module._load (module.js:280:25)",
  "Module.require (module.js:364:17)",
  "require (module.js:380:17)"
  ]
}
16
Daniel Munoz

La façon dont j'ai pu obtenir que cela fonctionne est la suivante:

  1. Nommez le fichier exports.js
  2. Nommez le gestionnaire, dans le fichier, exports.handler
  3. Définissez le gestionnaire dans la configuration lambda sur exports.handler
  4. Compressez uniquement le contenu du dossier, pas le dossier lui-même (comme mentionné ci-dessus) et renommez le fichier ZIP. Exports.Zip
15
Aaron

Ok, je l'ai fait moi-même. Assurez-vous simplement de créer le fichier Zip de sorte que le fichier .js ne se retrouve pas dans un dossier, car AWS décompresserait le fichier que vous téléchargiez et essayait de trouver un fichier .js portant le nom suivant. gestionnaire que vous avez donné, et si cela se trouve dans un dossier, cela ne vous aidera pas.

8

Cette erreur peut apparaître si vos fichiers compressés n’ont pas l’autorisation de lecture dans le monde entier. (chmod -R ugo+r).

Vérifiez les autorisations de fichiers avant qu'ils ne soient compressés. Malheureusement, AWS n’a pas insisté sur ce point et cela a causé beaucoup de maux de tête à beaucoup.

4
Catalin Ciurea

Certains fichiers de bibliothèque peuvent ne pas avoir de lecture globale, de sorte que lambda ne sera pas en mesure de lire le contenu et de le créer. 

Assurez-vous que tous les fichiers dans node_modules sont lisibles avant l’emballage:

chmod -R +r node_modules

Puis Zip et télécharger.

1
Leon li

J'ai eu ce problème sur un module personnalisé que j'avais construit et qui se trouvait dans le répertoire node_modules. Tout a fonctionné correctement lors des tests sur mon ordinateur Win10, mais lors de la mise en ligne, le message d'erreur "module introuvable 'n'a pas été trouvé.

Il s'est avéré que j'avais un désaccord. voici la ligne package.json du module introuvable:

"main": "./build/modulename.js",

et voici le nom de fichier réel:

Modulename.js

Sensible aux majuscules et minuscules; Windows n'est pas, linux (et donc AWS) l'est.

1
DonPedro

Cela s'est avéré être simple pour moi.

Je devenais, ne peux pas créer d'index. dans mon cas, mon fichier principal lambda avec le exports.handler devait s'appeler index.js

Essayez d’appeler votre fichier principal CreateThumbnail.js

0
CarlPWilliams

Nom de fichier:
app.js
Fonction lambda dans "app.js":
exports.handler = fonction (événement, contexte) ...
Gestionnaire Lambda sur Amazon Console:
app.handler ({app} .js + exports. {handler} = app.handler)

Lorsque vous décompressez le dossier, vous devriez voir:
app.js
node_modules

0
Barbaros Alp

Le tutoriel vous indique d’inclure les éléments suivants dans votre fichier Zip:

CreateThumbnail.js
/node_modules/gm
/node_modules/async

Ce qu’elle omet de prendre en compte, c’est qu’il existe des dépendances des deux packages (gm, async) qui doivent également faire partie du package.

Alors voici ce que vous devez faire: 

  1. Changez le répertoire dans le dossier node_modules de votre dossier de projet et exécutez la commande ' npm install gm async '. Cela installera gm, async et toutes leurs dépendances dans ce dossier.
  2. Emballez maintenant le fichier 'CreateThumbnail.js' et le dossiercomplete'node_modules' dans un fichier Zip et téléchargez-le. Cela devrait fonctionner maintenant.

Donc, votre paquet complet devrait ressembler à quelque chose comme ça:

CreateThumbnail.js
/node_modules/.bin
/node_modules/array-parallel
/node_modules/array-series
/node_modules/async
/node_modules/cross-spawn
/node_modules/debug
/node_modules/gm
/node_modules/isexe
/node_modules/lodash
/node_modules/lru-cache
/node_modules/ms
/node_modules/pseudomap
/node_modules/which
/node_modules/yallist
0
Kirmani

Cela n'a rien à voir, mais Google m'a amené ici, alors:

AWS vous donnera une erreur:

Unable to import module '<myfile>': Error

Ce qui se passait réellement pour moi, c’était qu’il fallait un fichier JS non existant. L'erreur est un peu trompeuse.

0
Fábio Santos

AWS Lambda utilise le nom du fichier et le nom de la fonction de gestionnaire. Par conséquent, si vous définissez votre gestionnaire comme suit: exports.myHandler = function(event, context) dans un fichier nommé index.js, votre gestionnaire est index.myHandler.

0
Esdras Mayrink

Un problème possible est de télécharger le fichier lambda en tant que fichier Zip créé via PowerShell Compress-Archive. Compress-Archive a un bogue qui oblige AWS à extraire les fichiers dans une arborescence plate (sans sous-répertoires), avec des barres obliques inverses dans les noms de fichiers:

 enter image description here

0
Roman Starkov