AWS Lambda-Fehler: „Modul ‘/var/task/index’ kann nicht gefunden werden“

Lesezeit: 5 Minuten

Benutzer-Avatar
Antonius Krivonos

Node.js Alexa-Aufgabenproblem

Ich codiere gerade eine Node.js-Alexa-Aufgabe über AWS Lambda, und ich habe versucht, eine Funktion zu codieren, die Informationen von der OpenWeather-API empfängt und sie in eine aufgerufene Variable parst weather. Der entsprechende Code lautet wie folgt:

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);
}

Ich habe dieses Snippet unzählige Male in Cloud9 und anderen IDEs ausgeführt, und es scheint einwandfrei zu funktionieren. Wenn ich es jedoch in ein Paket komprimiere und es in AWS Lambda hochlade, erhalte ich die folgende Fehlermeldung:

{
    "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)"
    ]
}

Ich habe module-js, request und viele andere Node-Module installiert, die diesen Code ausführen sollten, aber nichts scheint dieses Problem zu beheben. Hier ist mein Verzeichnis, nur für den Fall:

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

Weiß jemand, was das Problem sein könnte?

  • Hier ist die Protokollausgabe für meinen Code: START RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 Version: $LATEST Unable to import module 'index': Error at Function.Module._resolveFilename (module.js:325:15) at Function.Module._load (module.js:276:25) at Module.require (module.js:353:17) at require (internal/module.js:12:17) END RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 REPORT RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 Duration: 55.76 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 16 MB

    – Anthony Krivonos

    20. Januar 2017 um 3:28 Uhr


  • Stellen Sie neben der Antwort zum Komprimieren mit Terminal auf einem Mac auch sicher, dass Ihre Codedatei „index.js“ heißt. Mine hatte einen aussagekräftigeren Namen, wodurch der Fehler generiert wurde.

    – Kunst

    29. April 2017 um 4:27 Uhr

  • @Art Das war mein Problem. Ich habe eine test.js gezippt und es hat einen nicht behandelten Fehler ausgegeben. Nachdem ich es in index.js geändert hatte, funktionierte es gut. Vielen Dank.

    – Hudspeth

    18. Dezember 2018 um 15:31 Uhr

Benutzer-Avatar
Antonius Krivonos

Behoben! Mein Problem war, dass ich versucht habe, die Datei mit der integrierten Komprimierungsfunktion meines Mac im Finder zu komprimieren.

Wenn Sie wie ich ein Mac-Benutzer sind, sollten Sie das folgende Skript im Terminal ausführen, wenn Sie sich im Stammverzeichnis Ihres Projekts befinden (Ordner mit Ihrer index.js, node_modulesusw. Dateien).

zip -r ../yourfilename.zip *

