【问题标题】:Multiple Lambda functions from the sam.yml filesam.yml 文件中的多个 Lambda 函数
【发布时间】:2019-02-26 05:05:06
【问题描述】:

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

这应该如何工作?

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

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

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

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

没有更好的支持吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation aws-sam-cli aws-sam


    【解决方案1】:

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

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

    还有一个 deploy 目标,它将 package 您的代码(将代码上传到 s3)并部署 cloudformation。

    package 命令负责上传CodeUri 中指定的zip 工件,并在sam.out.yaml 中将其替换为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 ... 逻辑来更改每个函数的工作目录

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多