

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# CodeCommit ações de origem e EventBridge
<a name="triggering"></a>

Para adicionar uma ação de CodeCommit origem CodePipeline, você pode escolher entre: 
+ Use o assistente de **criação de pipeline** do CodePipeline console ([Criar um pipeline personalizado (console)](pipelines-create.md#pipelines-create-console)) ou a página **Editar ação** para escolher a opção **CodeCommit**de provedor. O console cria uma EventBridge regra que inicia seu pipeline quando a fonte muda.
+ Use o AWS CLI para adicionar a configuração de ação para a `CodeCommit` ação e criar recursos adicionais da seguinte forma:
  + Use o exemplo de configuração de ação `CodeCommit` em [CodeCommit referência da ação de origem](action-reference-CodeCommit.md) para criar sua ação, conforme mostrado em [Criar um pipeline (CLI)](pipelines-create.md#pipelines-create-cli).
  + O método de detecção de alterações assume como padrão iniciar o pipeline por meio da sondagem da origem. Você deve desabilitar as verificações periódicas e criar a regra de detecção de alterações manualmente. Use um dos seguintes métodos: [Crie uma EventBridge regra para uma CodeCommit fonte (console)](pipelines-trigger-source-repo-changes-console.md), [Crie uma EventBridge regra para uma CodeCommit fonte (CLI)](pipelines-trigger-source-repo-changes-cli.md) ou [Criar uma EventBridge regra para uma CodeCommit fonte (CloudFormation modelo)](pipelines-trigger-source-repo-changes-cfn.md).

**Topics**
+ [Crie uma EventBridge regra para uma CodeCommit fonte (console)](pipelines-trigger-source-repo-changes-console.md)
+ [Crie uma EventBridge regra para uma CodeCommit fonte (CLI)](pipelines-trigger-source-repo-changes-cli.md)
+ [Criar uma EventBridge regra para uma CodeCommit fonte (CloudFormation modelo)](pipelines-trigger-source-repo-changes-cfn.md)

# Crie uma EventBridge regra para uma CodeCommit fonte (console)
<a name="pipelines-trigger-source-repo-changes-console"></a>

**Importante**  
Se você usa o console para criar ou editar seu pipeline, sua EventBridge regra será criada para você.

**Para criar uma EventBridge regra para uso em CodePipeline operações**

1. Abra o EventBridge console da Amazon em [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. No painel de navegação, escolha **Regras**. Deixe o barramento padrão selecionado ou escolha um barramento de eventos. Escolha **Criar regra**.

1. Em **Nome**, insira um nome para a regra.

1. Em **Tipo de regra**, escolha **Regra com um padrão de eventos**. Escolha **Próximo**.

1. Em **Fonte do evento**, escolha **AWS eventos ou eventos de EventBridge parceiros**.

1. Em **Tipo de evento de amostra**, escolha **Eventos do AWS **.

1. Em **Eventos de amostra**, digite CodeCommit como a palavra-chave a ser filtrada. Escolha **Alteração do estado do CodeCommit repositório**.

1. Em **Método de criação**, escolha **Padrão personalizado (editor JSON)**.

   Cole o padrão de evento fornecido abaixo. Veja a seguir um exemplo de padrão de eventos do CodeCommit na janela **Event (Evento)** para um repositório `MyTestRepo` com uma ramificação denominada `main`:

   ```
   {
     "source": [
       "aws.codecommit"
     ],
     "detail-type": [
       "CodeCommit Repository State Change"
     ],
     "resources": [
       "arn:aws:codecommit:us-west-2:80398EXAMPLE:MyTestRepo"
     ],
     "detail": {
       "referenceType": [
         "branch"
       ],
       "referenceName": [
         "main"
       ]
     }
   }
   ```

1. Em **Alvos**, escolha **CodePipeline**.

1. Insira o ARN do pipeline a ser iniciado por esta regra.
**nota**  
Você pode encontrar o ARN do pipeline na saída de metadados após executar o comando **get-pipeline**. O ARN do pipeline é construído neste formato:   
arn: aws:codepipeline::: *region* *account* *pipeline-name*  
Exemplo de ARN do pipeline:  
`arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline`

1. Para criar ou especificar uma função de serviço do IAM que conceda EventBridge permissões para invocar o destino associado à sua EventBridge regra (nesse caso, o alvo é CodePipeline): 
   + Escolha **Criar uma nova função para esse recurso específico** para criar uma função de serviço que dê EventBridge permissões para você iniciar suas execuções de funil.
   + Escolha **Usar função existente** para inserir uma função de serviço que conceda EventBridge permissões para você iniciar suas execuções de funil.

1. (Opcional) Para especificar substituições de origem com um ID de imagem específico, use o transformador de entrada para passar os dados como parâmetros JSON. Você também pode usar o transformador de entrada para passar variáveis de pipeline.
   + Expanda **Additional settings** (Configurações adicionais).

     Em **Configurar entrada de destino**, escolha **Configurar transformador de entrada**.

     Na janela de diálogo, escolha **Inserir um próprio**. Na caixa **Caminho de entrada**, digite os pares de chave-valor a seguir.

     ```
     {"revisionValue": "$.detail.image-digest"}
     ```
   + Na caixa **Modelo**, digite os pares de chave-valor a seguir.

     ```
     {
         "sourceRevisions": [
             {
                 "actionName": "Source",
                 "revisionType": "COMMIT_ID",
                 "revisionValue": "<revisionValue>"
             }
         ],
         "variables": [
             {
                 "name": "Branch_Name",
                 "value": "value"
             }
         ]
     }
     ```
   + Escolha **Confirmar**.

1. Escolha **Próximo**.

1. Na página **Tags**, selecione **Próximo**.

1. Na página **Revisar e criar**, revise a configuração da regra. Se você estiver satisfeito com a regra, escolha **Create rule**.

# Crie uma EventBridge regra para uma CodeCommit fonte (CLI)
<a name="pipelines-trigger-source-repo-changes-cli"></a>

Use o comando **put-rule**, especificando:
+ Um nome que identifique de forma exclusiva a regra que você está criando. Esse nome deve ser exclusivo em todos os pipelines que você cria CodePipeline associados à sua AWS conta.
+ O padrão de evento para a origem e os campos detalhados usados pela regra. Para obter mais informações, consulte [Amazon EventBridge e Event Patterns](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html).<a name="proc-cli-event-codecommit"></a>

**Para criar uma EventBridge regra com CodeCommit como origem do evento e CodePipeline como destino**

1. Adicione permissões para usar EventBridge CodePipeline para invocar a regra. Para obter mais informações, consulte [Uso de políticas baseadas em recursos para a Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html). EventBridge

   1. Use o exemplo a seguir para criar a política de confiança que permite assumir EventBridge a função de serviço. Nomeie a política de confiança `trustpolicyforEB.json`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "events.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. Use o comando a seguir para criar a função `Role-for-MyRule` e anexar a política de confiança.

      ```
      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
      ```

   1. Crie o JSON de política de permissões, conforme mostrado neste exemplo, para o pipeline denominado `MyFirstPipeline`. Nomeie a politica de permissões `permissionspolicyforEB.json`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "codepipeline:StartPipelineExecution"
                  ],
                  "Resource": [
                      "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline"
                  ]
              }
          ]
      }
      ```

------

   1. Use o comando a seguir para anexar a política de permissões `CodePipeline-Permissions-Policy-for-EB` à função `Role-for-MyRule`.

      **Por que estou fazendo essa alteração?** Adicionar essa política à função cria permissões para EventBridge.

      ```
      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
      ```

1. Use o comando **put-rule** e inclua os parâmetros `--name`, `--event-pattern` e `--role-arn`.

   **Por que estou fazendo essa alteração?** Esse comando permite que o CloudFormation crie o evento.

   O comando de exemplo a seguir cria uma regra chamada `MyCodeCommitRepoRule`.

   ```
   aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"repository-ARN\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
   ```

1. Para adicionar CodePipeline como destino, chame o **put-targets** comando e inclua os seguintes parâmetros:
   + O parâmetro `--rule` é usado com `rule_name` criado por meio de **put-rule**. 
   + O parâmetro `--targets` é usado com o `Id` da lista do destino na lista de destinos e o `ARN` do pipeline de destino.

   O exemplo de comando a seguir especifica que, para a regra chamada `MyCodeCommitRepoRule`, o `Id` do destino é composto do número um, indicando que, em uma lista de destinos para a regra, esse é o destino 1. O exemplo de comando também especifica um exemplo `ARN` para o pipeline. O pipeline é iniciado quando uma alteração é feita no repositório.

   ```
   aws events put-targets --rule MyCodeCommitRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
   ```

1. (Opcional) Para configurar um transformador de entrada com substituições de origem para um ID de imagem específico, use o JSON a seguir no comando da CLI. 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, é derivado da variável de evento de origem.

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "pipeline-ARN",
               "InputTransformer": {
                   "sourceRevisions": {
                       "actionName": "Source",
                       "revisionType": "COMMIT_ID",
                       "revisionValue": "<revisionValue>"
                   },
                   "variables": [
                       {
                           "name": "Branch_Name",
                           "value": "value"
                       }
                   ]
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-codecommit"></a>

**Para editar o PollForSourceChanges parâmetro do seu funil**
**Importante**  
Ao criar um pipeline com esse método, o parâmetro `PollForSourceChanges` é padronizado como verdadeiro se não for explicitamente definido como falso. 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`](PollForSourceChanges-defaults.md).

