0
votes

I currently have 2 lambda functions, and I'm trying to make a CI/CD process to them. So I have trying with 2 approaches:

  1. two separate steps on my CI. I have tried to make CloudFormation package and then deploy each lambda, with each of those having their own SAM template and template. but the result is that the only one that will remain on the stack is the last one deployed. i understand that deploy is an smart way that AWS CLI create to do not use create/update stack actions. but it keeps overwriting between them (yes they have different resource name).

  2. having a single sam template and one step in a single repo: I also attempt this in a single repo having both lambdas and a single sam file, but I have duplicate code on my lambdas the difference is that each of them have different set up for which handler to be used.

My goal is to have 2 lambdas in a single stack.

1
Why don't you share the common code? Why duplicate it? Treat them as a single code base.user2534830
Because what im willing to do is to have 2 lambdas in a single stack of cloud formation, not to get assistance refactoring the code.Daniel Vega

1 Answers

0
votes

im going to answer my own question because I notice on the sam template was the key. initially i was doing the sam template like this:

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

what was causing here a "duplicate of the code" was that the lambdas code uri was indicating that should grab all the stuff in the folder that cotained both repos. and telling to go deeper in directories to find the the handler.

so I changed the code uri and the handler and now the lambdas are grabbing just what should be in each lambda. now my sam template looks like this:

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

sorry, now i can see that at the question I was not providing enough info, but i answer to my own question hoping I can help some as lost as I was. Serverless is a nice approach but it does have quiet a learning curves. Regards, Daniel