简体   繁体   中英

AWS Lambda function returning Runtime.HandlerNotFound error

I am new to AWS Lambdas - I am trying to write a lambda function to retrieve some data from firebase. I have called this function exports.handler and uploaded it to the Lambda with the node modules as a Zip file. However, when I try to run it, it returns the following error:

{
  "errorType": "Runtime.HandlerNotFound",
  "errorMessage": "index.handler is undefined or not exported",
  "trace": [
    "Runtime.HandlerNotFound: index.handler is undefined or not exported",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:144:11)",
    "    at Object.<anonymous> (/var/runtime/index.js:43:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:1156:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)",
    "    at Module.load (internal/modules/cjs/loader.js:1000:32)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:899

Here is my function:

module.exports.handler = async (event) =>{
    ref.on("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            responses.push({
                date: childSnapshot.val().Date,
                name:childSnapshot.val().name,
                response: childSnapshot.val().response
            })
        });
        printObjects(responses);
        console.log(json(responsesByPerson));
    })
})

I have looked at the other answers to questions similar to mine and implemented some of those solutions but none have worked.

When we zip a directory the shell directory is also added to the zip while the Lambda expects it to be without the shell directory. Use the below command to create the zip correctly.

$ cd my_lambda_fun
$ zip -r lambda_one.zip .

You have to make sure that you don't zip your project but the contents of your project.

For eg, if your index.js is directly inside my-project , you should $> cd my-project and then create a zip with the contents. This zip can then be uploaded to AWS Lambda.

I hope this helps!

Ensure index.js is in the root of the Lambda function directory

zip -r lambda_one.zip. worked for me

Some of the answers here are indeed correct, but if you're like me and trying to do this from Windows then it should be noted that $ zip -r lambda_one.zip. will not work from PowerShell as it will in Linux and macOS.

The workaround was simply to zip the folders + files manually in the file explorer:

  1. Select folders + files to be zipped
  2. Right click > Send to > Compressed (zipped) folder
  3. Rename it to whatever you need, then proceed with uploading it to Lambda when you create your function.

This was one error I also got while Trying to execute the NodeJs Code. The following are the points we need to take care:

  1. Lambda Handler must be "filename.handler"
  2. filename.js must Exist in the Root Directory of the Zip Folder that would be uploaded to Lambda Function.
  3. While creating the Zip Folder - Open the Folder and use "Select All" before using "Send To" Compressed.(The benefit is the filename.js would be reflected in the Root itself, rather than Creating Zip folder for the Application Project Folder). This has worked, for the Lambda function Execution for NodeJS Project.

before the this line def handler(event, context):

if you have any imports, then remove those. It should work.

Be careful for not being using a wrong Running engine like NodeJS but writing code in Python or something of that nature. Go to the Lambda function info link and select the correct Running Engine for your development.

Make sure to name your handler file as index.js other you will get this error

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM