Serverless Framework with AWS Lambda error "Cannot find module"

51,323

Solution 1

Did you npm install in your working directory before doing your serverless deploy? The aws-sdk node module is available to all lambda functions, but for all other node dependencies you must install them so they will be packaged with your lambda when you deploy.

You may find this issue on the serverless repository helpful (https://github.com/serverless/serverless/issues/948).

Solution 2

I fixed this error when in package.json I moved everything from devDependencies to dependencies.

Cheers

Solution 3

I don't if it applies to this answer but in case someone just needs a brain refresh I forgot to export my handler and was exporting the file with was looking for a default export that didn't exist...

changed from this... handler: foldername/exports

to this... handler: foldername/exports.handler

Solution 4

You need to do the package deployment in case you have external dependencies. Please see this answer

AWS Node JS with Request

Reference

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

Solution 5

I have the same problem with serverless framework to deploy multiple lambda functions. I fixed by the following steps

  1. Whatever you keep the path at the handler like handler: foldername/exports.handler
  2. Name the file inside the folder as exports.js(whatever you name the handler)
  3. run serverless deploy

This should solve your problem

Share:
51,323
Charith De Silva
Author by

Charith De Silva

Updated on February 16, 2022

Comments

  • Charith De Silva
    Charith De Silva about 2 years

    I'm trying to use the Serverless Framework to create a Lambda function that uses open weather NPM module. However, I'm getting the following exception, but my node_modules contain the specific library.

    I have managed to run the sample, (https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb) successfully, now hacking to add node module to integrate open weather API.

    Endpoint response body before transformations: {"errorMessage":"Cannot find module 'Openweather-Node'","errorType":"Error","stackTrace":["Module.require (module.js:353:17)","require (internal/module.js:12:17)","Object.<anonymous> (/var/task/todos/weather.js:4:17)","Module._compile (module.js:409:26)","Object.Module._extensions..js
    

    My code

    'use strict';
    
      const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies
      var weather = require('Openweather-Node');
    
      const dynamoDb = new AWS.DynamoDB.DocumentClient();
    
      module.exports.weather = (event, context, callback) => {
        const params = {
          TableName: process.env.DYNAMODB_TABLE,
          Key: {
            id: event.pathParameters.id,
          },
        };
    
        weather.setAPPID("mykey");
        //set the culture
        weather.setCulture("fr");
        //set the forecast type
        weather.setForecastType("daily");
    
        const response = {
          statusCode: 200,
          body: "{test response}",
        };
        callback(null, response);          
      };