web-dev-qa-db-fra.com

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

Node.js Alexa Problème de tâche

Je code actuellement une tâche Alexa Node.js via AWS Lambda et j'essaie de coder une fonction qui reçoit des informations de l'API OpenWeather et les analyse dans une variable appelée weather. Le code pertinent est le suivant:

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 exécuté ce fragment de code d'innombrables fois dans Cloud9 et d'autres IDE, et il semble fonctionner parfaitement. Cependant, lorsque je le compresse dans un package et que je le télécharge sur AWS Lambda, le message d'erreur suivant s'affiche:

{
    "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 d'innombrables articles et installé module-js, request et de nombreux autres modules de nœuds devant faire exécuter ce code, 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

Est-ce que quelqu'un sait ce que le problème pourrait être? Merci d'avance.

72
Anthony Krivonos

Fixe le! Mon problème était que j'ai essayé de compresser le fichier en utilisant la fonction de compression intégrée de mon Mac dans le Finder. Si vous êtes un utilisateur Mac, comme moi, vous devez exécuter le script suivant dans terminal lorsque vous vous trouvez dans le répertoire racine de votre projet (dossier contenant vos fichiers index.js, node_modules, etc.).

Zip -r ../yourfilename.Zip *

Edit: Si vous utilisez Windows, exécutez la commande suivante dans l'invite de commande ( source ).

compact /c "C:/fullpathtoyourfile" /i /Q
195
Anthony Krivonos

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 demandée 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 sur Zip, il affiche 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.

18
Ashutosh Jha

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

 In this case we expect that all our code will be in <code>bundle.ls</code> file

Cela signifie que le fichier Zip a le fichier bundle.js qui exporte la fonction handler:

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

12
zooblin

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

4
spg

Dans mon cas, l’archive contenait un dossier "src" avec le fichier index.js, je devais donc mettre dans le gestionnaire: "src/index.handler"

 enter image description here

2
Sergey Smolnikov

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
1
Pete

J'ai eu cette erreur quand j'utilisais lambci/lambda:nodejs8.10 dans Windows.

J'avais essayé toutes les solutions énumérées ci-dessus, mais aucune d'entre elles ne pouvait m'aider à résoudre mon problème (même si la pile d'erreurs avait le même aspect que la question).

Voici ma solution simple:

  1. utiliser l'indicateur --entrypoint pour exécuter un conteneur afin de déterminer si le fichier est monté dans le conteneur. Il se peut que je rencontre un problème de partage de disque avec mon Docker Desktop.
  2. J'ai changé mon démon docker la veille, mais tout fonctionne bien sauf ce problème.
  3. Quoi qu'il en soit, remontez mon lecteur sur Docker Desktop, vous pouvez utiliser la commande docker ou simplement ouvrir le paramètre Docker Desktop à appliquer.
0
Dylan L

Dans mon cas, j'ai dû remplacer

exports.handler = function eventHandler (event, context) {

avec

exports.handler = function (event, context, callback) {
0
ianaz