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.
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
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.
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.
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
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:
--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.docker
ou simplement ouvrir le paramètre Docker Desktop à appliquer.Dans mon cas, j'ai dû remplacer
exports.handler = function eventHandler (event, context) {
avec
exports.handler = function (event, context, callback) {