我已经使用基于web的编辑器创建了几个Lambda函数。到目前为止一切顺利。现在我想开始用模块扩展这些模块(比如Q表示承诺)。我不知道如何将模块转换为Lambda,以便它们可以被我的函数使用。
我已经读完了这篇文章,但它似乎涉及到设置一个EC2并从那里运行Lambda函数。在创建函数时,有一种机制可以上传压缩文件,但这似乎涉及到发送本地开发的函数。因为我在基于网络的编辑器中工作,这似乎是一个奇怪的工作流程。
我如何简单地部署一些模块在我的Lambda函数中使用?
我已经使用基于web的编辑器创建了几个Lambda函数。到目前为止一切顺利。现在我想开始用模块扩展这些模块(比如Q表示承诺)。我不知道如何将模块转换为Lambda,以便它们可以被我的函数使用。
我已经读完了这篇文章,但它似乎涉及到设置一个EC2并从那里运行Lambda函数。在创建函数时,有一种机制可以上传压缩文件,但这似乎涉及到发送本地开发的函数。因为我在基于网络的编辑器中工作,这似乎是一个奇怪的工作流程。
我如何简单地部署一些模块在我的Lambda函数中使用?
当前回答
现在您可以使用Lambda Layers来处理这些问题。只需添加一个包含您需要的包的层,它就会完美地运行。
关注这篇文章: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
其他回答
现在在许多ide中,例如:VSC,你可以为AWS安装一个扩展,只需从那里点击上传,而不需要输入所有这些命令+区域。
这里有一个例子:
希望这对你有所帮助,使用无服务器框架你可以做这样的事情:
在无服务器中添加这些东西。yml文件:
plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
- <your package name> (for example: node-fetch)
然后创建你的Lambda函数,通过无服务器部署来部署它,即无服务器中包含的包。Yml会在你身边。
有关无服务器的更多信息:https://serverless.com/framework/docs/providers/aws/guide/quick-start/
现在您可以使用Lambda Layers来处理这些问题。只需添加一个包含您需要的包的层,它就会完美地运行。
关注这篇文章: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e
为了在Lambda中包含npm模块,需要一个.zip文件。你真的不应该在很多事情上使用Lambda web编辑器——就像任何生产代码一样,你应该在本地开发,提交到git等等。
我的流量:
1)我的Lambda函数通常是大型项目的辅助工具,所以我在其中创建了一个/aws/lambdas目录来容纳它们。
2)每个单独的lambda目录包含一个index.js文件,其中包含函数代码,一个包。Json文件定义依赖项,以及/node_modules子目录。(包。json文件不会被Lambda使用,这只是为了让我们可以在本地运行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压缩文件!你必须从命令行中运行zip从根目录-见这里)
zip -r ../yourfilename.zip *
注意:
如果在Mac上本地安装节点模块,可能会遇到问题,因为一些特定于平台的模块在部署到Lambda基于linux的环境时可能会失败。(参见https://stackoverflow.com/a/29994851/165673)
解决方案是在从AMI启动的EC2实例上编译模块,该AMI与您正在使用的Lambda Node.js运行时相对应(请参阅Lambda运行时列表及其各自的AMI)。
请参见Node.js - AWS Lambda中的AWS Lambda部署包
你不能在不上传.zip文件的情况下加载NPM模块,但实际上你可以将这个过程简化为两个快速命令行。
方法如下:
Put your Lambda function file(s) in a separate directory. This is because you install npm packages locally for Lambda and you want to be able to isolate and test what you will upload to Lambda. Install your NPM packages locally with npm install packageName while you're in your separate Lambda directory you created in step #1. Make sure your function works when running locally: node lambdaFunc.js (you can simply comment out the two export.handler lines in your code to adapt your code to run with Node locally). Go to the Lambda's directory and compress the contents, make sure not to include the directory itself. zip -r lambdaFunc.zip . If you have the aws-cli installed, which I suggest having if you want to make your life easier, you can now enter this command: aws lambda update-function-code --function-name lambdaFunc \ --zip-file fileb://~/path/to/your/lambdaFunc.zip (no quotes around the lambdaFunc part above in case you wonder as I did) Now you can click test in the Lambda console. I suggest adding a short alias for both of the above commands. Here's what I have in mine for the much longer Lambda update command: alias up="aws lambda update-function-code --function-name lambdaFunc \ --zip-file fileb://~/path/to/your/lambdaFunc.zip"