8

仍在等待 AWS 对此的实际支持: https ://github.com/aws-samples/aws-serverless-samfarm/issues/5

这假设如何工作?

我的用例是我有一个 API Gateway 前端 lambda,它将事件写入 SNS 主题。我有另一个订阅该主题的 lambda。

这些 lambda 可以在单独的仓库中吗?是的。首先是使用 pub/sub 模式来分离这两个应用程序的目的的一部分吗?是的。

但这是一个简单的应用程序。该主题不会与其他功能共享,并且整个内容是自包含的。理想情况下,它们应该全部部署在同一个模板中。

我可以轻松地将我想要的所有功能添加到我的 SAM 模板中,但是如何部署它们呢?他们每个人都应该有不同的 CodeURI 吗?这意味着我需要编写脚本复制并将每个 lambdas 依赖项安装到不同的文件夹中,然后将模板中每个 lambda 的 codeuri 指向不同的文件夹。

没有更好的支持吗?

4

1 回答 1

5

您可以AWS::Serverless::Function在一个模板中拥有任意数量的资源,只要它们具有唯一的逻辑 ID。

如果您希望将多个 lambda 函数保留在一个存储库中,则必须CodeUri为每个 lambda 提供不同的函数。例如CodeUri: ./handler-my-lambda-one.zipCodeUri: ./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

以及您的代码(将代码上传到 s3)并部署 cloudformationdeploy的目标。package

package命令负责上传中指定的 zip 工件CodeUri并将其替换s3sam.out.yaml

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,因此您可能会对build每个 lambda 函数有两个命令,并有一些cd ...逻辑来更改每个函数的工作目录

于 2018-09-22T09:53:47.250 回答