

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Buat EventBridge aturan untuk CodeCommit sumber (CloudFormation template)
<a name="pipelines-trigger-source-repo-changes-cfn"></a>



Untuk digunakan CloudFormation untuk membuat aturan, perbarui template Anda seperti yang ditunjukkan di sini.<a name="proc-cfn-event-codecommit"></a>

**Untuk memperbarui CloudFormation template pipeline Anda dan membuat EventBridge aturan**

1. Di template, di bawah`Resources`, gunakan `AWS::IAM::Role` CloudFormation sumber daya untuk mengonfigurasi peran IAM yang memungkinkan acara Anda memulai pipeline. Entri ini membuat peran yang menggunakan dua kebijakan:
   + Kebijakan pertama memungkinkan peran diasumsikan.
   + Kebijakan kedua memberikan izin untuk memulai pipeline.

   **Mengapa saya membuat perubahan ini?** Menambahkan `AWS::IAM::Role` sumber daya memungkinkan CloudFormation untuk membuat izin untuk EventBridge. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

------
#### [ 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. Dalam template, di bawah`Resources`, gunakan `AWS::Events::Rule` CloudFormation sumber daya untuk menambahkan EventBridge aturan. Pola acara ini membuat acara yang memantau perubahan push ke repositori Anda. Saat EventBridge mendeteksi perubahan status repositori, aturan akan muncul di pipeline target Anda`StartPipelineExecution`.

   **Mengapa saya membuat perubahan ini?** Menambahkan `AWS::Events::Rule` sumber daya memungkinkan CloudFormation untuk membuat acara. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

------
#### [ 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. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan cuplikan YAMAL berikut. Contoh berikut mengonfigurasi penggantian di mana:
   + `Source`Dalam contoh ini, adalah nilai dinamis, yang didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. `actionName`
   + `COMMIT_ID`Dalam contoh ini, adalah nilai dinamis, yang didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. `revisionType`
   + The`revisionValue`, < *revisionValue* > dalam contoh ini, berasal dari variabel peristiwa sumber.
   + Variabel output untuk `BranchName` dan `Value` ditentukan.

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

1. Simpan template yang diperbarui ke komputer lokal Anda, lalu buka CloudFormation konsol.

1. Pilih tumpukan Anda, lalu pilih **Create Change Set for Current Stack**. 

1. Unggah template, lalu lihat perubahan yang tercantum di dalamnya CloudFormation. Ini adalah perubahan yang harus dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar. 

1. Pilih **Eksekusi**.<a name="proc-cfn-flag-codecommit"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Dalam banyak kasus, `PollForSourceChanges` parameter default ke true saat Anda membuat pipeline. Saat Anda menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output Anda dan mengaturnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di [Pengaturan yang valid untuk `PollForSourceChanges` parameter](PollForSourceChanges-defaults.md).
+ Dalam template, ubah `PollForSourceChanges` ke`false`. Jika Anda tidak menyertakan `PollForSourceChanges` dalam definisi pipeline Anda, tambahkan dan setel ke`false`.

  **Mengapa saya membuat perubahan ini?** Mengubah parameter ini untuk `false` mematikan pemeriksaan berkala sehingga Anda hanya dapat menggunakan deteksi perubahan berbasis peristiwa.

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

------