4

我正在使用无服务器框架以及 lambda 层和一些 lambdas 函数。为了支持某些功能,我必须包含 aws-sdk。

aws-sdk 的 lambda 层大小为 80MB,而 aws-sdk 单独占用 40MB。

我所知道的是 Lambda 函数默认包含 aws-sdk。但这是否也意味着 lambda 层?

笔记

  • 我试图删除 aws-sdk 并部署,但 lambda 函数显示错误“找不到模块 aws-sdk”
  • NODE_PATH: "./:/opt/node_modules" 包含在 serverless.yml 中(这是否会导致 aws-sdk 默认不包含在内)?
  • 运行时是 nodejs10.x
4

1 回答 1

5

Lambda 层使您能够将额外的代码和内容提取到 AWS Lambda 函数的执行环境中。

默认情况下,Node.js Lambda 运行时环境为您提供 AWS JavaScript 开发工具包的一个版本。但作为最佳实践,实际上,因为您可能希望使用最新版本的开发工具包的新功能,这些功能不属于自动包含在 Lambda 执行环境中的版本,您可以打包所需的 AWS JavaScript 开发工具包版本稍后进入 Lambda,以便它覆盖执行环境中存在的 SDK 版本。

就是这样:

mkdir lambda-layer
cd lambda-layer/
npm install aws-sdk
mkdir nodejs
mv node_modules/ nodejs/
zip -r aws-sdk.zip nodejs/

aws lambda publish-layer-version --layer-name aws-sdk --zip-file fileb://aws-sdk.zip --compatible-runtimes nodejs10.x --description "My AWS SDK"

正如上面的输出所报告的,这个 Lambda 层的大小是 6.1 兆字节aws lambda publish-layer-version

于 2019-11-05T04:48:09.863 回答