【问题标题】:How to create 2 AWS lambdas on a single CloudFormation stack?如何在单个 CloudFormation 堆栈上创建 2 个 AWS lambda?
【发布时间】:2019-05-19 09:34:10
【问题描述】:

我目前有 2 个 lambda 函数,我正在尝试为它们创建一个 CI/CD 流程。所以我尝试了两种方法:

  1. 我的 CI 上有两个单独的步骤。我尝试制作 CloudFormation 包,然后部署每个 lambda,每个 lambda 都有自己的 SAM 模板和模板。但结果是,唯一留在堆栈上的是最后一个部署的。我了解部署是 AWS CLI 创建不使用创建/更新堆栈操作的一种智能方式。但它一直在它们之间覆盖(是的,它们有不同的资源名称)。

  2. 在单个 repo 中有一个 sam 模板和一个步骤:我也在一个同时具有 lambdas 和单个 sam 文件的 repo 中尝试这样做,但我的 lambdas 上有重复的代码,不同之处在于每个对于要使用的处理程序,它们有不同的设置。

我的目标是在一个堆栈中包含 2 个 lambda。

【问题讨论】:

  • 为什么不分享通用代码呢?为什么要复制它?将它们视为单个代码库。
  • 因为我愿意做的是在单个云形成堆栈中拥有 2 个 lambda,而不是获得重构代码的帮助。

标签: amazon-web-services aws-lambda continuous-integration amazon-cloudformation


【解决方案1】:

我要回答我自己的问题,因为我注意到 sam 模板是关键。 最初我是这样做 sam 模板的:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  certainty:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: ./myfunc/index.handler
      Runtime: nodejs8.10
      CodeUri: .
      Description: >-
        here goes 
        my description
      MemorySize: 128
      Timeout: 20
      Role: 'arn:aws:iam::116738426468:role/rolename'
      Events:
        Schedule1:
          Type: Schedule
          Properties:
            Schedule: rate(1 day)

  certaintyauxiliar:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: my-other-func/index.handler
      Runtime: nodejs8.10
      CodeUri: .
      Description: >-
        blabla
        blabla.
      MemorySize: 1152
      Timeout: 300
      Role: 'arn:aws:iam::116738426468:role/roleanme'
      Events:
        Api1:
          Type: Api
          Properties:
            Path: /show-all
            Method: POST

这里导致“代码重复”的原因是 lambdas 代码 uri 指示应该抓取包含两个 repos 的文件夹中的所有内容。并告诉深入目录以找到处理程序。

所以我更改了代码 uri 和处理程序,现在 lambda 正在抓取每个 lambda 中应该包含的内容。现在我的 sam 模板看起来像这样:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  certainty:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: ./my-func
      Description: >-
        here goes 
        my description
      MemorySize: 128
      Timeout: 20
      Role: 'arn:aws:iam::116738426468:role/roleName'
      Events:
        Schedule1:
          Type: Schedule
          Properties:
            Schedule: rate(1 day)

  certaintyauxiliar:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: ./my-other-func
      Description: >-
        bla bla
        bla bla
      MemorySize: 1152
      Timeout: 300
      Role: 'arn:aws:iam::116738426468:role/rolename'
      Events:
        Api1:
          Type: Api
          Properties:
            Path: /path
            Method: POST

抱歉,现在我可以看到我没有提供足够的信息,但我回答了我自己的问题,希望我能帮助一些像我一样迷失的人。无服务器是一种不错的方法,但它确实有一个安静的学习曲线。 问候,丹尼尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2016-07-17
    • 2022-06-10
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2021-12-07
    相关资源
    最近更新 更多