web-dev-qa-db-fra.com

La fonction AWS Lambda renvoie "Impossible de trouver le module" index "", mais le gestionnaire de la configuration est défini sur index

Comme mon titre l'explique, j'obtiens l'erreur suivante:

 {
  "errorMessage": "Cannot find module 'index'",
  "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)"
  ]
}

J'ai essayé les deux solutions fournies dans créer une fonction-lambda-dans-aws-de-fichier-zip et simple-node-js-exemple-dans-aws-lambda

Ma configuration ressemble actuellement à:  enter image description here

et ma structure de fichier est:  enter image description here

et ma fonction de gestionnaire d'index.js ressemble à:

exports.handler = function(event, context) {

Qu'est-ce qui pourrait causer ce problème en dehors de ce qui a été dit dans ces deux réponses ci-dessus? J'ai essayé les deux solutions et j'ai également alloué plus de mémoire à la fonction, juste au cas où elle ne pourrait pas s'exécuter.

EDIT - Dans le but d’essayer, j’ai créé une version encore plus simple de mon code original et qui ressemblait à ceci:

var Q = require('q');
var AWS = require('aws-sdk');
var validate = require('lambduh-validate');
var Lambda = new AWS.Lambda();
var S3 = new AWS.S3();




theHandler = function (event, context) {

  console.log =('nothing');

}

exports.handler = theHandler();

Et pourtant ne fonctionne toujours pas avec la même erreur?

26
Andrew Font

Essayez de compresser et de télécharger le contenu du dossier lambda-create-timelapse. Pas le dossier lui-même.

46
tahsintahsin

Si cela n’est pas clair pour les autres, voici les étapes:

Étape 1 Accédez au dossier de votre projet et ouvrez-le de sorte que vous vous trouviez dans le dossier:  Folder

Étape 2 Sélectionnez toutes les images que vous souhaitez télécharger vers Lambda:  Folder with selected files

Étape 3 Cliquez avec le bouton droit de la souris et compressez les fichiers que vous avez sélectionnés:  Right-click menu with compress option highlighted


Cela vous donnera un fichier .Zip, qui est le fichier que vous devez télécharger sur Lambda:

 Archive.Zip output


Il y a beaucoup de façons d'automatiser cela, mais c'est la procédure manuelle.

15
Tyler

J'ai moi-même rencontré ce problème à quelques reprises, et il s'agit en fait de compresser le dossier au lieu de simplement afficher le contenu, comme vous êtes censé le faire.

Pour ceux qui travaillent depuis le terminal ...

À l’intérieur du répertoire où se trouvent les fichiers .js, exécutez les opérations suivantes:

Zip -r ../zipname.Zip *

Le * demande au client de compresser tout le contenu de ce dossier. ../zipname.Zip lui demande de nommer le fichier zipname.Zip et de le placer juste en dehors de ce répertoire actuel.

5
Michael Du

J'ai eu le même problème il y a quelque temps - j'ai reformaté le code.

function lambdafunc1(event, context) {
...
...
...
}

exports.handler = lambdafunc1
2
Naveen Vijay

La déclaration de fonction Lambda correcte peut ressembler à ceci:

var func = function(event, context) {
   ...
};

exports.handler = func;

Il se peut que d’autres erreurs de syntaxe empêchent le fichier index.js d’être exécuté correctement. Essayez d’exécuter votre code localement en utilisant un autre fichier et en utilisant le index.js comme votre propre module.

0
kixorz

Le problème se produit lorsque le gestionnaire ne peut pas être situé dans le zip au premier niveau. Donc, chaque fois que vous voyez une telle erreur, assurez-vous que le fichier est au premier niveau du dossier éclaté. 

Pour résoudre ce problème Compressez les fichiers et non le dossier contenant les fichiers.

0
Sushil Ojha