为了在Lambda中包含npm模块,需要一个.zip文件。你真的不应该在Lambda Web编辑器中使用任何生产代码,就像任何生产代码一样,你应该在本地开发、提交到git等。
我的流程:
1)我的Lambda函数通常是较大项目的辅助工具,因此我在其中创建一个/aws/lambdas目录来存放它们。
2)每个单独的lambda目录都包含一个index.js文件,其中包含函数代码,一个定义依赖项的package.json文件和一个/node_modules子目录。(package.json文件不被Lambda使用,只是为了我们可以在本地运行npm install命令。)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3)我在.gitignore中忽略了所有的node_modules目录和.zip文件,以便于通过npm安装生成的文件和压缩文件不会混乱我们的存储库。
.gitignore:
.gitignore:
**/node_modules
*.zip
4) 我在目录下执行npm install
命令安装模块,并在本地开发/测试该函数。
5) 我将lambda目录压缩为.zip文件并通过控制台上传。
(重要提示:不要使用Mac Finder中的“压缩”工具压缩文件!您必须从目录根目录内的CLI运行zip命令-请参见这里)
zip -r ../yourfilename.zip *
注意:
如果您在Mac本地安装node模块,由于一些特定于平台的模块可能在部署到Lambda的基于Linux的环境时失败,所以您可能会遇到问题。(请参见https://dev59.com/2F0a5IYBdhLWcg3wva16#29994851)
解决方法是在使用与您正在使用的Lambda Node.js运行时对应的AMI启动的EC2实例上编译这些模块(请参见Lambda运行时及其相应的AMI列表)。
另请参见AWS Lambda中Node.js的部署包 - AWS Lambda