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

Criar uma regra do EventBridge para uma origem do Amazon ECR (modelo do CloudFormation)

Para usar o CloudFormation a fim de criar uma regra, use o trecho do modelo 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? Você deve criar um perfil que possa ser assumido pelo EventBridge para iniciar uma execução em nosso pipeline.

    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: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${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::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}" } } ] } } ] } } } ...
  2. No modelo, em Resources, use o recurso AWS::Events::Rule do CloudFormation para adicionar uma regra do EventBridge para a origem do Amazon ECR. Esse padrão de evento cria um evento que monitora as confirmações 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? Você deve criar um evento com uma regra que especifique como deve ser feito um envio de imagem por push e um destino que nomeie o pipeline a ser iniciado pelo evento.

    Esse trecho usa uma imagem chamada eb-test com uma tag de latest.

    YAML
    EventRule: Type: 'AWS::Events::Rule' Properties: EventPattern: detail: action-type: [PUSH] image-tag: [latest] repository-name: [eb-test] result: [SUCCESS] detail-type: [ECR Image Action] source: [aws.ecr] Targets: - Arn: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline} RoleArn: !GetAtt - EventRole - Arn Id: codepipeline-AppPipeline
    JSON
    { "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "detail": { "action-type": [ "PUSH" ], "image-tag": [ "latest" ], "repository-name": [ "eb-test" ], "result": [ "SUCCESS" ] }, "detail-type": [ "ECR Image Action" ], "source": [ "aws.ecr" ] }, "Targets": [ { "Arn": { "Fn::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}" }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } },
    nota

    Para visualizar o padrão completo de evento compatível com os eventos do Amazon ECR, consulte Eventos do Amazon ECR e EventBridge ou Eventos do Amazon Elastic Container Registry.

  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, IMAGE_DIGEST 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.

    --- Rule: my-rule Targets: - Id: MyTargetId Arn: ARN InputTransformer: InputPathsMap: revisionValue: "$.detail.image-digest" InputTemplate: sourceRevisions: actionName: Source revisionType: IMAGE_DIGEST revisionValue: '<revisionValue>'
  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.