sam.yml 文件中的多个 Lambda 函数
Multiple Lambda functions from the sam.yml file
仍在等待 AWS 对此的实际支持:
https://github.com/aws-samples/aws-serverless-samfarm/issues/5
这应该如何工作?
我的用例是我有一个 API 网关前端 lambda,它将事件写入 SNS 主题。我有另一个订阅该主题的 lambda。
这些 lambda 可以在单独的 repos 中吗?是的。首先使用 pub/sub 模式来分隔这两个应用程序的部分目的是什么?是的。
但这是一个简单的应用程序。该主题不会与其他功能共享,并且整个内容都是独立的。理想情况下,它们应该一起部署在同一个模板中。
我可以轻松地将我想要的所有功能添加到我的 SAM 模板中,但我该如何部署它们?他们每个人都应该有不同的 CodeURI 吗?这意味着我需要编写脚本复制并将每个 lambda 依赖项安装到不同的文件夹中,然后将模板中每个 lambda 的 codeuri 指向不同的文件夹。
这个没有更好的支持吗?
您可以在一个模板中拥有任意数量的 AWS::Serverless::Function
资源,只要它们具有唯一的逻辑 ID。
如果您希望将多个 lambda 函数保存在一个存储库中,则必须为每个 lambda 提供不同的 CodeUri
。例如 CodeUri: ./handler-my-lambda-one.zip
和 CodeUri: ./handler-my-lambda-two.zip
。
通常,在你的存储库中有一个 Makefile
是一个很好的做法,它有一个 build
目标负责准备 handler-my-lambda-*.zip
类似的东西:
build:
rm -rf node_modules
npm install
zip -r handler.zip index.js lib node_modules
和一个 deploy
目标,它将 package
您的代码(将代码上传到 s3)并部署 cloudformation。
package
命令负责上传CodeUri
中指定的zip神器,并在sam.out.yaml
[=27]中替换为s3
URL =]
deploy:
aws cloudformation package \
--template-file sam.yaml \
--output-template-file sam.out.yaml \
--s3-bucket my-artifact-bucket-name
aws cloudformation deploy \
--template-file sam.out.yaml
既然你决定在一个存储库中有多个 lambda,你可能会对每个 lambda 函数有两个 build
命令和一些 cd ...
逻辑来改变每个函数的工作目录
仍在等待 AWS 对此的实际支持: https://github.com/aws-samples/aws-serverless-samfarm/issues/5
这应该如何工作?
我的用例是我有一个 API 网关前端 lambda,它将事件写入 SNS 主题。我有另一个订阅该主题的 lambda。
这些 lambda 可以在单独的 repos 中吗?是的。首先使用 pub/sub 模式来分隔这两个应用程序的部分目的是什么?是的。
但这是一个简单的应用程序。该主题不会与其他功能共享,并且整个内容都是独立的。理想情况下,它们应该一起部署在同一个模板中。
我可以轻松地将我想要的所有功能添加到我的 SAM 模板中,但我该如何部署它们?他们每个人都应该有不同的 CodeURI 吗?这意味着我需要编写脚本复制并将每个 lambda 依赖项安装到不同的文件夹中,然后将模板中每个 lambda 的 codeuri 指向不同的文件夹。
这个没有更好的支持吗?
您可以在一个模板中拥有任意数量的 AWS::Serverless::Function
资源,只要它们具有唯一的逻辑 ID。
如果您希望将多个 lambda 函数保存在一个存储库中,则必须为每个 lambda 提供不同的 CodeUri
。例如 CodeUri: ./handler-my-lambda-one.zip
和 CodeUri: ./handler-my-lambda-two.zip
。
通常,在你的存储库中有一个 Makefile
是一个很好的做法,它有一个 build
目标负责准备 handler-my-lambda-*.zip
类似的东西:
build:
rm -rf node_modules
npm install
zip -r handler.zip index.js lib node_modules
和一个 deploy
目标,它将 package
您的代码(将代码上传到 s3)并部署 cloudformation。
package
命令负责上传CodeUri
中指定的zip神器,并在sam.out.yaml
[=27]中替换为s3
URL =]
deploy:
aws cloudformation package \
--template-file sam.yaml \
--output-template-file sam.out.yaml \
--s3-bucket my-artifact-bucket-name
aws cloudformation deploy \
--template-file sam.out.yaml
既然你决定在一个存储库中有多个 lambda,你可能会对每个 lambda 函数有两个 build
命令和一些 cd ...
逻辑来改变每个函数的工作目录