2015-07-27 3 views
23

Wie mein Titel erhalte ich die folgende Fehlermeldung erklärt:AWS Lambda-Funktion zurückkehrt noch den Handler in dem config „Can not Modul‚index‘gefunden“ auf Index

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

Ich habe beiden Lösungen versucht, zur Verfügung gestellt in creating-a-lambda-function-in-aws-from-zip-file und simple-node-js-example-in-aws-lambda

Meine Config sieht derzeit wie: enter image description here

und meine Dateistruktur: enter image description here

und meine index.js-Handler-Funktion wie folgt aussieht: oben

exports.handler = function(event, context) { 

Was sonst beiseite dieses Problem verursachen könnte von dem, was in diesen beiden Antworten angegeben wurde? Ich habe beide Lösungen ausprobiert und ich habe auch mehr Speicher für die Funktion zugewiesen, nur weil es nicht laufen konnte.

EDIT - Aus Gründen des Versuchs, ich eine noch einfachere Version meines ursprünglichen Code erstellt und es sah wie folgt aus:

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

Und doch funktioniert immer noch nicht mit dem gleichen Fehler?

+0

Mit genau dem gleichen Problem .... mit Fehler 'Kann Modul nicht finden '/ var/task/index'' während lamdba bootstrap. Danke für die Frage! –

Antwort

44

Versuchen Sie, den Inhalt des Ordners lambda-create-timelapse zu komprimieren und hochzuladen. Nicht der Ordner selbst.

+3

Ich bin nicht sicher, dass dies wirklich die Frage beantwortet. Vielleicht könnten Sie ein bisschen mehr Details geben (warum dies eher ein Provisionierungs- als ein Coding-Problem ist) –

+0

Das war eigentlich die Lösung, die ich selbst benutzt habe. Es ist sehr nervig wie Amazon Worte dies, also war es nicht einfach zu realisieren! –

+3

Wie offizielle Dokumente sagen, können Sie am Ende der Seite Folgendes sehen: Wichtig: Sie komprimieren den Ordnerinhalt, nicht den Ordner selbst http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events -adminuser-create-test-function-create-function.html – tahsintahsin

2

Ich hatte das gleiche Problem vor einiger Zeit - ich habe den Code neu formatiert.

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

exports.handler = lambdafunc1 
+0

Das hat bei mir leider nicht funktioniert. –

0

Correct Lambda Funktionsdeklaration kann wie folgt aussehen:

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

exports.handler = func; 

Sie können andere Syntaxfehler haben, die die index.js Datei verhindern, richtig lief zu sein. Versuchen Sie, Ihren Code lokal mit einer anderen Datei auszuführen und verwenden Sie index.js als Ihr eigenes Modul.

+0

Hat nicht für mich funktioniert, ich habe andere Lambda-Funktionen arbeiten ohne diese Änderung, so dass ich nicht sicher bin, ist das das Problem .. –

+0

Sie müssen weitere Informationen bereitstellen. Was Sie beschrieben haben, kann entweder etwas sehr Triviales oder ein anderer Fehler sein. – kixorz

15

Wenn dies für alle, unklar war anders, hier sind die Schritte:

Schritt 1 Navigieren Sie zu dem Ordner Ihres Projekts, und öffnen Sie den Ordner, so dass Sie in den Ordner sind: Folder

Schritt 2 alle Bilder Wählen Sie in Lambda hochladen möchten: Folder with selected files

Schritt 3 rechte Maustaste und komprimieren die Dateien, die Sie ausgewählt haben: Right-click menu with compress option highlighted


Dies wird Ihnen ein.Zip-Datei, die die Datei, die Sie brauchen, ist zu Lambda hochladen:

Archive.zip output


Es gibt viele Möglichkeiten, dies zu automatisieren, aber dies ist das manuelle Verfahren.

4

Ich selbst lief dieses Problem ein paar Mal, und das hat tatsächlich mit dem Zippen des Ordners statt nur den Inhalt zu tun, wie Sie sollen.

Für diejenigen vom Terminal arbeiten ...

Während INSIDE des Verzeichnisses, in dem die Js Dateien sitzen, führen Sie die folgenden Schritte aus:

zip -r ../zipname.zip *

Die * an den Client anweist Zip alle Inhalte in diesem Ordner, ../zipname.zip sagt ihm, um die Datei zipname.zip zu benennen und es direkt außerhalb dieses aktuellen Verzeichnisses zu platzieren.

Verwandte Themen