1. Execute o **get-pipeline** comando para copiar a estrutura do pipeline em um arquivo JSON. Por exemplo, para um pipeline nomeado `MyFirstPipeline`, execute o seguinte comando: 

   ```
   aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
   ```

   Este comando retorna nada, mas o arquivo que você criou deve aparecer no diretório onde você executou o comando.

1. Abra o arquivo JSON em qualquer editor de texto plano e altere o `PollForSourceChanges` parâmetro `false` para editar o estágio de origem, como mostrado no exemplo a seguir.

   **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.

   ```
   "configuration": {
       "PollForSourceChanges": "false",
       "BranchName": "main",
       "RepositoryName": "MyTestRepo"
   },
   ```

1. Se você estiver trabalhando com a estrutura do pipeline recuperada por meio do comando **get-pipeline**, remova as linhas `metadata` do arquivo JSON. Caso contrário, o comando **update-pipeline** não é capaz de utilizá-la. Remova as linhas `"metadata": { }`, `"created"`, `"pipelineARN"` e os campos `"updated"`.

   Por exemplo, remova as seguintes linhas da estrutura: 

   ```
   "metadata": {
       "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name",
       "created": "date",
       "updated": "date"
   },
   ```

   Salve o arquivo.

1. Para aplicar suas alterações, execute o comando **update-pipeline** especificando o arquivo JSON do pipeline:
**Importante**  
Não se esqueça de incluir `file://` antes do nome de arquivo. Ele é obrigatório nesse comando.

   ```
   aws codepipeline update-pipeline --cli-input-json file://pipeline.json
   ```

   Este comando retorna toda a estrutura do pipeline editado.
