jst*_*hng 48 javascript amazon-web-services node.js aws-lambda
我正在尝试创建一个简单的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');
}
Run Code Online (Sandbox Code Playgroud)
在helloworld.js文件中.我将其压缩并在创建lambda函数部分时将其作为zip文件上传,并且我不断收到此错误:
{
"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)"
]
}
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
Jam*_*mes 67
您的文件名称需要与Handler配置中的模块名称匹配.在这种情况下,应将Handler设置为helloworld.handler,helloworldrequire()'d的文件在哪里,并且handler是导出的函数.然后它应该使用相同的zip文件.

bit*_*voc 56
确保index.js位于zipfile的根目录中,而不是在子目录中.
在我的情况下,我有模块的名称与文件的名称和导出的处理程序匹配,真正的问题是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 function.zip index.js package.json node_modules
adding: index.js (deflated 47%)
adding: package.json (deflated 36%)
adding: node_modules/ (stored 0%)
Run Code Online (Sandbox Code Playgroud)
使用finder,如果双击zip文件并在子目录中解压缩,则Lambda将无法看到该文件,因为index.js位于该子目录中.
使用命令行和zipinfo:
$ zipinfo function.zip | grep index.js | more
-rw-r--rw- 2.1 unx 1428 bX defN 27-Jul-16 12:21 function/index.js
Run Code Online (Sandbox Code Playgroud)
注意index.js如何在子目录中结束function,你搞砸了.
$ zipinfo function.zip | grep index.js | more
-rw-r--rw- 3.0 unx 1428 tx defN 27-Jul-16 12:21 index.js
Run Code Online (Sandbox Code Playgroud)
请注意,index.js不在子文件夹中,此zip文件可在AWS Lambda中使用.
所以我在我的包中添加了一个脚本,只需运行即可为我压缩项目文件 npm run zip
{
"name": "function",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"zip": "zip function.zip package.json *.js node_modules"
},
"dependencies": {
"aws-sdk": "^2.4.10"
}
}
$ npm run zip
> function@1.0.0 zip
> zip function.zip package.json *.js node_modules
adding: package.json (deflated 41%)
adding: index.js (deflated 47%)
adding: local.js (deflated 42%)
adding: node_modules/ (stored 0%)
Run Code Online (Sandbox Code Playgroud)
小智 6
这是使用AWS CLI的高级方法。它将节省您长期使用的时间。
首先,您应该安装和配置AWS CLI:
http://docs.aws.amazon.com/cli/latest/userguide/installing.html
1)建立档案
$ zip -r lambda *
它将为我们创建lambda.zip文件,其中所有文件夹和文件都位于当前位置。
2)获取角色ARN
$ aws iam list-roles | grep“ your_role”
它会返回给我们与我们的lambda一起使用的ARN。你应该用手创造它
3)创建我们的lambda
$ aws lambda创建函数-函数名称 “ your_lambda_name” -zip文件 fileb://lambda.zip --handler index.handler --runtime nodejs6.10 --timeout 15 --role COPY_HERE_YOUR_ARN_FROM_THE_STEP_2
我们完了!
| 归档时间: |
|
| 查看次数: |
31323 次 |
| 最近记录: |