我正在尝试创建一个简单的lambda函数,但是遇到了错误。
我的代码基本上是
console.log('Loading function');
exports.handler = function(event, context) {
console.log('value1 =', event.key1);
console.log('value2 =', event.key2);
console.log('value3 =', event.key3);
context.succeed(event.key1); // Echo back the first key value
// context.fail('Something went wrong');
}
在一个helloworld.js文件中。我把它压缩并上传为一个zip文件在创建一个lambda函数一节中,我一直得到这个错误:
{
"errorMessage": "Cannot find module 'index'",
"errorType": "Error",
"stackTrace": [
"Function.Module._resolveFilename (module.js:338:15)",
"Function.Module._load (module.js:280:25)",
"Module.require (module.js:364:17)",
"require (module.js:380:17)"
]
}
有人有什么想法吗?
7条答案
按热度按时间lqfhib0f1#
您的文件名需要与Handler配置中的模块名匹配。在这种情况下,您的Handler应该设置为
helloworld.handler
,其中helloworld
是需要()'d的文件,handler
是导出的函数。然后它应该使用相同的zip文件。jv4diomz2#
确保index.js位于zip文件的根目录中,而不是子目录中。
在我的例子中,模块的名称与文件和导出的处理程序的名称相匹配,真实的的问题是macOS和zip程序,它基本上在zip文件中创建了一个文件夹,因此当在AWS Lambda引擎中解压缩时,index.js在子目录中结束。
使用查找器
不要右键单击并压缩目录,而是选择文件单独的文件,如 index.js,package.json 和 node_modules 目录,然后右键单击以压缩,您可能会在同一目录中得到一个文件Archive.zip。zip文件的名称不会很花哨,但至少当您将其提交到AWS Lambda时它会工作。
使用命令行
在命令行中使用
zip -r function.zip function
也会犯同样的错误,它基本上会创建一个zip文件,其中包含一个名为function
的目录,而不是执行以下操作:如何知道验证您的zip文件
使用finder,如果双击zip文件,它在子目录中解压缩,那么Lambda将无法看到该文件,因为index.js位于该子目录中。
使用命令行和
zipinfo
:注意index.js是如何在子目录
function
中结束的,你搞砸了。注意index.js不在子文件夹中,此zip文件将在AWS Lambda中工作。
利用npm命令压缩函数
因此,我在包中添加了一个脚本,只需运行
npm run zip
就可以压缩项目文件wqlqzqxt3#
这里是一个先进的方法与AWS的CLI。它将保存您的时间在长期使用。
首先,您应该安装和配置AWS CLI:
http://docs.aws.amazon.com/cli/latest/userguide/installing.html
1)创建存档
$ zip -r字符串 *
它将为我们创建lambda.zip文件,其中包含当前位置中的所有文件夹和文件。
2)获取角色ARN
$ aws iam列表角色|grep“您的角色”
它将返回给我们ARN,我们将在lambda中使用它。您应该手动创建它
Example for list-roles
3)创建我们的lambda
$ aws lambda创建函数**--函数名称**“您的lambda名称”--压缩文件文件b:lambda.zip**--处理程序索引处理程序--运行时节点js6.10--超时15--角色**COPY_HERE_YOUR_ARN_FROM_THE_STEP_2
我们完了!
pes8fvy94#
自动化-使用
Grunt
完整的AWS Lambda Seed项目可在Git.上获得
**步骤1:**初始化npm模块
npm init
**步骤2:**安装Grunt
npm install --save-dev grunt grunt-cli
**步骤3:**安装
grunt-aws-lambda
npm install --save-dev grunt-aws-lambda
**步骤4:**为Lambda服务创建文件夹
将您的逻辑/代码保存到
lambdaTest.js
中**步骤5:**创建
Gruntfile.js
导航回根文件夹
touch Gruntfile.js
**步骤6:**创建
awsCredentials.js
使用自定义策略创建AWS IAM用户,自定义策略应有权访问
lambda:GetFunction
、lambda:UploadFunction
、lambda:UpdateFunctionCode
、lambda:UpdateFunctionConfiguration
和iam:PassRole
**第7步:**创建zip并部署到AWS Lambda。
ls-deploy
是由在上面的Gruntfile中创建的自定义任务,它创建源代码的压缩并部署到Lambda。grunt ls-deploy
完整的AWS Lambda Seed项目可在Git.上获得
au9on6nz5#
让我们以一个名为“sample”的文件夹为例,我们要压缩它。让我们假设在sample文件夹中有一些子文件夹或文件。
问:你要做什么?
答:具体步骤如下:
1.进入文件夹“sample”。
1.选择所有需要的文件或子文件夹。
1.右键单击任意一个并选择发送到。
1.您将看到Archive.zip,只需将其保存在您的笔记本电脑中的任何地方。
1.将此zip作为Amazon lambda函数上传。
问:什么不该做?
答:不要压缩“示例”文件夹。它不会工作。
mwg9r5ms6#
当您使用错误的运行库语言时,也会发生同样的错误
uqjltbpv7#
这是因为在exports.handler中,你没有引用索引函数,这可以用一个更简单的方法来解决
试试这个