当代码作为 zip 文件上传时,模块 'awslambda' 上缺少处理程序

Handler missing on module 'awslambda' when code uploaded as zip file

我将此代码保存在一个名为 awslambda.js

的文件中
console.log('Loading function');

exports.bullion = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));
    var message = event.Records[0].Sns.Message;
    console.log('From SNS:', message);
    context.succeed(message);
};

我把它压缩成这样:

bullion $ unzip -l target/bullion-dev-for-lambda.zip
Archive:  target/bullion-dev-for-lambda.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
      268  02-05-16 10:39   awslambda.js
 --------                   -------
      268                   1 file

我将其上传到 AWS Lambda 并将处理程序配置为

awslambda.bullion

我测试了这个函数,我得到了

{
  "errorMessage": "Handler 'bullion' missing on module 'awslambda'"
}

如果我在 Lambda 函数中键入相同的代码,它就可以工作! zip 文件上传有什么特殊情况?

最常见的错误是您压缩了文件夹,而不是:

zip contains:  
 - awslambda.js  
 - otherFiles.js

你现在明白了:

zip contains:  
 - foldername/  
   - awslambda.js  
   - otherFiles.js

例如,文件夹在 zip 中(包含代码)而不是文件夹的内容。文件夹本身不应压缩,因此 awslambda.js 文件位于压缩文件的根目录中。

要解决此问题:不要压缩文件夹(右键单击 -> 压缩),而是打开文件夹,select 所有文件,然后右键单击 -> 压缩。

答案似乎是 'awslambda' 已经是 Lambda 环境中的一个模块。当我将文件从 awslambda.js 更改为 bullionAwsLambda.js,并相应地更改处理程序时,它起作用了。

一个让我浪费了很多时间的偷偷摸摸的人!