Могу ли я добавить триггер codecommit к моей лямбда-функции через CloudFormation - PullRequest
0 голосов
/ 26 апреля 2019

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

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

Спасибо, R

1 Ответ

0 голосов
/ 20 мая 2019

Если вы используете AWS безсерверное преобразование, то вы можете самостоятельно содержать его в лямбда-выражении. Несмотря на то, что преобразование генерирует правило cloudwatch и лямбда-разрешение, так что это в основном то же, что вы упомянули.

тем не менее, вот пример того, что вы хотите

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31


Description: Pipeline which triggers lambda for codecommit changes


Parameters:
  BranchName:
    Default: master
    Description: The GIT branch
    Type: String
  RepositoryName:
    Description: The GIT repository
    Type: String
  StackOwner:
    Description: The stack owner
    Type: String


Resources:

  BasicLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
          Action: sts:AssumeRole
      Path: "/"
      Policies:
        - PolicyName: root
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: logs:*
                Resource: arn:aws:logs:*:*:*
              - Effect: Allow
                Action: '*'
                Resource: '*'

  PipelineTriggerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/trigger
      Handler: codetrigger.handler
      MemorySize: 256
      Role: !GetAtt BasicLambdaRole.Arn
      Runtime: python3.6
      Timeout: 900
      Environment:
        Variables:
          TestVariable: "TestValue"
      Events:
        CodeCommitPushEvent:
          Type: CloudWatchEvent
          Properties:
            Pattern:
              source:
                - aws.codecommit
              resources:
                - !Sub 'arn:aws:codecommit:${AWS::Region}:${AWS::AccountId}:${RepositoryName}'
              detail:
                event:
                  - referenceCreated
                  - referenceUpdated
                repositoryName:
                  - !Ref RepositoryName
                referenceName:
                  - !Ref BranchName
      Tags:
        'owner': !Ref StackOwner
        'task': !Ref RepositoryName

Очевидно, что лучше указывайте роль лямбды и не предоставляйте все разрешения, как показано в примере.

...