如何在单个cloudformation堆栈上创建2个AWS Lambda?

时间:2018-12-18 22:21:54

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

我目前有2个lambda函数,我正在尝试为其进行CI / CD处理。所以我尝试了两种方法:

  1. 在我的CI上分两个步骤。我尝试制作cloudformation软件包,然后部署每个lambda,每个lambda都有自己的SAM模板和模板。但是结果是,将唯一保留在堆栈中的是部署的最后一个。我知道部署是aws cli create不使用create / update堆栈操作的明智方法。但它们之间会不断覆盖,(是的,它们具有不同的资源名称)

  2. 在单个回购中具有单个sam模板和一个步骤:我也在具有lambda和单个sam文件的单个回购中尝试了此操作,但是我的lambda上有重复的代码,不同之处在于每个他们针对要使用的处理程序设置不同。

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

谢谢,丹尼尔

1 个答案:

答案 0 :(得分:0)

我打算回答我自己的问题,因为我注意到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指示应抓住包含两个存储库的文件夹中的所有内容。并告诉我们更深入的目录以找到处理程序。

所以我更改了代码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

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