我使用基于Web的编辑器创建了几个Lambda函数.到现在为止还挺好.我现在想开始扩展模块(例如Q for promises).我无法弄清楚如何将模块输出到Lambda,以便它们可以被我的函数使用.
我已经读完了这个但似乎涉及设置EC2并从那里运行Lambda函数.在创建函数时有一种上传zip的机制,但这似乎涉及发送本地开发的函数.因为我在基于Web的编辑器中工作,这似乎是一个奇怪的工作流程.
如何简单地部署一些模块以用于我的Lambda函数?
我很确定你无法在不上传.zip
文件的情况下加载NPM模块.
但实际上,您可以将此过程分为两个快速命令行.
这是如何做:
将Lambda函数文件放在单独的目录中.这是因为您npm
在本地为Lambda 安装软件包,并且您希望能够隔离并测试要上传到Lambda的内容.
npm install packageName
当您在步骤1中创建的单独Lambda目录中时,在本地安装NPM软件包.
确保您的函数在本地运行时有效:( node lambdaFunc.js
您可以简单地注释掉export.handler
代码中的两行,以使代码适应本地运行的Node).
好的,你的Lambda包有效.在您的Lambda包的目录中使用诸如aws-cli
while之类的命令将其压缩.确保不压缩目录本身,但内容的目录.
如果你已经.zip
安装了,我建议如果你想让你的生活更轻松,你现在可以输入这个命令:
zip -r lambdaFunc.zip .
(如果你不知道我做了什么,在上面的lambdaFunc部分没有引号)
现在,您可以在Lambda控制台中单击test.
我建议为上述两个命令添加一个简短的别名.以下是我用于更长时间Lambda更新命令的内容:
aws lambda update-function-code --function-name lambdaFunc \ --zip-file fileb://~/path/to/your/lambdaFunc.zip
.zip
需要一个文件才能在Lambda中包含npm模块.你真的不应该使用多大的任何东西-拉姆达网页编辑器与任何生产代码,您应在当地开发,承诺与git等
1)我的lambda函数通常是一个较大的项目帮助工具,所以我创建了一个/ AWS/lambda表达式内的目录,以存放它们.
2)每个单独的拉姆达目录包含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)我安装模块,在本地开发和测试
5)我.zip lambda目录并通过控制台上传.
(重要提示:不要使用来自Finder的Mac''compress'实用程序压缩文件!您必须从目录的根目录中通过CLI运行zip-请参阅此处)
zip -r ../yourfilename.zip *
另请参阅Node.js中的AWS Lambda部署包 - AWS Lambda
注意:
您可能遇到像PhantomJS这样的模块构建特定于操作系统的二进制文件的问题,因此在OSX上本地构建的节点包最终会在Lambda中失败.
我在这里找到的答案是使用这些脚本在Docker容器中构建它.
希望这对您有所帮助,借助无服务器框架,您可以执行以下操作:
将这些内容添加到您的serverless.yml文件中:
plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
-
2.然后创建您的Lambda函数,通过进行部署serverless deploy
,serverless.yml中包含的软件包将为您提供。
有关无服务器的更多信息:https : //serverless.com/framework/docs/providers/aws/guide/quick-start/