Aws lambda 我可以通过CloudFormation向lambda函数添加codecommit触发器吗

Aws lambda 我可以通过CloudFormation向lambda函数添加codecommit触发器吗,aws-lambda,amazon-cloudformation,aws-codecommit,Aws Lambda,Amazon Cloudformation,Aws Codecommit,我在写一个lambda函数,我想由某人更新回购协议的主分支触发。该账户上已存在回购协议 在cloudformation中有没有一种方法可以将触发器添加到lambda函数中?我想在一个小插曲中,我可以使用一些cloudwatch规则来触发lambda,但我更愿意将其全部保存在lambda中 谢谢 R如果您使用的是AWS无服务器转换,则可以在lambda中自行包含它。虽然转换生成了cloudwatch规则和lambda权限,但基本上与您提到的相同 然而,这里有一个例子,你想做什么就做什么 AWSTe

我在写一个lambda函数,我想由某人更新回购协议的主分支触发。该账户上已存在回购协议

在cloudformation中有没有一种方法可以将触发器添加到lambda函数中?我想在一个小插曲中,我可以使用一些cloudwatch规则来触发lambda,但我更愿意将其全部保存在lambda中

谢谢
R

如果您使用的是AWS无服务器转换,则可以在lambda中自行包含它。虽然转换生成了cloudwatch规则和lambda权限,但基本上与您提到的相同

然而,这里有一个例子,你想做什么就做什么

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

显然,要更好地指定lambda角色,而不是像示例中提供的那样授予所有权限

Codecommit repo是否驻留在Cloudformation模板中?如果不是,您可能需要使用cloudwatch解决方案规则,因为添加codecommit触发器的唯一方法似乎是来自AWS::codecommit::Repository的“触发器”对象。