Für Windows:

Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.zip

  • Ich habe so gezippt: “zip -r folder folder.zip” und das ist natürlich fehlgeschlagen. danke für den Tipp, nur die Dateien zu komprimieren und nicht das Verzeichnis

    – Dane Macaulay

    20. März 2017 um 22:52 Uhr


  • Wie wäre es mit Fenstern?

    – Alok Rajasukumaran

    27. Juli 2017 um 8:17 Uhr

  • Achten Sie auch darauf, die Funktion zu benennen index.js

    – Dr. Dirk

    2. August 2017 um 9:19 Uhr


  • Gibt es eine Möglichkeit, dies von außerhalb des Verzeichnisses zu tun?

    – andrhamm

    7. August 2017 um 19:02 Uhr

  • @andrham Ja. Das Format ist zip -r /path/to/destination.zip /path/to/source/directory/*. Das komprimiert den Inhalt des Verzeichnisses. Wenn Sie auch das Verzeichnis selbst komprimieren möchten, verwenden Sie /path/to/source/directory ohne die *.

    – Qas

    8. August 2017 um 23:43 Uhr

Benutzer-Avatar
Ashutosh Jha

Update zur akzeptierten Antwort: Wenn dieser Fehler auftritt, hat Ihre ZIP-Datei nicht die gültige Form, die AWS benötigt.

Wenn Sie auf zip doppelklicken, finden Sie Ihren Ordner in Ihrer Codedatei, aber Lambda möchte, dass beim Doppelklicken auf zip direkte Codedateien angezeigt werden.

Um das zu erreichen:

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

Dann hochladen index.zip zu AWS Lambda.

  • In Windows wirft Git Bas den Fehler “Befehl nicht gefunden”, wie kann man das lösen?

    – Pardeep Jain

    18. November 2017 um 11:06 Uhr

  • Dies ist der Befehl von Ubuntu, bitte googeln Sie es für Windows oder wie Sie eine ZIP-Datei von der Eingabeaufforderung aus erstellen

    – Ashutosh Jha

    18. November 2017 um 13:38 Uhr

Benutzer-Avatar
Zooblin

Überprüfen Sie, ob Dateiname und Handler-Name gleich sind:

kQincbundle.ls befindet”>

Das bedeutet, dass zip Datei hat bundle.js Datei, die exportiert wird handler Funktion:

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

In meinem Fall lag es daran, dass ich die Handler-Datei im inneren src-Verzeichnis hatte.

Ich musste die Eigenschaft „Handler“ in Lambda ändern von:

index.handler

zu

src/index.handler

Dies ist wahrscheinlich ein Berechtigungsproblem mit Dateien in Ihrer Bereitstellungs-ZIP-Datei. Versuchen chmod 777 Ihre Dateien, bevor Sie sie in eine ZIP-Datei packen.

  • Leider scheint das das Problem nicht zu beheben. Ich habe versucht, die zu komprimieren planyr Ordner in einem anderen Ordner ohne Erfolg. Mein Handler-Name und die Haupt-JavaScript-Dateinamen stimmen überein (index).

    – Anthony Krivonos

    20. Januar 2017 um 2:36 Uhr

  • chmod 777 ist ein schlechter Rat … dies öffnet Berechtigungen für die Öffentlichkeit zum Schreiben, Lesen und Ausführen. Bitte finden Sie immer die Routenursache des Problems. Versuchen Sie immer, die Auswirkungen auf die Sicherheit zu verstehen, wenn Sie das ausführen, was Ihnen jemand im Internet sagt. Sicherheit ist wichtig und muss standardmäßig in unserem Code enthalten sein.

    – Exadra37

    14. Februar 2019 um 12:12 Uhr

Benutzer-Avatar
Sergej Smolnikow

In meinem Fall enthielt das Archiv einen Ordner „src“ mit der Datei index.js, also musste ich dem Handler Folgendes hinzufügen: „src/index.handler“

Geben Sie hier die Bildbeschreibung ein

  • Leider scheint das das Problem nicht zu beheben. Ich habe versucht, die zu komprimieren planyr Ordner in einem anderen Ordner ohne Erfolg. Mein Handler-Name und die Haupt-JavaScript-Dateinamen stimmen überein (index).

    – Anthony Krivonos

    20. Januar 2017 um 2:36 Uhr

  • chmod 777 ist ein schlechter Rat … dies öffnet Berechtigungen für die Öffentlichkeit zum Schreiben, Lesen und Ausführen. Bitte finden Sie immer die Routenursache des Problems. Versuchen Sie immer, die Auswirkungen auf die Sicherheit zu verstehen, wenn Sie das ausführen, was Ihnen jemand im Internet sagt. Sicherheit ist wichtig und muss standardmäßig in unserem Code enthalten sein.

    – Exadra37

    14. Februar 2019 um 12:12 Uhr

Benutzer-Avatar
ianaz

In meinem Fall musste ich ersetzen

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

mit

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

1176410cookie-checkAWS Lambda-Fehler: „Modul ‘/var/task/index’ kann nicht gefunden werden“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy