Criar uma regra do EventBridge para uma origem do CodeCommit (modelo do CloudFormation) - AWS CodePipeline

Criar uma regra do EventBridge para uma origem do CodeCommit (modelo do CloudFormation)

Para usar o CloudFormation para criar uma regra, atualize seu modelo conforme mostrado aqui.

Para atualizar o modelo do CloudFormation do pipeline e criar a regra do EventBridge
  1. No modelo, em Resources, use o recurso AWS::IAM::Role do CloudFormation para configurar a função do IAM que habilita o evento a iniciar seu pipeline. Essa entrada cria uma função que utiliza duas políticas:

    • A primeira política permite que a função seja assumida.

    • A segunda política fornece permissões para iniciar o pipeline.

    Por que estou fazendo essa alteração? A adição do recurso AWS::IAM::Role possibilita que o CloudFormation crie permissões para o EventBridge. Esse recurso é adicionado à sua pilha do CloudFormation.

    YAML
    EventRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - events.amazonaws.com Action: sts:AssumeRole Path: / Policies: - PolicyName: eb-pipeline-execution PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: codepipeline:StartPipelineExecution Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
    JSON
    "EventRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "eb-pipeline-execution", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codepipeline:StartPipelineExecution", "Resource": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ...
  2. No modelo, em Resources, use o recurso AWS::Events::Rule do CloudFormation para adicionar uma regra do EventBridge. Esse padrão de evento cria um evento que monitora as alterações por push no seu repositório. Quando o EventBridge detecta uma alteração no estado do repositório, a regra invoca StartPipelineExecution no pipeline de destino.

    Por que estou fazendo essa alteração? A adição do recurso AWS::Events::Rule permite que o CloudFormation crie o evento. Esse recurso é adicionado à sua pilha do CloudFormation.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main Targets: - Arn: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ] RoleArn: !GetAtt EventRole.Arn Id: codepipeline-AppPipeline
    JSON
    "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "source": [ "aws.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } },
  3. (Opcional) Para configurar um transformador de entrada com substituições de origem para um ID de imagem específico, use o trecho YAML a seguir. O exemplo a seguir configura uma substituição na qual:

    • O actionName, Source neste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem.

    • O revisionType, COMMIT_ID neste exemplo, é o valor dinâmico, definido na criação do pipeline, não derivado do evento de origem.

    • O revisionValue, <RevisionValue> neste exemplo, deriva da variável do evento de origem.

    • As variáveis de saída para BranchName e Value são especificadas.

    Rule: my-rule Targets: - Id: MyTargetId Arn: pipeline-ARN InputTransformer: sourceRevisions: actionName: Source revisionType: COMMIT_ID revisionValue: <revisionValue> variables: - name: BranchName value: value
  4. Salve o modelo atualizado em seu computador local e abra o console do CloudFormation.

  5. Selecione sua pilha e clique em Create Change Set for Current Stack (Criar conjunto de alterações para a pilha atual).

  6. Carregue o modelo e visualize as alterações listadas no CloudFormation. Essas são as alterações a serem feitas na pilha. Seus novos recursos devem ser exibidos na lista.

  7. Clique em Executar.

Editar o parâmetro PollForSourceChanges do pipeline
Importante

Em muitos casos, o parâmetro PollForSourceChanges é padronizado como verdadeiro ao criar um pipeline. Ao adicionar a detecção de alterações baseada em eventos, é necessário adicionar o parâmetro a sua saída e defini-lo como falso para desativar a sondagem. Caso contrário, o pipeline inicia duas vezes para uma única alteração de origem. Para obter detalhes, consulte Configurações válidas para o parâmetro PollForSourceChanges.

  • No modelo, altere PollForSourceChanges para false. Se você não incluir PollForSourceChanges na sua definição de pipeline, adicione-o e configure para false.

    Por que estou fazendo essa alteração? A alteração deste parâmetro para false desativa as verificações periódicas para que você possa utilizar apenas a detecção de alterações baseada em eventos.

    YAML
    Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: AWS Version: 1 Provider: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] },