AWS Lambda错误的无服务器框架"无法找到模块"

时间:2017-03-18 23:11:57

标签: node.js amazon-web-services aws-lambda aws-sdk serverless-framework

我尝试使用无服务器框架创建使用开放天气NPM模块的Lambda函数。但是,我收到以下异常,但我的node_modules包含特定的库。

我已成功运行示例(https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb),现在正在黑客添加节点模块以集成开放天气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

我的代码

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

6 个答案:

答案 0 :(得分:13)

在执行npm install之前,您在工作目录中serverless deploy了吗? aws-sdk节点模块可用于所有lambda函数,但是对于所有其他节点依赖项,您必须安装它们,以便在部署时将它们与lambda打包在一起。

您可以在无服务器存储库中找到此问题(https://github.com/serverless/serverless/issues/948)。

答案 1 :(得分:2)

如果它适用于这个答案,我不知道,但如果有人只需要刷新大脑,我忘记导出我的处理程序并且正在导出文件,正在寻找不存在的默认导出...

从此改变... handler: foldername/exports

这... handler: foldername/exports.handler

答案 2 :(得分:1)

如果您有外部依赖项,则需要执行程序包部署。 请看这个答案

  

AWS Node JS with Request

参考

  

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

答案 3 :(得分:1)

当我在package.json中将所有内容从devDependencies移到dependencies时,我修复了此错误。

欢呼

答案 4 :(得分:0)

我在无服务器框架上遇到同样的问题,无法部署多个lambda函数。我通过以下步骤修复了

  1. 无论你在handler: foldername/exports.handler
  2. 这样的处理程序中保留什么路径
  3. 将文件夹中的文件命名为exports.js(无论您将处理程序命名为什么)
  4. 运行serverless deploy
  5. 这应该可以解决您的问题

答案 5 :(得分:0)

遇到了同样的问题。使用了无服务器节点模板,但未执行     npm init 之后。