aws lambda Ne peut pas trouver de module
Je reçois cette erreur dans l'aws lambda de la console lors du téléchargement de code à partir d'un fichier zip. J'ai essayé en téléchargeant d'autres fichiers zip et qu'ils fonctionnent correctement. L' .js fichier est nommé "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 de l'installation. Quelqu'un a une 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)"
]
}
- Avez-vous mis "CreateThumbnail" comme le nom de Gestionnaire dans le "Changement de configuration de la fonction et le rôle de la section"? Pouvez-vous afficher l'en-tête de votre fonction?
- Un peu de chance avec ça?
- Avez-vous assurez-vous de zip le contenu du fichier et non le fichier lui-même?
Vous devez vous connecter pour publier un commentaire.
La façon dont j'ai été en mesure d'obtenir ce travail était:
scripts
, et à l'intérieur il y a plusieurs fichiers avecexports.handler
à l'intérieur d'eux. Pour Gestionnaire à l'intérieur de Lamdba de la console, je précise,scripts/transforms.handler
.Ok, je l'ai fait moi-même, assurez-vous que vous faites le zip tels que le .le js n'est pas à l'intérieur d'un dossier, parce que AWS serait décompressez le fichier que vous téléchargez et tente de trouver un .js fichier par le nom de gestionnaire vous a donné, et si son à l'intérieur d'un dossier, il ne sera pas vous aider.
Exacte de ce message d'erreur peut s'afficher si votre fichier zippé(s) n'ont pas de monde à l'échelle de l'autorisation de lecture. (
chmod -R ugo+r
).Vérifiez les autorisations de fichier avant zippées. Ce n'est pas souligné enaugh malheureusement par AWS et il a causé beaucoup de maux de tête pour beaucoup.
gulp-zip
paquet, qui a produit cette forme de la question. Ne semble se produire quand il a essayé de le compresser (par défaut), donc, en utilisant cette option fait le travail pour moi:.pipe(zip('myfile.zip', { compress: false }))
. Merci, j'ai été en tirant mes cheveux sur celui-ci pendant un certain temps.compress:false
ne fonctionnait pas, maisgulp-zip
était encore le coupable. Manuellement les compresser les mêmes fichiers travaillé.J'ai eu ce problème sur un module personnalisé que j'avais construit, qui était dans le node_modules dir. Tout fonctionnait bien dans les tests sur mon Win10 machine, mais lors du téléchargement j'ai continué à obtenir la même "Impossible de trouver le module "modulename'" erreur.
Il s'avère que j'ai eu une discordance; voici le package.json ligne à partir du module qui n'a pas pu être trouvé:
et voici le nom réel du fichier:
Sensible à la casse; Windows n'est pas, linux (et donc AWS) est.
Un possible problème est que si vous téléchargez le lambda comme un fichier zip créé via PowerShell
Compress-Archive
.Compresser l'Archive
a un bug qui provoque AWS pour extraire les fichiers dans un plat arbre (pas de sous-répertoires), avec des barres obliques inverses dans les noms de fichiers:Certains fichiers de la bibliothèque ne pourrait pas avoir global Lu jusqu'lambda ne sera pas en mesure de lire du contenu et de développer le contenu.
Assurez-vous que tous les fichiers dans
node_modules
sont lisibles avant de l'emballage:Puis zip et de le télécharger.
AWS Lambda utilise le nom du fichier et le nom de la fonction de gestionnaire, de sorte que si vous avez défini votre gestionnaire comme ceci:
exports.myHandler = function(event, context)
dans un fichier nomméindex.js
, votre gestionnaire estindex.myHandler
.Ce qui s'est avéré être un simple pour moi.
Je voulais en venir, ne peut pas créer d'index. dans mon cas, mon principal lambda fichier avec les exportations.gestionnaire devaient être appelé index.js
Essayez d'appeler votre fichier principal CreateThumbnail.js
Nom De Fichier:
app.js
Fonction Lambda dans "app.js":
les exportations.gestionnaire = function(event, contexte)...
Lambda Gestionnaire sur Amazon Console:
app.gestionnaire ({app}.js + exportations.{gestionnaire} = app.gestionnaire)
Lorsque vous décompressez le dossier, vous devriez voir:
app.js
node_modules
Le tutoriel vous indique à inclure les éléments suivants dans votre fichier zip:
Ce qu'il ne parvient pas à prendre en compte est qu'il y a des dépendances des deux paquets (gm, async) qui doivent également faire partie de l'emballage.
Alors, voici ce que vous devez faire:
Si votre dossier complet doit ressembler à quelque chose comme ceci:
C'est sans rapport, mais google m'a amené ici, donc:
AWS vous donnera une erreur:
Ce qui se passe réellement pour moi, qui était exigeant une inexistants fichier JS. L'erreur est un peu trompeur.
Si vous utilisez AWS Lambda Couches vous avez besoin de valider si votre structure de répertoire est sur la structure nécessaire pour une couche:
Par exemple pour la moment.js node.js module dont vous avez besoin à la structure suivante:
Afin de créer une couche de fichier zip avec la structure correcte, nous pouvons utiliser la commande suivante à la racine de notre projet: