dc-*_*mpo 5 amazon-web-services aws-lambda aws-lambda-layers
我尝试使用无服务器 Lambda 层,我看过有关它的教程,但结果出现错误“找不到模块......”
service: aws-nodejs
package:
exclude:
- .gitignore
- package.json
- .git/**
provider:
name: aws
profile: sandbox
runtime: nodejs12.x
layers:
testLayer:
path: testLayer
compatibleRuntimes:
- nodejs12.x
allowedAccounts:
- '*'
functions:
hello:
handler: handler.hello
layers:
- arn:aws:lambda:us-east-1:*:layer:testLayer:15
events:
- http:
path: test
method: get
cors: true
Run Code Online (Sandbox Code Playgroud)
当我部署它时,我的终端中没有任何错误,在 AWS 上,我看到了我的层,当我下载它时,我有我的 package.json 和 moment 依赖项,以及带有 moment 的 node_modules 文件夹
我的 handler.js 看起来像这样:
'use strict';
module.exports.hello = async (event, context) => {
const moment = require('moment')
const a = moment('2016-01-01')
return {
statusCode: 200,
body: JSON.stringify({
message: 'Hey' + a
}),
};
};
Run Code Online (Sandbox Code Playgroud)
我的文件结构:
testLayer/
node_modules/
moment/
package.json
serverless.yml
handler.js
package.json
Run Code Online (Sandbox Code Playgroud)
你知道我做错了什么吗?
Rah*_*oel 15
是的,您的节点模块可能位于您的 lambda 层中,但 lambda 抛出“无法找到模块..”的错误。
\n发生这种情况的原因可能是您创建的 zip 不符合AWS 文档中提到的目录结构。
\n根据官方文档:
\n\n\n在层中包含库依赖项您可以通过将运行时\n依赖项放入层中来将其从函数代码中移出。\nLambda 运行时包含 /opt 目录中的路径,以确保\n您的函数代码可以访问包含在\n中的库。 n层。
\n要将库包含在层中,请将它们放置在运行时支持的\n文件夹之一中。
\nNode.js \xe2\x80\x93 nodejs/node_modules、nodejs/node8/node_modules (NODE_PATH)
\n适用于 Node.js 的 AWS X-Ray 开发工具包示例
\nRun Code Online (Sandbox Code Playgroud)\nnodejs/node_modules/aws-xray-sdk\n
确保您的 zip 包含正确的目录结构,否则尝试从以下位置导入模块/opt/your_node_module_directory
| 归档时间: |
|
| 查看次数: |
4246 次 |
| 最近记录: |