

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# CodeCommit acciones de origen y EventBridge
<a name="triggering"></a>

Para añadir una acción CodeCommit de origen CodePipeline, puedes elegir entre las siguientes opciones: 
+ Utilice el asistente de **creación de canalizaciones** de la CodePipeline consola ([Creación de una canalización personalizada (consola)](pipelines-create.md#pipelines-create-console)) o la página de **edición de acciones** para elegir la opción **CodeCommit**de proveedor. La consola crea una EventBridge regla que inicia la canalización cuando cambia la fuente.
+  AWS CLI Utilícela para añadir la configuración de la `CodeCommit` acción y crear recursos adicionales de la siguiente manera:
  + Utilice el ejemplo de configuración de acciones `CodeCommit` en [CodeCommit referencia de acción de origen](action-reference-CodeCommit.md) para crear su acción, como se muestra en [Crear una canalización (CLI)](pipelines-create.md#pipelines-create-cli).
  + El método de detección de cambios consiste de forma predeterminada en iniciar la canalización sondeando el origen. Debe deshabilitar las comprobaciones periódicas y crear la regla de detección de cambios manualmente. Utilice uno de los siguientes métodos: [Cree una EventBridge regla para una CodeCommit fuente (consola)](pipelines-trigger-source-repo-changes-console.md), [Crear una EventBridge regla para una CodeCommit fuente (CLI)](pipelines-trigger-source-repo-changes-cli.md) o [Crea una EventBridge regla para una CodeCommit fuente (CloudFormation plantilla)](pipelines-trigger-source-repo-changes-cfn.md).

**Topics**
+ [Cree una EventBridge regla para una CodeCommit fuente (consola)](pipelines-trigger-source-repo-changes-console.md)
+ [Crear una EventBridge regla para una CodeCommit fuente (CLI)](pipelines-trigger-source-repo-changes-cli.md)
+ [Crea una EventBridge regla para una CodeCommit fuente (CloudFormation plantilla)](pipelines-trigger-source-repo-changes-cfn.md)

# Cree una EventBridge regla para una CodeCommit fuente (consola)
<a name="pipelines-trigger-source-repo-changes-console"></a>

**importante**  
Si utilizas la consola para crear o editar tu canalización, la EventBridge regla se crea automáticamente.

**Para crear una EventBridge regla para utilizarla en CodePipeline las operaciones**

1. Abre la EventBridge consola de Amazon en [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. En el panel de navegación, seleccione **Reglas**. Deje el bus predeterminado seleccionado o elija un bus de eventos. Elija **Crear regla**.

1. En **Nombre**, introduzca un nombre para la regla.

1. En **Tipo de regla**, elija **Regla con un patrón de evento**. Elija **Siguiente**.

1. En **Fuente del evento**, selecciona **AWS eventos o eventos EventBridge asociados**.

1. En **Ejemplo de tipo de evento**, seleccione **Eventos de AWS **.

1. En **Ejemplos de eventos**, escribe CodeCommit la palabra clave por la que quieres filtrar. Elija **Cambiar el estado del CodeCommit repositorio**.

1. En **Método de creación**, elija **Patrón de cliente (JSON editor)**.

   Pegue el patrón de eventos que se muestra a continuación. El siguiente es un patrón de eventos de muestra de CodeCommit en la ventana **Event (Evento)** para el repositorio `MyTestRepo` con una ramificación 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. En **Targets**, elija **CodePipeline**.

1. Introduzca el ARN de la canalización que iniciará esta regla.
**nota**  
Puede encontrar el ARN de la canalización en la salida de metadatos después de ejecutar el comando **get-pipeline**. El ARN de canalización se crea con el siguiente formato:   
arn:aws:codepipeline::: *region* *account* *pipeline-name*  
ARN de canalización de muestra:  
`arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline`

1. Para crear o especificar una función de servicio de IAM que conceda EventBridge permisos para invocar el destino asociado a la EventBridge regla (en este caso, el objetivo es): CodePipeline 
   + Seleccione **Crear una nueva función para este recurso específico** a fin de crear una función de servicio que le dé EventBridge permisos para iniciar las ejecuciones de su canalización.
   + Selecciona **Usar el rol existente** para introducir un rol de servicio que te dé EventBridge permisos para iniciar las ejecuciones de tu canalización.

1. (Opcional) Para especificar las anulaciones de origen con un ID de imagen específico, use el transformador de entrada para pasar los datos como parámetros en JSON. También puede usar el transformador de entrada para pasar variables de canalización.
   + Amplíe **Configuración adicional**.

     En **Configurar entrada de destino**, elija **Configurar transformador de entrada**.

     En la ventana de cuadro de diálogo, elija **Escribir el mío**. En el cuadro **Ruta de entrada**, escriba los siguientes pares clave-valor.

     ```
     {"revisionValue": "$.detail.image-digest"}
     ```
   + En el cuadro **Plantilla**, escriba los siguientes pares clave-valor.

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

1. Elija **Siguiente**.

1. En la página **Etiquetas**, elija **Siguiente:**

1. En la página **Revisar y crear**, revise la configuración de la regla. Si está satisfecho con la regla, elija **Create rule (Crear regla)**.

# Crear una EventBridge regla para una CodeCommit fuente (CLI)
<a name="pipelines-trigger-source-repo-changes-cli"></a>

Ejecute el comando **put-rule** especificando lo siguiente:
+ Un nombre que identifique de forma inequívoca la regla que está creando. Este nombre debe ser único en todas las canalizaciones que crees CodePipeline asociadas a tu AWS cuenta.
+ El patrón de eventos para el origen y los campos de detalles utilizados por la regla. Para obtener más información, consulta [Amazon EventBridge y Event Patterns](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html).<a name="proc-cli-event-codecommit"></a>

**Para crear una EventBridge CodeCommit regla con el origen y CodePipeline el destino del evento**

1. Agregue los permisos EventBridge para utilizarlos CodePipeline para invocar la regla. Para obtener más información, consulta [Uso de políticas basadas en recursos para Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html). EventBridge

   1. Utilice el siguiente ejemplo para crear la política de confianza que permita EventBridge asumir la función de servicio. Ponga un nombre a la política de confianza `trustpolicyforEB.json`.

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

****  

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

------

   1. Utilice el comando para crear el rol `Role-for-MyRule` y asocie la política de confianza.

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

   1. Cree el JSON de la política de permisos, tal y como se muestra en este ejemplo para la canalización denominada `MyFirstPipeline`. Ponga un nombre a la política de permisos `permissionspolicyforEB.json`.

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

****  

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

------

   1. Utilice el siguiente comando para asociar la política de permisos `CodePipeline-Permissions-Policy-for-EB` al rol `Role-for-MyRule`.

      **¿Por qué voy a hacer este cambio?** Al agregar esta política al rol, se crean permisos 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. Llame al comando **put-rule** e incluya los parámetros `--name`, `--event-pattern` y `--role-arn`.

   **¿Por qué voy a hacer este cambio?** Este comando permite que CloudFormation cree el evento.

   El siguiente comando de ejemplo crea una regla llamada `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 añadirlo CodePipeline como destino, ejecuta el **put-targets** comando e incluye los siguientes parámetros:
   + El parámetro `--rule` se usa con el `rule_name` que creó con el comando **put-rule**. 
   + El parámetro `--targets` se usa con el `Id` del destino de la lista de destinos y el `ARN` de la canalización de destino.

   El siguiente comando de muestra especifica que, para la regla denominada `MyCodeCommitRepoRule`, el destino `Id` se compone del número uno, lo que indica que, en lo que puede ser una lista de destinos de la regla, se trata del destino 1. El comando de muestra también especifica un `ARN` de ejemplo para la canalización. La canalización se inicia cuando se produce algún cambio en el repositorio.

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

1. (Opcional) Para configurar un transformador de entrada con anulaciones de origen para un ID de imagen específico, utilice el siguiente fragmento de código JSON en el comando de la CLI. En el siguiente ejemplo, se configura una anulación donde:
   + `actionName` (`Source` en este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen.
   + `revisionType` (`COMMIT_ID` en este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen.
   + En este ejemplo`revisionValue`, < *revisionValue* > se deriva de la variable de evento de origen.

   ```
   {
       "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 el PollForSourceChanges parámetro de tu canalización**
**importante**  
Al crear una canalización con este método, el parámetro `PollForSourceChanges` se establece en true de forma predeterminada si no se establece explícitamente en false. Al añadir la detección de cambios basada en eventos, debe añadir el parámetro a la salida y establecerlo en false para deshabilitar el sondeo. De lo contrario, la canalización comienza dos veces para un único cambio en el código fuente. Para obtener más información, consulte [Configuración válida para el parámetro `PollForSourceChanges`](PollForSourceChanges-defaults.md).

1. Ejecute el comando **get-pipeline** para copiar la estructura de canalización en un archivo JSON. Por ejemplo, para una canalización denominada `MyFirstPipeline`, escriba el siguiente comando: 

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

   Este comando no devuelve nada, pero el archivo creado debería aparecer en el directorio en el que se ejecutó el comando.

1. Abra el archivo JSON en cualquier editor de texto sin formato y edite la etapa de origen cambiando el parámetro `PollForSourceChanges` por `false`, tal y como se muestra en este ejemplo.

   **¿Por qué voy a hacer este cambio?** Al cambiar este parámetro a `false`, se desactivan las comprobaciones periódicas, por lo que únicamente puede utilizar la detección de cambios basada en eventos.

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

1. Si está trabajando con la estructura de la canalización recuperada mediante el comando **get-pipeline**, elimine las líneas `metadata` del archivo JSON. De lo contrario, el comando **update-pipeline** no puede utilizarlo. Elimine las líneas `"metadata": { }` y los campos `"updated"`, `"created"` y `"pipelineARN"`.

   Por ejemplo, quite las siguientes líneas de la estructura: 

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

   Guarde el archivo.

1. Para aplicar los cambios, ejecute el comando **update-pipeline** especificando el archivo JSON:
**importante**  
Asegúrese de incluir `file://` antes del nombre de archivo. Es obligatorio en este comando.

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

   Este comando devuelve la estructura completa de la canalización editada.
**nota**  
El comando **update-pipeline** detiene la canalización. Si se está ejecutando una revisión en la canalización al ejecutar el comando **update-pipeline**, dicha ejecución se detiene. Debe iniciar manualmente la canalización para ejecutar dicha revisión en la canalización actualizada. Utilice el comando **`start-pipeline-execution`** para iniciar manualmente la canalización.

# Crea una EventBridge regla para una CodeCommit fuente (CloudFormation plantilla)
<a name="pipelines-trigger-source-repo-changes-cfn"></a>



Para usarla CloudFormation para crear una regla, actualiza tu plantilla como se muestra aquí.<a name="proc-cfn-event-codecommit"></a>

**Para actualizar tu CloudFormation plantilla de canalización y crear una EventBridge regla**

1. En la plantilla, en la sección`Resources`, usa el `AWS::IAM::Role` CloudFormation recurso para configurar la función de IAM que permite que tu evento inicie tu canalización. Esta entrada crea un rol que utiliza dos políticas:
   + La primera política permite asumir el rol.
   + La segunda política concede permisos para iniciar la canalización.

   **¿Por qué voy a hacer este cambio?** Añadir el `AWS::IAM::Role` recurso permite CloudFormation crear permisos para EventBridge. Este recurso se añade a tu CloudFormation pila.

------
#### [ 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. En la plantilla, en`Resources`, usa el `AWS::Events::Rule` CloudFormation recurso para agregar una EventBridge regla. Este patrón de eventos crea un evento que monitoriza la introducción de cambios en su repositorio. Cuando EventBridge detecta un cambio en el estado del repositorio, la regla se invoca `StartPipelineExecution` en la canalización de destino.

   **¿Por qué voy a hacer este cambio?** Añadir el `AWS::Events::Rule` recurso permite CloudFormation crear el evento. Este recurso se añade a tu CloudFormation pila.

------
#### [ 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 un transformador de entrada con anulaciones de origen para un ID de imagen específico, utilice el siguiente fragmento de código YAML. En el siguiente ejemplo, se configura una anulación donde:
   + `actionName` (`Source` en este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen.
   + `revisionType` (`COMMIT_ID` en este ejemplo) es el valor dinámico, que se define en la creación de la canalización, no se deriva del evento de origen.
   + En este ejemplo`revisionValue`, < *revisionValue* > se deriva de la variable de evento de origen.
   + Se especifican las variables de salida para `BranchName` y `Value`.

   ```
   Rule: my-rule
   Targets:
   - Id: MyTargetId
     Arn: pipeline-ARN
     InputTransformer:
       sourceRevisions:
         actionName: Source
         revisionType: COMMIT_ID
         revisionValue: <revisionValue>
       variables:
       - name: BranchName
         value: value
   ```

1. Guarde la plantilla actualizada en el equipo local y, a continuación, abra la CloudFormation consola.

1. Seleccione la pila y luego elija **Create Change Set for Current Stack (Crear conjuntos de cambios para la pila actual)**. 

1. Cargue la plantilla y, a continuación, consulte los cambios indicados en CloudFormation. Estos son los cambios que se realizan en la pila. Debería ver los nuevos recursos en la lista. 

1. Elija **Ejecutar**.<a name="proc-cfn-flag-codecommit"></a>

**Para editar el PollForSourceChanges parámetro de tu canalización**
**importante**  
En muchos casos, el parámetro `PollForSourceChanges` es true de forma predeterminada al crear una canalización. Al añadir la detección de cambios basada en eventos, debe añadir el parámetro a la salida y establecerlo en false para deshabilitar el sondeo. De lo contrario, la canalización comienza dos veces para un único cambio en el código fuente. Para obtener más información, consulte [Configuración válida para el parámetro `PollForSourceChanges`](PollForSourceChanges-defaults.md).
+ En la plantilla, cambie `PollForSourceChanges` por `false`. Si no ha incluido `PollForSourceChanges` en la definición de la canalización, añádalo y establézcalo en `false`.

  **¿Por qué voy a hacer este cambio?** Al cambiar este parámetro a `false`, se desactivan las comprobaciones periódicas, por lo que únicamente puede utilizar la detección de cambios basada en 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
      }
    ]
  },
  ```

------