**nota**  
O comando **update-pipeline** interrompe o pipeline. Se uma revisão estiver sendo executada pelo pipeline quando você executar o comando **update-pipeline**, essa execução será interrompida. Você deve iniciar manualmente o pipeline para executar a revisão através do pipeline atualizado. Use o comando **`start-pipeline-execution`** para iniciar manualmente o pipeline.

# Criar uma EventBridge regra para uma CodeCommit fonte (CloudFormation modelo)
<a name="pipelines-trigger-source-repo-changes-cfn"></a>



Para usar CloudFormation para criar uma regra, atualize seu modelo conforme mostrado aqui.<a name="proc-cfn-event-codecommit"></a>

**Para atualizar seu CloudFormation modelo de funil e criar uma EventBridge regra**

1. No modelo, em`Resources`, use o `AWS::IAM::Role` CloudFormation recurso para configurar a função do IAM que permite que seu evento inicie 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?** Adicionar o `AWS::IAM::Role` recurso permite CloudFormation criar permissões para EventBridge. Esse recurso é adicionado à sua CloudFormation pilha.

------
#### [ 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"
                       }
                     ]
   
   ...
   ```

------

1. No modelo, em`Resources`, use o `AWS::Events::Rule` CloudFormation recurso para adicionar uma EventBridge regra. Esse padrão de evento cria um evento que monitora as alterações por push no seu repositório. Quando EventBridge detecta uma alteração no estado do repositório, a regra é invocada `StartPipelineExecution` em seu pipeline de destino.

   **Por que estou fazendo essa alteração? ** Adicionar o `AWS::Events::Rule` recurso permite CloudFormation criar o evento. Esse recurso é adicionado à sua CloudFormation pilha.

------
#### [ 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"
         }
       ]
     }
   },
   ```

------

1. (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, é derivado da variável de 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
   ```

1. Salve o modelo atualizado em seu computador local e abra o CloudFormation console.

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

1. 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. 

1. Clique em **Executar**.<a name="proc-cfn-flag-codecommit"></a>

**Para editar o PollForSourceChanges parâmetro do seu funil**
**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`](PollForSourceChanges-defaults.md).
+ 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
      }
    ]
  },
  ```

------