

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.

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

------