amazon-web-services - 调用 API“找不到模块”时出现 AWS lambda 层错误
问题描述
我尝试使用 AWS 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
当我部署它时,我的终端没有任何错误,在 AWS 上,我看到了我的层,当我下载它时,我有我package.json
的时刻依赖,以及 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
}),
};
};
我的文件结构:
testLayer/
node_modules/
moment/
package.json
serverless.yml
handler.js
package.json
你知道我做错了什么吗?
解决方案
是的,您的节点模块可能在您的 lambda 层中,但 lambda 抛出“找不到模块..”的错误。
这可能是因为您创建的 zip 与AWS 文档中提到的目录结构不同。
根据官方文档:
在层中包含库依赖项 您可以将运行时依赖项从函数代码中移出,方法是将它们放在层中。Lambda 运行时在 /opt 目录中包含路径,以确保您的函数代码可以访问层中包含的库。
要将库包含在层中,请将它们放在运行时支持的文件夹之一中。
Node.js – nodejs/node_modules, nodejs/node8/node_modules (NODE_PATH)
适用于 Node.js 的示例 AWS X-Ray 开发工具包
nodejs/node_modules/aws-xray-sdk
确保您的 zip 包含正确的目录结构,否则尝试从/opt/your_node_module_directory
推荐阅读
- c - 字符无法正确比较
- java - 将用户输入字符串转换为类名
- asp.net - 我从 Listview 中获取复选框值一无所获
- .net - CosmsDB 查询日期字段
- ios - 我可以创建一个只能访问特定 IP 的 IOS 应用程序吗?
- python - 按任意间隔对时间索引的 DataFrame 进行分组
- windows-10 - 在 Windows 10 IoT Core 中禁用自动隐藏滚动条
- restfb - RestFB - 如何从收到的用户访问令牌中验证应用程序 ID
- reactjs - undefined 不是对象(评估'_this2.props.navigation')或与其他导航相比结果不一致
- asp.net - PageAsyncTask 与仅调用 await