需要.zip 文件才能在 Lambda 中包含 npm 模块。而且你真的不应该在任何事情上使用 Lambda 网络编辑器——就像任何生产代码一样,你应该在本地开发、提交到 git 等等。
我的流程:
1) 我的 Lambda 函数通常是大型项目的辅助实用程序,因此我在其中创建了一个 /aws/lambdas 目录来存放它们。
2) 每个单独的 lambda 目录包含一个包含函数代码的 index.js 文件、一个定义依赖关系的 package.json 文件和一个 /node_modules 子目录。 (Lambda 不使用 package.json 文件,只是为了让我们可以在本地运行npm install 命令。)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) 我 .gitignore 所有 node_modules 目录和 .zip 文件,以便从 npm 安装和压缩生成的文件不会弄乱我们的 repo。
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) 我从目录中运行npm install 来安装模块,并在本地开发/测试功能。
5) 我将 lambda 目录压缩并通过控制台上传。
(重要提示:不要使用 Mac 的 Finder 中的“压缩”实用程序来压缩文件!您必须从目录根目录中的 CLI 运行 zip - 请参阅 here)
zip -r ../yourfilename.zip *
注意:
如果您在 Mac 上本地安装节点模块,您可能会遇到问题,因为某些特定于平台的模块在部署到 Lambda 的基于 Linux 的环境时可能会失败。 (见https://stackoverflow.com/a/29994851/165673)
解决方案是在从与您正在使用的 Lambda Node.js 运行时对应的 AMI 启动的 EC2 实例上编译模块(请参阅此Lambda runtimes and their respective AMIs 列表)。
另见AWS Lambda Deployment Package in Node.js - AWS Lambda