我已经使用基于Web的编辑器创建了多个Lambda函数。到目前为止,一切都很好。我现在想开始使用模块(例如Q for promises)来扩展它们。我不知道如何将模块发布到Lambda,以便我的函数可以使用它们。
我已经读完了它,但似乎涉及设置EC2并从那里运行Lambda函数。创建函数时,有一种上载zip的机制,但这似乎涉及发送本地开发的函数。由于我正在使用基于Web的编辑器,因此这似乎是一个奇怪的工作流程。
如何简单地部署一些模块以供Lambda函数使用?
我已经使用基于Web的编辑器创建了多个Lambda函数。到目前为止,一切都很好。我现在想开始使用模块(例如Q for promises)来扩展它们。我不知道如何将模块发布到Lambda,以便我的函数可以使用它们。
我已经读完了它,但似乎涉及设置EC2并从那里运行Lambda函数。创建函数时,有一种上载zip的机制,但这似乎涉及发送本地开发的函数。由于我正在使用基于Web的编辑器,因此这似乎是一个奇怪的工作流程。
如何简单地部署一些模块以供Lambda函数使用?
Answers:
您不能在不上传.zip
文件的情况下加载NPM模块,但实际上可以将此过程简化为两个快速命令行。
这是如何做:
将Lambda函数文件放在单独的目录中。这是因为您npm
在本地为Lambda 安装了软件包,并且希望能够隔离并测试要上传到Lambda的内容。
npm install packageName
当您在步骤1中创建的单独Lambda目录中时,可以在本地安装NPM软件包。
确保您的函数在本地运行时起作用:(node lambdaFunc.js
您可以简单地注释掉export.handler
代码中的两行,以使代码适合在本地运行Node)。
转到Lambda的目录并压缩内容,确保不包括目录本身。
zip -r lambdaFunc.zip .
如果您已经aws-cli
安装了该软件(如果您想使自己的生活更轻松,建议您安装该软件),现在可以输入以下命令:
aws lambda update-function-code --function-name lambdaFunc \
--zip-file fileb://~/path/to/your/lambdaFunc.zip
(上面的lambdaFunc部分周围没有引号,以防您想像我一样)
现在,您可以在Lambda控制台中单击“ 测试 ”。
我建议为上述两个命令添加一个简短的别名。这是我的Lambda update命令更长的内容:
alias up="aws lambda update-function-code --function-name lambdaFunc \
--zip-file fileb://~/path/to/your/lambdaFunc.zip"
aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://~/path/to/your/lambdaFunc.zip
--zip-file fileb://
vs--zip-file file://
--zip-file fileb:
代替file
了我。2)在MacOS上似乎带有3个斜线,例如fileb:///Users/wio/Documents
.zip
为了在Lambda中包含npm模块,需要一个文件。而且您实际上不应该将Lambda Web编辑器用于任何事情-像任何生产代码一样,您应该在本地进行开发,提交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安装和压缩生成的文件不会使我们的仓库混乱。
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4)我npm install
从目录中运行以安装模块,并在本地开发/测试功能。
5)我压缩了lambda目录并通过控制台将其上传。
(重要:请勿使用Finder中Mac的'compress'实用程序来压缩文件!您必须从目录根目录中的CLI运行zip -参见此处)
zip -r ../yourfilename.zip *
注意:
如果在Mac上本地安装节点模块,则可能会遇到问题,因为某些平台特定的模块在部署到Lambda的基于Linux的环境中时可能会失败。(请参阅https://stackoverflow.com/a/29994851/165673)
解决方案是在从与您使用的Lambda Node.js运行时相对应的AMI启动的EC2实例上编译模块(请参阅此Lambda运行时及其各自的AMI列表)。
现在,您可以使用Lambda图层来解决此问题。只需添加一个包含所需软件包的层,它将完美运行。
跟随这篇文章:https : //medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
希望这对您有所帮助,借助无服务器框架,您可以执行以下操作:
plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
- <your package name> (for example: node-fetch)
2.然后创建您的Lambda函数,通过进行部署serverless deploy
,serverless.yml中包含的软件包将为您提供。
有关无服务器的更多信息:https : //serverless.com/framework/docs/providers/aws/guide/quick-start/
serverless plugin install --name pluginName
npm模块必须捆绑在nodejs包中,并以zip格式上传到AWS Lambda Layers,然后您需要按以下方式引用模块/ js并使用其中的可用方法。const mymodule = require('/ opt / nodejs / MyLogger');