91 votes

Erreur AWS Lambda: "Impossible de trouver le module '/ var / task / index'"

Node.js Alexa Tâche En Question

Je suis en train de coder un Node.js Alexa Tâche via AWS Lambda, et j'ai essayé de coder une fonction qui reçoit les informations de l'OpenWeather de l'API et de l'analyse dans une variable nommée weather. Le code est comme suit:

var request = require('request');
var weather = "";
function isBadWeather(location) {
      var endpoint = "http://api.openweathermap.org/data/2.5/weather?q=" + location + "&APPID=205283d9c9211b776d3580d5de5d6338";
      var body = "";
      request(endpoint, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                  body = JSON.parse(body);
                  weather = body.weather[0].id;
            }
      });
}

function testWeather()
{
      setTimeout(function() {
      if (weather >= 200 && weather < 800)
            weather = true;
      else
            weather = false;
      console.log(weather);
      generateResponse(buildSpeechletResponse(weather, true), {});
      }, 500);
}

J'ai couru cet extrait d'innombrables fois dans Cloud9 et autres IDEs, et il semble fonctionner parfaitement. Cependant, quand j'zip dans un paquet et l'envoyer à AWS Lambda, j'obtiens l'erreur suivante:

{
    "errorMessage": "Cannot find module '/var/task/index'",
    "errorType": "Error",
    "stackTrace": [
        "Function.Module._load (module.js:276:25)",
        "Module.require (module.js:353:17)",
        "require (internal/module.js:12:17)"
    ]
}

J'ai parcouru de nombreux articles et installé le module js, demande, et de nombreux autres Nœud modules qui devrait faire de ce code s'exécute, mais rien ne semble résoudre ce problème. Voici mon répertoire, juste au cas où:

- planyr.zip
   - index.js
   - node_modules
   - package.json

Personne ne sait quel peut être le problème? Je vous remercie beaucoup à l'avance.

231voto

Anthony Krivonos Points 2539

Il fixe! Mon problème est que j'ai essayé de compresser le fichier à l'aide de mon Mac intégré dans la fonction de compression dans le Finder. Si vous êtes un utilisateur de Mac, comme moi, vous devez exécuter le script suivant dans le terminal lorsque vous êtes dans le répertoire racine de votre projet (dossier contenant votre index.js, node_modules, etc. les fichiers).

zip -r ../yourfilename.zip *

Edit: Si vous êtes un utilisateur Windows, exécutez la commande suivante dans l'Invite de Commande (source).

compact /c "C:/fullpathtoyourfile" /i /Q

23voto

Ashutosh Jha Points 3560

Mise à jour de la réponse acceptée: lorsque cette erreur se produit, cela signifie que votre fichier zip n'est pas sous la forme valide requise par AWS.

Si vous double-cliquez sur zip, vous trouverez votre dossier dans votre fichier de code, mais lambda souhaite que lorsque vous double-cliquez dessus, vous devez afficher les fichiers de code directs.

Pour y parvenir:

 open terminal  
cd your-lambda-folder 
zip -r index.zip *
 

Ensuite, téléchargez index.zip sur AWS Lambda.

21voto

zooblin Points 636

Vérifiez que les noms de fichier et de gestionnaire sont identiques:

Dans ce cas, nous nous attendons à ce que tout notre code soit dans le fichier <code> bundle.ls </ code>.

Cela signifie que les fichiers zip fichiers bundle.js qui exportent les fonctions handler :

exports.handler = (event, context, callback) => {//...}

5voto

Pete Points 457

Dans mon cas, c'était parce que j'avais le fichier de gestionnaire dans le répertoire src interne.

Je devais changer la propriété 'Handler' dans Lambda de:

 index.handler
 

à

 src/index.handler
 

3voto

Simon-Pierre Points 1077

Il s'agit probablement d'un problème d'autorisations avec des fichiers dans votre zip de déploiement. Essayez chmod 777 vos fichiers avant de les empaqueter dans un fichier zip.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X