AWS Lambda Error: "Cannot find module '/var/task/index'"

Javascriptnode.jsAmazon Web-ServicesRequestAws Lambda

Javascript Problem Overview


Node.js Alexa Task Issue

I'm currently coding a Node.js Alexa Task via AWS Lambda, and I have been trying to code a function that receives information from the OpenWeather API and parses it into a variable called weather. The relevant code is as follows:

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

I ran this snippet countless times in Cloud9 and other IDEs, and it seems to be working flawlessly. However, when I zip it into a package and upload it to AWS Lambda, I get the following error:

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

I installed module-js, request, and many other Node modules that should make this code run, but nothing seems to fix this issue. Here is my directory, just in case:

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

Does anyone know what the issue could be?

Javascript Solutions


Solution 1 - Javascript

Fixed it! My issue was that I tried to zip the file using my Mac's built-in compression function in Finder.

If you're a Mac user, like me, you should run the following script in terminal when you are in the root directory of your project (folder containing your index.js, node_modules, etc. files).

zip -r ../yourfilename.zip *

For Windows:

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

Solution 2 - Javascript

Update to the accepted answer: When this error occurs, it means your zip file is not in the valid form which AWS requires.

If you double click on zip you will find your folder inside that your code file,but lambda wants that when you double click on zip it shoud show direct code files.

To achieve this:

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

Then, upload index.zip to AWS Lambda.

Solution 3 - Javascript

Check that file name and handler name are same:

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

That means that zip file has bundle.js file that exports handler function:

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

Solution 4 - Javascript

In my case it was because I had the handler file in inner src directory.

I had to change the 'Handler' property within Lambda from:

index.handler

to

src/index.handler

Solution 5 - Javascript

This is probably a permissions issue with files inside your deployment zip. Try chmod 777 your files before packaging them in a zip file.

Solution 6 - Javascript

In my case the archive contained a folder "src" with index.js file, so I had to put to the handler: "src/index.handler"

enter image description here

Solution 7 - Javascript

In my case I had to replace

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

with

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

Solution 8 - Javascript

I got this error when I was using lambci/lambda:nodejs8.10 in windows.

I'd tried all of the solution listed above but none of which could help me deal with my issue(even though the error stack look the same as the question).

Here is my simple solution:

  1. using --entrypoint flag to run a container to find out if the file is mounted into the container. It turns out I may got the share drive issue with my Docker Desktop.
  2. I switched my docker daemon that day before, but everything works fine except this problem.
  3. Anyway, remount my drive to Docker Desktop, you can both use the docker command or just open the Docker Desktop setting to apply.

Solution 9 - Javascript

In my case this was caused by Node running out of memory. I fixed that by adding --memory-size 1500 to my aws lambda create-function ... command.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnthony KrivonosView Question on Stackoverflow
Solution 1 - JavascriptAnthony KrivonosView Answer on Stackoverflow
Solution 2 - JavascriptAshutosh JhaView Answer on Stackoverflow
Solution 3 - JavascriptzooblinView Answer on Stackoverflow
Solution 4 - JavascriptPeteView Answer on Stackoverflow
Solution 5 - JavascriptspgView Answer on Stackoverflow
Solution 6 - JavascriptSergey SmolnikovView Answer on Stackoverflow
Solution 7 - JavascriptianazView Answer on Stackoverflow
Solution 8 - JavascriptDylanView Answer on Stackoverflow
Solution 9 - JavascriptSamuli PahaojaView Answer on Stackoverflow