Как создать 2 AWS-лямбды в одном стеке CloudFormation? - PullRequest
0 голосов
/ 19 декабря 2018

В настоящее время у меня есть 2 лямбда-функции, и я пытаюсь создать для них процесс CI / CD.Итак, у меня есть два подхода:

  1. два отдельных шага для моего CI.Я попытался создать пакет CloudFormation, а затем развернуть каждую лямбду, каждый из которых имеет свой собственный шаблон SAM и шаблон.но результат в том, что единственный, который останется в стеке, будет последним развернутым.Я понимаю, что развертывание - это умный способ, который AWS CLI создает, чтобы не использовать действия стека создания / обновления.но он продолжает перезаписывать между ними (да, у них другое имя ресурса).

  2. с одним шаблоном sam и одним шагом в одном репо: я также пытаюсь сделать это в одном репо, имеющем обалямбды и один файл sam, но у меня есть дубликаты кода на моих лямбдах, разница в том, что у каждого из них свои настройки для каждого используемого обработчика.

Моя цель - иметь2 лямбды в одной стопке.

1 Ответ

0 голосов
/ 20 декабря 2018

Я собираюсь ответить на свой вопрос, потому что я заметил, что в шаблоне 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 и обработчик, и теперь лямбды захватывают только то, что должно быть в каждой лямбде.теперь мой шаблон 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

извините, теперь я вижу, что на вопрос я не предоставил достаточно информации, но я отвечаю на свой вопрос, надеясь, что смогу помочь некоторым так же потерянным, как и я.Безсерверный - это хороший подход, но у него есть спокойные кривые обучения.С уважением, Даниэль

...