

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

# Migrasi jaringan pemungutan suara untuk menggunakan deteksi perubahan berbasis peristiwa
<a name="update-change-detection"></a>

AWS CodePipeline mendukung pengiriman penuh dan end-to-end berkelanjutan, yang mencakup memulai pipeline Anda setiap kali ada perubahan kode. Ada dua cara yang didukung untuk memulai pipeline Anda setelah perubahan kode: deteksi perubahan berbasis peristiwa dan polling. Sebaiknya gunakan deteksi perubahan berbasis peristiwa untuk saluran pipa.

Gunakan prosedur yang disertakan di sini untuk memigrasikan (memperbarui) jalur polling Anda ke metode deteksi perubahan berbasis peristiwa untuk pipeline Anda.

Metode deteksi perubahan berbasis peristiwa yang direkomendasikan untuk jaringan pipa ditentukan oleh sumber pipa, seperti. CodeCommit Dalam hal ini, misalnya, jalur pemungutan suara perlu bermigrasi ke deteksi perubahan berbasis peristiwa dengan. EventBridge

## Cara memigrasi jaringan pipa pemungutan suara
<a name="update-change-detection-overview"></a>

Untuk memigrasi jaringan pemungutan suara, tentukan jalur pemungutan suara Anda dan kemudian tentukan metode deteksi perubahan berbasis peristiwa yang direkomendasikan: 
+ Gunakan langkah-langkah [Melihat saluran pemungutan suara di akun Anda](#update-change-detection-view-polling) untuk menentukan jalur pemungutan suara Anda. 
+ Dalam tabel, temukan jenis sumber pipeline Anda, lalu pilih prosedur dengan implementasi yang ingin Anda gunakan untuk memigrasikan pipeline polling Anda. Setiap bagian berisi beberapa metode untuk migrasi, seperti menggunakan CLI atau. CloudFormation


<table>
<thead>
  <tr><th colspan="3">Cara memigrasikan saluran pipa ke metode deteksi perubahan yang disarankan</th></tr>
  <tr><th>Sumber pipa</th><th>Metode deteksi berbasis peristiwa yang direkomendasikan</th><th>Prosedur migrasi</th></tr>
</thead>
<tbody>
  <tr><td>AWS CodeCommit</td><td>EventBridge (direkomendasikan).</td><td>Lihat [Migrasi jaringan pemungutan suara dengan sumber CodeCommit](#update-change-detection-codecommit).</td></tr>
  <tr><td>Amazon S3</td><td>EventBridge dan bucket diaktifkan untuk pemberitahuan acara (disarankan).</td><td>Lihat [Migrasikan jalur pemungutan suara dengan sumber S3 yang diaktifkan untuk acara](#update-change-detection-S3-event).</td></tr>
  <tr><td>Amazon S3</td><td>EventBridge dan sebuah AWS CloudTrail jejak. </td><td>Lihat [Migrasi jaringan pemungutan suara dengan sumber dan jejak S3 CloudTrail](#update-change-detection-S3).</td></tr>
  <tr><td>GitHub (melalui GitHub Aplikasi)</td><td>Koneksi (disarankan)</td><td>Lihat [Migrasikan pipeline polling untuk tindakan sumber GitHub (melalui OAuth aplikasi) ke koneksi](#update-change-detection-github-connection).</td></tr>
  <tr><td>GitHub (melalui OAuth aplikasi)</td><td>Webhook</td><td>Lihat [Migrasikan jalur polling untuk tindakan sumber GitHub (melalui OAuth aplikasi) ke webhooks](#update-change-detection-github-webhooks).</td></tr>
</tbody>
</table>


**penting**  
Untuk pembaruan konfigurasi tindakan pipeline yang berlaku, seperti pipeline dengan tindakan GitHub (melalui OAuth aplikasi), Anda harus secara eksplisit menyetel `PollForSourceChanges` parameter ke *false* dalam konfigurasi tindakan Sumber Anda untuk menghentikan pipeline dari polling. Akibatnya, dimungkinkan untuk mengkonfigurasi pipeline secara keliru dengan deteksi perubahan berbasis peristiwa *dan* polling dengan, misalnya, mengonfigurasi EventBridge aturan dan juga menghilangkan parameter. `PollForSourceChanges` Ini menghasilkan eksekusi pipa duplikat, dan pipa dihitung menuju batas jumlah total jaringan pipa pemungutan suara, yang secara default jauh lebih rendah daripada jaringan pipa berbasis peristiwa. Untuk informasi selengkapnya, lihat [Kuota di AWS CodePipeline](limits.md).



## Melihat saluran pemungutan suara di akun Anda
<a name="update-change-detection-view-polling"></a>

Sebagai langkah pertama, gunakan salah satu skrip berikut untuk menentukan pipeline mana di akun Anda yang dikonfigurasi untuk polling. Ini adalah saluran pipa untuk bermigrasi ke deteksi perubahan berbasis peristiwa.

### Melihat saluran pemungutan suara di akun Anda (skrip)
<a name="update-change-detection-view-polling-script"></a>

Ikuti langkah-langkah berikut untuk menggunakan skrip untuk menentukan pipeline di akun Anda yang menggunakan polling.

1. Buka jendela terminal, lalu lakukan salah satu hal berikut: 
   + Jalankan perintah berikut untuk membuat skrip baru bernama **PollingPipelinesExtractor.sh.**

     ```
     vi PollingPipelinesExtractor.sh
     ```
   + **Untuk menggunakan skrip python, jalankan perintah berikut untuk membuat skrip python baru bernama PollingPipelinesExtractor .py.**

     ```
     vi PollingPipelinesExtractor.py
     ```

1. Salin dan tempel kode berikut ke dalam **PollingPipelinesExtractor**skrip. Lakukan salah satu tindakan berikut:
   + Salin dan tempel kode berikut ke dalam **PollingPipelinesExtractorskrip.sh**.

     ```
     #!/bin/bash
     
     set +x
     
     POLLING_PIPELINES=()
     LAST_EXECUTED_DATES=()
     NEXT_TOKEN=null
     HAS_NEXT_TOKEN=true
     if [[ $# -eq 0 ]] ; then
         echo 'Please provide region name'
         exit 0
     fi
     REGION=$1
     
     
     while [ "$HAS_NEXT_TOKEN" != "false" ]; do
         if [ "$NEXT_TOKEN" != "null" ];
             then
                 LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION --next-token $NEXT_TOKEN)
             else
                 LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION)
         fi
         LIST_PIPELINES=$(jq -r '.pipelines[].name' <<< "$LIST_PIPELINES_RESPONSE")
         NEXT_TOKEN=$(jq -r '.nextToken' <<< "$LIST_PIPELINES_RESPONSE")
         if [ "$NEXT_TOKEN" == "null" ];
             then
                 HAS_NEXT_TOKEN=false
         fi
     
         for pipline_name in $LIST_PIPELINES
         do
             PIPELINE=$(aws codepipeline get-pipeline --name $pipline_name --region $REGION)
             HAS_POLLABLE_ACTIONS=$(jq '.pipeline.stages[].actions[] | select(.actionTypeId.category == "Source") | select(.actionTypeId.owner == ("ThirdParty","AWS")) | select(.actionTypeId.provider == ("GitHub","S3","CodeCommit")) | select(.configuration.PollForSourceChanges == ("true",null))' <<< "$PIPELINE")
             if [ ! -z "$HAS_POLLABLE_ACTIONS" ];
             then
                 POLLING_PIPELINES+=("$pipline_name")
                 PIPELINE_EXECUTIONS=$(aws codepipeline list-pipeline-executions --pipeline-name $pipline_name --region $REGION)
                 LAST_EXECUTION=$(jq -r '.pipelineExecutionSummaries[0]' <<< "$PIPELINE_EXECUTIONS")
                 if [ "$LAST_EXECUTION" != "null" ];
                     then
                         LAST_EXECUTED_TIMESTAMP=$(jq -r '.startTime' <<< "$LAST_EXECUTION")
                         LAST_EXECUTED_DATE="$(date -r ${LAST_EXECUTED_TIMESTAMP%.*})"
                     else
                         LAST_EXECUTED_DATE="Not executed in last year"
                 fi
                 LAST_EXECUTED_DATES+=("$LAST_EXECUTED_DATE")
             fi
         done
     
     done
     
     fileName=$REGION-$(date +%s)
     printf "| %-30s | %-30s |\n" "Polling Pipeline Name" "Last Executed Time"
     printf "| %-30s | %-30s |\n" "_____________________" "__________________"
     for i in "${!POLLING_PIPELINES[@]}"; do
       printf "| %-30s | %-30s |\n" "${POLLING_PIPELINES[i]}" "${LAST_EXECUTED_DATES[i]}"
       printf "${POLLING_PIPELINES[i]}," >> $fileName.csv
     done
     
     printf "\nSaving Polling Pipeline Names to file $fileName.csv."
     ```
   + Salin dan tempel kode berikut ke dalam **PollingPipelinesExtractorskrip.py**.

     ```
     import boto3
     import sys
     import time
     import math
     
     hasNextToken = True
     nextToken = ""
     pollablePipelines = []
     lastExecutedTimes = []
     if len(sys.argv) == 1:
         raise Exception("Please provide region name.")
     session = boto3.Session(profile_name='default', region_name=sys.argv[1])
     codepipeline = session.client('codepipeline')
     
     def is_pollable_action(action):
         actionTypeId = action['actionTypeId']
         configuration = action['configuration']
         return actionTypeId['owner'] in {"AWS", "ThirdParty"} and actionTypeId['provider'] in {"GitHub", "CodeCommit", "S3"} and ('PollForSourceChanges' not in configuration or configuration['PollForSourceChanges'] == 'true')
     
     def has_pollable_actions(pipeline):
         hasPollableAction = False
         pipelineDefinition = codepipeline.get_pipeline(name=pipeline['name'])['pipeline']
         for action in pipelineDefinition['stages'][0]['actions']:
             hasPollableAction = is_pollable_action(action)
             if hasPollableAction:
                 break
         return hasPollableAction
     
     def get_last_executed_time(pipelineName):
         pipelineExecutions=codepipeline.list_pipeline_executions(pipelineName=pipelineName)['pipelineExecutionSummaries']
         if pipelineExecutions:
             return pipelineExecutions[0]['startTime'].strftime("%A %m/%d/%Y, %H:%M:%S")
         else:
             return "Not executed in last year"
     
     while hasNextToken:
         if nextToken=="":
             list_pipelines_response = codepipeline.list_pipelines()
         else:
             list_pipelines_response = codepipeline.list_pipelines(nextToken=nextToken)
         if 'nextToken' in list_pipelines_response:
             nextToken = list_pipelines_response['nextToken']
         else:
             hasNextToken= False
         for pipeline in list_pipelines_response['pipelines']:
             if has_pollable_actions(pipeline):
                 pollablePipelines.append(pipeline['name'])
                 lastExecutedTimes.append(get_last_executed_time(pipeline['name']))
     
     fileName="{region}-{timeNow}.csv".format(region=sys.argv[1],timeNow=math.trunc(time.time()))
     file = open(fileName, 'w')
     
     print ("{:<30} {:<30} {:<30}".format('Polling Pipeline Name', '|','Last Executed Time'))
     print ("{:<30} {:<30} {:<30}".format('_____________________', '|','__________________'))
     for i in range(len(pollablePipelines)):
         print("{:<30} {:<30} {:<30}".format(pollablePipelines[i], '|', lastExecutedTimes[i]))
         file.write("{pipeline},".format(pipeline=pollablePipelines[i]))
     file.close()
     print("\nSaving Polling Pipeline Names to file {fileName}".format(fileName=fileName))
     ```

1. Untuk setiap Wilayah di mana Anda memiliki saluran pipa, Anda harus menjalankan skrip untuk Wilayah itu. Untuk menjalankan skrip, lakukan salah satu hal berikut:
   + Jalankan perintah berikut untuk menjalankan skrip bernama **PollingPipelinesExtractor.sh.** Dalam contoh ini, Region adalah us-west-2.

     ```
     ./PollingPipelinesExtractor.sh us-west-2
     ```
   + **Untuk skrip python, jalankan perintah berikut untuk menjalankan skrip python bernama PollingPipelinesExtractor .py.** Dalam contoh ini, Region adalah us-west-2.

     ```
     python3 PollingPipelinesExtractor.py us-west-2
     ```

   Dalam contoh keluaran berikut dari skrip, Region us-west-2 mengembalikan daftar pipeline polling dan menunjukkan waktu eksekusi terakhir untuk setiap pipeline.

   ```
    % ./pollingPipelineExtractor.sh us-west-2
   
   | Polling Pipeline Name | Last Executed Time           |
   | _____________________ | __________________           |
   | myCodeBuildPipeline   | Wed Mar 8 09:35:49 PST 2023  |
   | myCodeCommitPipeline  | Mon Apr 24 22:32:32 PDT 2023 |
   | TestPipeline          | Not executed in last year    |
   
   Saving list of polling pipeline names to us-west-2-1682496174.csv...%
   ```

   Analisis output skrip dan, untuk setiap pipeline dalam daftar, perbarui sumber polling ke metode deteksi perubahan berbasis peristiwa yang direkomendasikan. 
**catatan**  
Saluran pemungutan suara Anda ditentukan oleh konfigurasi tindakan pipa untuk parameter tersebut. `PollForSourceChanges` Jika konfigurasi sumber pipeline menghilangkan `PollForSourceChanges` parameter, maka CodePipeline default untuk melakukan polling repositori Anda untuk perubahan sumber. Perilaku ini sama seperti jika `PollForSourceChanges` disertakan dan disetel ke true. Untuk informasi selengkapnya, lihat parameter konfigurasi untuk tindakan sumber pipeline Anda, seperti parameter konfigurasi tindakan sumber Amazon S3. [Referensi tindakan sumber Amazon S3](action-reference-S3.md)

   Perhatikan bahwa skrip ini juga menghasilkan file.csv yang berisi daftar pipeline polling di akun Anda dan menyimpan file.csv ke folder kerja saat ini.

## Migrasi jaringan pemungutan suara dengan sumber CodeCommit
<a name="update-change-detection-codecommit"></a>

Anda dapat memigrasikan pipeline polling yang akan digunakan EventBridge untuk mendeteksi perubahan di repositori CodeCommit sumber atau bucket sumber Amazon S3.

**CodeCommit**-- Untuk pipa dengan CodeCommit sumber, modifikasi pipa sehingga deteksi perubahan otomatis EventBridge. Pilih dari metode berikut untuk menerapkan migrasi:
+ **Konsol:** [Migrasikan saluran pemungutan suara (atau sumber Amazon CodeCommit S3) (konsol)](#update-change-detection-console-codecommit-S3)
+ **CLI:** [Migrasi jalur pemungutan suara (CodeCommit sumber) (CLI)](#update-change-detection-cli-codecommit)
+ **CloudFormation: ** [Migrasikan jalur pemungutan suara (CodeCommit sumber) (templat)CloudFormation](#update-change-detection-cfn-codecommit)

### Migrasikan saluran pemungutan suara (atau sumber Amazon CodeCommit S3) (konsol)
<a name="update-change-detection-console-codecommit-S3"></a>

Anda dapat menggunakan CodePipeline konsol untuk memperbarui pipeline yang akan digunakan EventBridge untuk mendeteksi perubahan di repositori CodeCommit sumber atau bucket sumber Amazon S3.

**catatan**  
Saat Anda menggunakan konsol untuk mengedit pipeline yang memiliki repositori CodeCommit sumber atau bucket sumber Amazon S3, aturan dan peran IAM akan dibuat untuk Anda. Jika Anda menggunakan AWS CLI untuk mengedit pipeline, Anda harus membuat EventBridge aturan dan peran IAM sendiri. Untuk informasi selengkapnya, lihat [CodeCommit tindakan sumber dan EventBridge](triggering.md).

Gunakan langkah-langkah ini untuk mengedit pipeline yang menggunakan pemeriksaan berkala. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

**Untuk mengedit tahap sumber pipa**

1. Masuk ke Konsol Manajemen AWS dan buka CodePipeline konsol di [http://console.aws.amazon. com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home).

   Nama-nama semua pipeline yang terkait dengan AWS akun Anda ditampilkan.

1. Di **Nama**, pilih nama pipeline yang ingin Anda edit. Ini membuka tampilan rinci dari pipa, termasuk keadaan masing-masing tindakan di setiap tahap pipa.

1. Pada halaman detail pipeline, pilih **Edit**. 

1. Di tahap **Edit**, pilih ikon edit pada aksi sumber.

1. Perluas **Opsi Deteksi Ubah** dan pilih **Gunakan CloudWatch Acara untuk memulai pipeline saya secara otomatis saat terjadi perubahan (disarankan)**. 

   Sebuah pesan muncul yang menunjukkan EventBridge aturan yang akan dibuat untuk pipeline ini. Pilih **Perbarui**.

   Jika Anda memperbarui pipeline yang memiliki sumber Amazon S3, Anda akan melihat pesan berikut. Pilih **Perbarui**.

1. Setelah selesai mengedit pipeline, pilih **Simpan perubahan pipeline** untuk kembali ke halaman ringkasan.

   Pesan menampilkan nama EventBridge aturan yang akan dibuat untuk pipeline Anda. Jangan pilih **Save and continue** (Simpan dan lanjutkan).

1. Untuk menguji tindakan Anda, lepaskan perubahan dengan menggunakan AWS CLI to commit perubahan ke sumber yang ditentukan dalam tahap sumber pipeline.

### Migrasi jalur pemungutan suara (CodeCommit sumber) (CLI)
<a name="update-change-detection-cli-codecommit"></a>

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan EventBridge aturan untuk memulai pipeline. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

Untuk membangun pipeline berbasis peristiwa CodeCommit, Anda mengedit `PollForSourceChanges` parameter pipeline Anda dan kemudian membuat sumber daya berikut:
+ EventBridge acara
+ Peran IAM untuk memungkinkan acara ini memulai pipeline Anda<a name="proc-cli-flag-codecommit"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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).

1. Jalankan **get-pipeline** perintah untuk menyalin struktur pipa ke file JSON. Misalnya, untuk pipeline bernama`MyFirstPipeline`, jalankan perintah berikut: 

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

   Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

1. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah `PollForSourceChanges` parameter menjadi`false`, seperti yang ditunjukkan dalam contoh ini.

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

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

1. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan **get-pipeline** perintah, hapus `metadata` baris dari file JSON. Jika tidak, **update-pipeline** perintah tidak dapat menggunakannya. Hapus `"metadata": { }` garis dan`"created"`,`"pipelineARN"`, dan `"updated"` bidang.

   Misalnya, hapus baris berikut dari struktur: 

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

   Simpan file tersebut.

1. Untuk menerapkan perubahan Anda, jalankan **update-pipeline** perintah, dengan menentukan file JSON pipeline:
**penting**  
Pastikan untuk menyertakan `file://` sebelum nama file. Diperlukan dalam perintah ini.

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

   Perintah ini mengembalikan seluruh struktur pipa yang diedit.
**catatan**  
**update-pipeline**Perintah menghentikan pipa. Jika revisi sedang dijalankan melalui pipeline saat Anda menjalankan **update-pipeline** perintah, proses itu dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi itu melalui pipeline yang diperbarui. Gunakan **`start-pipeline-execution`** perintah untuk memulai pipeline Anda secara manual.<a name="proc-cli-event-codecommit"></a>

**Untuk membuat EventBridge aturan dengan CodeCommit sebagai sumber acara dan CodePipeline sebagai target**

1. Tambahkan izin EventBridge untuk digunakan CodePipeline untuk menjalankan aturan. Untuk informasi selengkapnya, lihat [Menggunakan kebijakan berbasis sumber daya](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) untuk Amazon. EventBridge

   1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan yang memungkinkan EventBridge untuk mengambil peran layanan. Sebutkan kebijakan kepercayaan`trustpolicyforEB.json`.

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

****  

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

------

   1. Gunakan perintah berikut untuk membuat `Role-for-MyRule` peran dan melampirkan kebijakan kepercayaan.

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

   1. Buat kebijakan izin JSON, seperti yang ditunjukkan dalam contoh ini, untuk pipeline bernama. `MyFirstPipeline` Beri nama kebijakan `permissionspolicyforEB.json` izin.

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

****  

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

------

   1. Gunakan perintah berikut untuk melampirkan kebijakan `CodePipeline-Permissions-Policy-for-EB` izin ke `Role-for-MyRule` peran.

      **Mengapa saya membuat perubahan ini?** Menambahkan kebijakan ini ke peran akan membuat izin untuk EventBridge.

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

1. Panggil **put-rule** perintah dan sertakan`--name`,`--event-pattern`, dan `--role-arn` parameter.

   **Mengapa saya membuat perubahan ini?** Perintah ini CloudFormation memungkinkan untuk membuat acara.

   Perintah contoh berikut membuat aturan yang disebut`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. Untuk menambahkan CodePipeline sebagai target, panggil **put-targets** perintah dan sertakan parameter berikut:
   + `--rule`Parameter digunakan dengan yang `rule_name` Anda buat dengan menggunakan**put-rule**. 
   + `--targets`Parameter digunakan dengan `Id` daftar target dalam daftar target dan pipa target. `ARN`

   Contoh perintah berikut menentukan bahwa untuk aturan yang dipanggil`MyCodeCommitRepoRule`, target `Id` terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah sample juga menentukan contoh `ARN` untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

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

1. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan JSON berikut dalam perintah CLI Anda. 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.

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

### Migrasikan jalur pemungutan suara (CodeCommit sumber) (templat)CloudFormation
<a name="update-change-detection-cfn-codecommit"></a>

Untuk membangun pipeline berbasis peristiwa AWS CodeCommit, Anda mengedit `PollForSourceChanges` parameter pipeline Anda dan kemudian menambahkan sumber daya berikut ke template Anda:
+ Sebuah EventBridge aturan
+ Peran IAM untuk aturan Anda EventBridge 

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

**catatan**  
`Configuration`Properti dalam tahap sumber disebut`PollForSourceChanges`. Jika properti itu tidak disertakan dalam template Anda, maka `PollForSourceChanges` diatur ke secara `true` default.

------
#### [ YAML ]

```
Resources:
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: codecommit-polling-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          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: true
              RunOrder: 1
```

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

```
"Stages": [
    {
        "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": true
            },
            "RunOrder": 1
        }]
    },
```

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

------

**Example**  
Saat Anda membuat sumber daya ini CloudFormation, pipeline Anda dipicu saat file di repositori dibuat atau diperbarui. Berikut adalah cuplikan template terakhir:  

```
Resources:
  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 ] ]
  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
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: codecommit-events-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          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


...
```

```
    "Resources": {

...

        "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"
                                                }
                                            ]
                                        ]
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "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"
                    }
                ]
            }
        },
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "Name": "codecommit-events-pipeline",
                "RoleArn": {
                    "Fn::GetAtt": [
                        "CodePipelineServiceRole",
                        "Arn"
                    ]
                },
                "Stages": [
                    {
                        "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
                            }
                        ]
                    },

...
```


## Migrasikan jalur pemungutan suara dengan sumber S3 yang diaktifkan untuk acara
<a name="update-change-detection-S3-event"></a>

Untuk pipeline dengan sumber Amazon S3, modifikasi pipeline sehingga deteksi perubahan otomatis melalui EventBridge dan dengan bucket sumber yang diaktifkan untuk pemberitahuan peristiwa. Ini adalah metode yang direkomendasikan jika Anda menggunakan CLI atau CloudFormation untuk memigrasikan pipeline Anda.

**catatan**  
Ini termasuk menggunakan bucket yang diaktifkan untuk pemberitahuan acara, di mana Anda tidak perlu membuat CloudTrail jejak terpisah. Jika Anda menggunakan konsol, maka aturan acara dan CloudTrail jejak disiapkan untuk Anda. Untuk langkah-langkah tersebut, lihat[Migrasi jaringan pemungutan suara dengan sumber dan jejak S3 CloudTrail](#update-change-detection-S3).
+ **CLI:** [Migrasi jaringan pemungutan suara dengan sumber dan jejak CloudTrail S3 (CLI)](#update-change-detection-cli-S3)
+ **CloudFormation: **[Migrasikan jalur pemungutan suara dengan sumber dan CloudTrail jejak S3 (templat)CloudFormation](#update-change-detection-cfn-s3)

### Migrasikan jalur pemungutan suara dengan sumber S3 yang diaktifkan untuk acara (CLI)
<a name="update-change-detection-cli-S3-event"></a>

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan acara sebagai EventBridge gantinya. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit `PollForSourceChanges` parameter pipeline, lalu membuat sumber daya berikut:
+ EventBridge aturan acara
+ Peran IAM untuk memungkinkan EventBridge acara memulai pipeline Anda



**Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber peristiwa dan CodePipeline sebagai target dan menerapkan kebijakan izin**

1. Berikan izin EventBridge untuk digunakan CodePipeline untuk menjalankan aturan. Untuk informasi selengkapnya, lihat [Menggunakan kebijakan berbasis sumber daya](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) untuk Amazon. EventBridge

   1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan agar memungkinkan EventBridge untuk mengambil peran layanan. Nama itu`trustpolicyforEB.json`.

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

****  

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

------

   1. Gunakan perintah berikut untuk membuat `Role-for-MyRule` peran dan melampirkan kebijakan kepercayaan.

      **Mengapa saya membuat perubahan ini?** Menambahkan kebijakan kepercayaan ini ke peran akan membuat izin untuk EventBridge.

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

   1. Buat kebijakan izin JSON, seperti yang ditunjukkan di sini untuk pipeline bernama. `MyFirstPipeline` Beri nama kebijakan `permissionspolicyforEB.json` izin.

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

****  

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

------

   1. Gunakan perintah berikut untuk melampirkan kebijakan `CodePipeline-Permissions-Policy-for-EB` izin baru ke `Role-for-MyRule` peran yang Anda buat.

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

1. Panggil **put-rule** perintah dan sertakan`--name`,`--event-pattern`, dan `--role-arn` parameter.

   Perintah contoh berikut membuat aturan bernama`EnabledS3SourceRule`.

   ```
   aws events put-rule --name "EnabledS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-source-bucket\"]}}}" --role-arn "arn:aws:iam::{{ACCOUNT_ID}}:role/Role-for-MyRule"
   ```

1. Untuk menambahkan CodePipeline sebagai target, panggil **put-targets** perintah dan sertakan `--targets` parameter `--rule` dan.

   Perintah berikut menentukan bahwa untuk aturan bernama`EnabledS3SourceRule`, target `Id` terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah ini juga menentukan contoh `ARN` untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

   ```
   aws events put-targets --rule EnabledS3SourceRule --targets Id=codepipeline-AppPipeline,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
   ```<a name="proc-cli-flag-s3"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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).

1. Jalankan **get-pipeline** perintah untuk menyalin struktur pipa ke file JSON. Misalnya, untuk pipeline bernama`MyFirstPipeline`, jalankan perintah berikut: 

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

   Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

1. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah `PollForSourceChanges` parameter untuk bucket bernama `amzn-s3-demo-source-bucket``false`, seperti yang ditunjukkan dalam contoh ini.

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

   ```
   "configuration": {
       "S3Bucket": "amzn-s3-demo-source-bucket",
       {{"PollForSourceChanges": "false",}}
       "S3ObjectKey": "index.zip"
   },
   ```

1. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan **get-pipeline** perintah, Anda harus menghapus `metadata` baris dari file JSON. Jika tidak, **update-pipeline** perintah tidak dapat menggunakannya. Hapus `"metadata": { }` garis dan`"created"`,`"pipelineARN"`, dan `"updated"` bidang.

   Misalnya, hapus baris berikut dari struktur:

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

   Simpan file tersebut.

1. Untuk menerapkan perubahan Anda, jalankan **update-pipeline** perintah, dengan menentukan file JSON pipeline:
**penting**  
Pastikan untuk menyertakan `file://` sebelum nama file. Diperlukan dalam perintah ini.

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

   Perintah ini mengembalikan seluruh struktur pipa yang diedit.
**catatan**  
**update-pipeline**Perintah menghentikan pipa. Jika revisi sedang dijalankan melalui pipeline saat Anda menjalankan **update-pipeline** perintah, proses itu dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi itu melalui pipeline yang diperbarui. Gunakan **start-pipeline-execution** perintah untuk memulai pipeline Anda secara manual.

### Migrasikan pipeline polling dengan sumber S3 yang diaktifkan untuk acara (template)CloudFormation
<a name="update-change-detection-cfn-S3-event"></a>

Prosedur ini untuk pipeline di mana bucket sumber mengaktifkan peristiwa.

Gunakan langkah-langkah ini untuk mengedit pipeline Anda dengan sumber Amazon S3 dari polling hingga deteksi perubahan berbasis peristiwa.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit `PollForSourceChanges` parameter pipeline, lalu menambahkan sumber daya berikut ke templat:
+ EventBridge aturan dan peran IAM untuk memungkinkan acara ini memulai pipeline Anda.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

**catatan**  
`Configuration`Properti dalam tahap sumber disebut`PollForSourceChanges`. Jika template Anda tidak menyertakan properti itu, maka `PollForSourceChanges` disetel ke secara `true` default.

------
#### [ YAML ]

```
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      RoleArn: !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: AWS
                Version: 1
                Provider: S3
              OutputArtifacts: 
                - 
                  Name: SourceOutput
              Configuration: 
                S3Bucket: !Ref SourceBucket
                S3ObjectKey: !Ref S3SourceObjectKey
                PollForSourceChanges: true
              RunOrder: 1


...
```

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

```
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "RoleArn": {
                    "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"]
                },
                "Stages": [
                    {
                        "Name": "Source",
                        "Actions": [
                            {
                                "Name": "SourceAction",
                                "ActionTypeId": {
                                    "Category": "Source",
                                    "Owner": "AWS",
                                    "Version": 1,
                                    "Provider": "S3"
                                },
                                "OutputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "Configuration": {
                                    "S3Bucket": {
                                        "Ref": "SourceBucket"
                                    },
                                    "S3ObjectKey": {
                                        "Ref": "SourceObjectKey"
                                    },
                                    "PollForSourceChanges": true
                                },
                                "RunOrder": 1
                            }
                        ]
                    },


...
```

------

**Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber peristiwa dan CodePipeline sebagai target dan menerapkan kebijakan izin**

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. Gunakan `AWS::Events::Rule` CloudFormation sumber daya untuk menambahkan EventBridge aturan. Pola peristiwa ini membuat peristiwa yang memantau pembuatan atau penghapusan objek di bucket sumber Amazon S3 Anda. Selain itu, sertakan target pipa Anda. Ketika sebuah objek dibuat, aturan ini dipanggil `StartPipelineExecution` pada pipeline target Anda.

   **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:
         EventBusName: default
         EventPattern:
           source:
             - aws.s3
           detail-type:
             - Object Created
           detail:
             bucket:
               name:
                 - !Ref SourceBucket
         Name: EnabledS3SourceRule
         State: ENABLED
         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": {
   	 "EventBusName": "default",
   	 "EventPattern": {
   	     "source": [
   		 "aws.s3"
   	     ],
   	     "detail-type": [
   		  "Object Created"
   	     ],
   	     "detail": {
   		  "bucket": {
   		      "name": [
   			   "s3-pipeline-source-fra-bucket"
   		      ]
   	       }
               }
   	 },
   	 "Name": "EnabledS3SourceRule",
           "State": "ENABLED",
           "Targets": [
           {
             "Arn": {
               "Fn::Join": [
                 "",
                 [
                   "arn:aws:codepipeline:",
                   {
                     "Ref": "AWS::Region"
                   },
                   ":",
                   {
                     "Ref": "AWS::AccountId"
                   },
                   ":",
                   {
                     "Ref": "AppPipeline"
                   }
                 ]
               ]
             },
             "RoleArn": {
               "Fn::GetAtt": [
                 "EventRole",
                 "Arn"
               ]
             },
             "Id": "codepipeline-AppPipeline"
           }
         ]
       }
     }
   },
   
   ...
   ```

------

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

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

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

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

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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 `PollForSourceChanges` 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: S3
                OutputArtifacts: 
                  - Name: SourceOutput
                Configuration: 
                  S3Bucket: !Ref SourceBucket
                  S3ObjectKey: !Ref SourceObjectKey
                  {{PollForSourceChanges: false}}
                RunOrder: 1
  ```

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

  ```
   {
      "Name": "SourceAction",
      "ActionTypeId": {
        "Category": "Source",
        "Owner": "AWS",
        "Version": 1,
        "Provider": "S3"
      },
      "OutputArtifacts": [
        {
          "Name": "SourceOutput"
        }
      ],
      "Configuration": {
        "S3Bucket": {
          "Ref": "SourceBucket"
        },
        "S3ObjectKey": {
          "Ref": "SourceObjectKey"
        },
        "PollForSourceChanges": {{false}}
      },
      "RunOrder": 1
    }
  ```

------

**Example**  
Saat Anda menggunakan CloudFormation untuk membuat sumber daya ini, pipeline Anda dipicu saat file di repositori dibuat atau diperbarui.   
Jangan berhenti di sini. Meskipun pipeline Anda dibuat, Anda harus membuat CloudFormation template kedua untuk pipeline Amazon S3 Anda. Jika Anda tidak membuat template kedua, pipeline Anda tidak memiliki fungsi deteksi perubahan.

```
Parameters:
  SourceObjectKey:
    Description: 'S3 source artifact'
    Type: String
    Default: SampleApp_Linux.zip
  ApplicationName:
    Description: 'CodeDeploy application name'
    Type: String
    Default: DemoApplication
  BetaFleet:
    Description: 'Fleet configured in CodeDeploy'
    Type: String
    Default: DemoFleet

Resources:
  SourceBucket:
    Type: AWS::S3::Bucket
    Properties:
      NotificationConfiguration:
        EventBridgeConfiguration:
          EventBridgeEnabled: true
      VersioningConfiguration: 
        Status: Enabled
  CodePipelineArtifactStoreBucket:
    Type: AWS::S3::Bucket
  CodePipelineArtifactStoreBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref CodePipelineArtifactStoreBucket
      PolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
          -
            Sid: DenyUnEncryptedObjectUploads
            Effect: Deny
            Principal: '*'
            Action: s3:PutObject
            Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ]
            Condition:
              StringNotEquals: 
                s3:x-amz-server-side-encryption: aws:kms
          -
            Sid: DenyInsecureConnections
            Effect: Deny
            Principal: '*'
            Action: s3:*
            Resource: !Sub ${CodePipelineArtifactStoreBucket.Arn}/*
            Condition:
              Bool:
                aws:SecureTransport: false
  CodePipelineServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - codepipeline.amazonaws.com
            Action: sts:AssumeRole
      Path: /
      Policies:
        -
          PolicyName: AWS-CodePipeline-Service-3
          PolicyDocument:
            Version: 2012-10-17		 	 	 
            Statement:
              -
                Effect: Allow
                Action:
                  - codecommit:CancelUploadArchive
                  - codecommit:GetBranch
                  - codecommit:GetCommit
                  - codecommit:GetUploadArchiveStatus
                  - codecommit:UploadArchive
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - codedeploy:CreateDeployment
                  - codedeploy:GetApplicationRevision
                  - codedeploy:GetDeployment
                  - codedeploy:GetDeploymentConfig
                  - codedeploy:RegisterApplicationRevision
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - codebuild:BatchGetBuilds
                  - codebuild:StartBuild
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - devicefarm:ListProjects
                  - devicefarm:ListDevicePools
                  - devicefarm:GetRun
                  - devicefarm:GetUpload
                  - devicefarm:CreateUpload
                  - devicefarm:ScheduleRun
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - lambda:InvokeFunction
                  - lambda:ListFunctions
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - iam:PassRole
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - elasticbeanstalk:*
                  - ec2:*
                  - elasticloadbalancing:*
                  - autoscaling:*
                  - cloudwatch:*
                  - s3:*
                  - sns:*
                  - cloudformation:*
                  - rds:*
                  - sqs:*
                  - ecs:*
                Resource: '{{resource_ARN}}'
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: s3-events-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: AWS
                Version: 1
                Provider: S3
              OutputArtifacts: 
                - Name: SourceOutput
              Configuration: 
                S3Bucket: !Ref SourceBucket
                S3ObjectKey: !Ref SourceObjectKey
                PollForSourceChanges: false
              RunOrder: 1
        - 
          Name: Beta
          Actions: 
            - 
              Name: BetaAction
              InputArtifacts: 
                - Name: SourceOutput
              ActionTypeId: 
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CodeDeploy
              Configuration: 
                ApplicationName: !Ref ApplicationName
                DeploymentGroupName: !Ref BetaFleet
              RunOrder: 1
      ArtifactStore: 
        Type: S3
        Location: !Ref CodePipelineArtifactStoreBucket
  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 ] ]
  EventRule:
    Type: AWS::Events::Rule
    Properties:
      EventBusName: default
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - Object Created
        detail:
          bucket:
            name:
              - !Ref SourceBucket
      Name: EnabledS3SourceRule
      State: ENABLED
      Targets:
        -
          Arn:
            !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
          RoleArn: !GetAtt EventRole.Arn
          Id: codepipeline-AppPipeline
```  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "appconfig:StartDeployment",
                "appconfig:StopDeployment",
                "appconfig:GetDeployment"
            ],
            "Resource": [
                "arn:aws:appconfig:*:{{111122223333}}:application/[[Application]]",
                "arn:aws:appconfig:*:{{111122223333}}:application/[[Application]]/*",
                "arn:aws:appconfig:*:{{111122223333}}:deploymentstrategy/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

## Migrasi jaringan pemungutan suara dengan sumber dan jejak S3 CloudTrail
<a name="update-change-detection-S3"></a>

Untuk pipeline dengan sumber Amazon S3, modifikasi pipeline sehingga deteksi perubahan otomatis. EventBridge Pilih dari metode berikut untuk menerapkan migrasi:
+ **Konsol:** [Migrasikan saluran pemungutan suara (atau sumber Amazon CodeCommit S3) (konsol)](#update-change-detection-console-codecommit-S3)
+ **CLI:** [Migrasi jaringan pemungutan suara dengan sumber dan jejak CloudTrail S3 (CLI)](#update-change-detection-cli-S3)
+ **CloudFormation: **[Migrasikan jalur pemungutan suara dengan sumber dan CloudTrail jejak S3 (templat)CloudFormation](#update-change-detection-cfn-s3)

### Migrasi jaringan pemungutan suara dengan sumber dan jejak CloudTrail S3 (CLI)
<a name="update-change-detection-cli-S3"></a>

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk menggunakan acara sebagai EventBridge gantinya. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit `PollForSourceChanges` parameter pipeline, lalu membuat sumber daya berikut:
+ AWS CloudTrail kebijakan trail, bucket, dan bucket yang dapat digunakan Amazon S3 untuk mencatat peristiwa.
+ EventBridge acara
+ Peran IAM untuk memungkinkan EventBridge acara memulai pipeline Anda<a name="proc-cli-event-s3-createtrail"></a>

**Untuk membuat AWS CloudTrail jejak dan mengaktifkan logging**

Untuk menggunakan AWS CLI untuk membuat jejak, panggil **create-trail** perintah, dengan menentukan:
+ Nama jejak.
+ Bucket tempat Anda telah menerapkan kebijakan bucket AWS CloudTrail.

Untuk informasi selengkapnya, lihat [Membuat jejak dengan antarmuka baris AWS perintah](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail-by-using-the-aws-cli.html).

1. Panggil **create-trail** perintah dan sertakan `--s3-bucket-name` parameter `--name` dan.

   **Mengapa saya membuat perubahan ini?** Ini menciptakan CloudTrail jejak yang diperlukan untuk bucket sumber S3 Anda.

   Perintah berikut menggunakan `--name` dan `--s3-bucket-name` untuk membuat jejak bernama `my-trail` dan ember bernama`amzn-s3-demo-source-bucket`.

   ```
   aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
   ```

1. Panggil **start-logging** perintah dan sertakan `--name` parameternya.

   **Mengapa saya membuat perubahan ini?** Perintah ini memulai CloudTrail pencatatan untuk bucket sumber Anda dan mengirimkan acara ke EventBridge.

   Contoh:

   Perintah berikut digunakan `--name` untuk memulai logging pada jejak bernama`my-trail`.

   ```
   aws cloudtrail start-logging --name my-trail
   ```

1. Panggil **put-event-selectors** perintah dan sertakan `--event-selectors` parameter `--trail-name` dan. Gunakan penyeleksi peristiwa untuk menentukan bahwa jejak Anda ingin mencatat peristiwa data untuk bucket sumber Anda dan mengirim peristiwa ke EventBridge aturan.

   **Mengapa saya membuat perubahan ini?** Perintah ini menyaring peristiwa.

   Contoh:

   Perintah berikut menggunakan `--trail-name` dan `--event-selectors` menentukan peristiwa data untuk bucket sumber dan awalan bernama`amzn-s3-demo-source-bucket/myFolder`.

   ```
   aws cloudtrail put-event-selectors --trail-name {{my-trail}} --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
   ```<a name="proc-cli-event-s3-createrule"></a>

**Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber peristiwa dan CodePipeline sebagai target dan menerapkan kebijakan izin**

1. Berikan izin EventBridge untuk digunakan CodePipeline untuk menjalankan aturan. Untuk informasi selengkapnya, lihat [Menggunakan kebijakan berbasis sumber daya](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html) untuk Amazon. EventBridge

   1. Gunakan contoh berikut untuk membuat kebijakan kepercayaan agar memungkinkan EventBridge untuk mengambil peran layanan. Nama itu`trustpolicyforEB.json`.

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

****  

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

------

   1. Gunakan perintah berikut untuk membuat `Role-for-MyRule` peran dan melampirkan kebijakan kepercayaan.

      **Mengapa saya membuat perubahan ini?** Menambahkan kebijakan kepercayaan ini ke peran akan membuat izin untuk EventBridge.

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

   1. Buat kebijakan izin JSON, seperti yang ditunjukkan di sini untuk pipeline bernama. `MyFirstPipeline` Beri nama kebijakan `permissionspolicyforEB.json` izin.

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

****  

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

------

   1. Gunakan perintah berikut untuk melampirkan kebijakan `CodePipeline-Permissions-Policy-for-EB` izin baru ke `Role-for-MyRule` peran yang Anda buat.

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

1. Panggil **put-rule** perintah dan sertakan`--name`,`--event-pattern`, dan `--role-arn` parameter.

   Perintah contoh berikut membuat aturan bernama`MyS3SourceRule`.

   ```
   aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}}
    --role-arn "arn:aws:iam::{{ACCOUNT_ID}}:role/Role-for-MyRule"
   ```

1. Untuk menambahkan CodePipeline sebagai target, panggil **put-targets** perintah dan sertakan `--targets` parameter `--rule` dan.

   Perintah berikut menentukan bahwa untuk aturan bernama`MyS3SourceRule`, target `Id` terdiri dari nomor satu, menunjukkan bahwa dalam daftar target untuk aturan, ini adalah target 1. Perintah ini juga menentukan contoh `ARN` untuk pipeline. Pipeline dimulai ketika sesuatu berubah di repositori.

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

1. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan JSON berikut dalam perintah CLI Anda. Contoh berikut mengonfigurasi penggantian di mana:
   + `Source`Dalam contoh ini, adalah nilai dinamis, yang didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. `actionName`
   + `S3_OBJECT_VERSION_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.

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "ARN",
               "InputTransformer": {
                   "InputPathsMap": {
                       "revisionValue": "$.detail.object.version-id"
                   },
                   "InputTemplate": {
                       "sourceRevisions": {
                           "actionName": "Source",
                           "revisionType": "S3_OBJECT_VERSION_ID",
                           "revisionValue": "<{{revisionValue}}>"
                       }
                   }
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-s3"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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).

1. Jalankan **get-pipeline** perintah untuk menyalin struktur pipa ke file JSON. Misalnya, untuk pipeline bernama`MyFirstPipeline`, jalankan perintah berikut: 

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

   Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

1. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah `PollForSourceChanges` parameter untuk bucket bernama `amzn-s3-demo-source-bucket``false`, seperti yang ditunjukkan dalam contoh ini.

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

   ```
   "configuration": {
       "S3Bucket": "amzn-s3-demo-source-bucket",
       {{"PollForSourceChanges": "false",}}
       "S3ObjectKey": "index.zip"
   },
   ```

1. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan **get-pipeline** perintah, Anda harus menghapus `metadata` baris dari file JSON. Jika tidak, **update-pipeline** perintah tidak dapat menggunakannya. Hapus `"metadata": { }` garis dan`"created"`,`"pipelineARN"`, dan `"updated"` bidang.

   Misalnya, hapus baris berikut dari struktur:

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

   Simpan file tersebut.

1. Untuk menerapkan perubahan Anda, jalankan **update-pipeline** perintah, dengan menentukan file JSON pipeline:
**penting**  
Pastikan untuk menyertakan `file://` sebelum nama file. Diperlukan dalam perintah ini.

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

   Perintah ini mengembalikan seluruh struktur pipa yang diedit.
**catatan**  
**update-pipeline**Perintah menghentikan pipa. Jika revisi sedang dijalankan melalui pipeline saat Anda menjalankan **update-pipeline** perintah, proses itu dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi itu melalui pipeline yang diperbarui. Gunakan **start-pipeline-execution** perintah untuk memulai pipeline Anda secara manual.

### Migrasikan jalur pemungutan suara dengan sumber dan CloudTrail jejak S3 (templat)CloudFormation
<a name="update-change-detection-cfn-s3"></a>

Gunakan langkah-langkah ini untuk mengedit pipeline Anda dengan sumber Amazon S3 dari polling hingga deteksi perubahan berbasis peristiwa.

Untuk membuat pipeline berbasis peristiwa dengan Amazon S3, Anda mengedit `PollForSourceChanges` parameter pipeline, lalu menambahkan sumber daya berikut ke templat:
+ EventBridge mengharuskan semua peristiwa Amazon S3 harus dicatat. Anda harus membuat kebijakan AWS CloudTrail trail, bucket, dan bucket yang dapat digunakan Amazon S3 untuk mencatat peristiwa yang terjadi. Untuk informasi selengkapnya, lihat [Mencatat peristiwa data untuk jejak](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) dan [peristiwa pengelolaan Logging untuk jejak](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html).
+ EventBridge aturan dan peran IAM untuk memungkinkan acara ini memulai pipeline kami.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda menyertakan konten seperti berikut ini.

**catatan**  
`Configuration`Properti dalam tahap sumber disebut`PollForSourceChanges`. Jika template Anda tidak menyertakan properti itu, maka `PollForSourceChanges` disetel ke secara `true` default.

------
#### [ YAML ]

```
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      RoleArn: !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: AWS
                Version: 1
                Provider: S3
              OutputArtifacts: 
                - 
                  Name: SourceOutput
              Configuration: 
                S3Bucket: !Ref SourceBucket
                S3ObjectKey: !Ref S3SourceObjectKey
                PollForSourceChanges: true
              RunOrder: 1


...
```

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

```
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "RoleArn": {
                    "Fn::GetAtt": ["CodePipelineServiceRole", "Arn"]
                },
                "Stages": [
                    {
                        "Name": "Source",
                        "Actions": [
                            {
                                "Name": "SourceAction",
                                "ActionTypeId": {
                                    "Category": "Source",
                                    "Owner": "AWS",
                                    "Version": 1,
                                    "Provider": "S3"
                                },
                                "OutputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "Configuration": {
                                    "S3Bucket": {
                                        "Ref": "SourceBucket"
                                    },
                                    "S3ObjectKey": {
                                        "Ref": "SourceObjectKey"
                                    },
                                    "PollForSourceChanges": true
                                },
                                "RunOrder": 1
                            }
                        ]
                    },


...
```

------<a name="proc-cfn-event-s3-createrule"></a>

**Untuk membuat EventBridge aturan dengan Amazon S3 sebagai sumber peristiwa dan CodePipeline sebagai target dan menerapkan kebijakan izin**

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. Gunakan `AWS::Events::Rule` CloudFormation sumber daya untuk menambahkan EventBridge aturan. Pola acara ini membuat acara yang memantau`CopyObject`, `PutObject` dan `CompleteMultipartUpload` di bucket sumber Amazon S3 Anda. Selain itu, sertakan target pipa Anda. Ketika`CopyObject`,`PutObject`, atau `CompleteMultipartUpload` terjadi, aturan ini muncul `StartPipelineExecution` di pipeline target Anda.

   **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.s3
           detail-type:
             - 'AWS API Call via CloudTrail'
           detail:
             eventSource:
               - s3.amazonaws.com
             eventName:
               - CopyObject
               - PutObject
               - CompleteMultipartUpload
             requestParameters:
               bucketName:
                 - !Ref SourceBucket
               key:
                 - !Ref SourceObjectKey
         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.s3"
           ],
           "detail-type": [
             "AWS API Call via CloudTrail"
           ],
           "detail": {
             "eventSource": [
               "s3.amazonaws.com"
             ],
             "eventName": [
               "CopyObject",
               "PutObject",
               "CompleteMultipartUpload"
             ],
             "requestParameters": {
               "bucketName": [
                 {
                   "Ref": "SourceBucket"
                 }
               ],
               "key": [
                 {
                   "Ref": "SourceObjectKey"
                 }
               ]
             }
           }
         },
         "Targets": [
           {
             "Arn": {
               "Fn::Join": [
                 "",
                 [
                   "arn:aws:codepipeline:",
                   {
                     "Ref": "AWS::Region"
                   },
                   ":",
                   {
                     "Ref": "AWS::AccountId"
                   },
                   ":",
                   {
                     "Ref": "AppPipeline"
                   }
                 ]
               ]
             },
             "RoleArn": {
               "Fn::GetAtt": [
                 "EventRole",
                 "Arn"
               ]
             },
             "Id": "codepipeline-AppPipeline"
           }
         ]
       }
     }
   },
   
   ...
   ```

------

1. Tambahkan cuplikan ini ke template pertama Anda untuk memungkinkan fungsionalitas cross-stack:

------
#### [ YAML ]

   ```
   Outputs:
     SourceBucketARN:
       Description: "S3 bucket ARN that Cloudtrail will use"
       Value: !GetAtt SourceBucket.Arn
       Export:
         Name: SourceBucketARN
   ```

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

   ```
     "Outputs" : {
       "SourceBucketARN" : {
         "Description" : "S3 bucket ARN that Cloudtrail will use",
         "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] },
         "Export" : {
           "Name" : "SourceBucketARN"
         }
       }
   
   ...
   ```

------

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`
   + `S3_OBJECT_VERSION_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.

   ```
   ---
   Rule: my-rule
   Targets:
   - Id: MyTargetId
     Arn: {{pipeline-ARN}}
     InputTransformer:
       InputPathsMap:
         revisionValue: "$.detail.object.version-id"
       InputTemplate:
         sourceRevisions:
           actionName: Source
           revisionType: S3_OBJECT_VERSION_ID
           revisionValue: '<{{revisionValue}}>'
   ```

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

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

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

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

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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 `PollForSourceChanges` 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: S3
                OutputArtifacts: 
                  - Name: SourceOutput
                Configuration: 
                  S3Bucket: !Ref SourceBucket
                  S3ObjectKey: !Ref SourceObjectKey
                  {{PollForSourceChanges: false}}
                RunOrder: 1
  ```

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

  ```
   {
      "Name": "SourceAction",
      "ActionTypeId": {
        "Category": "Source",
        "Owner": "AWS",
        "Version": 1,
        "Provider": "S3"
      },
      "OutputArtifacts": [
        {
          "Name": "SourceOutput"
        }
      ],
      "Configuration": {
        "S3Bucket": {
          "Ref": "SourceBucket"
        },
        "S3ObjectKey": {
          "Ref": "SourceObjectKey"
        },
        "PollForSourceChanges": {{false}}
      },
      "RunOrder": 1
    }
  ```

------<a name="proc-cfn-event-s3-createtrail"></a>

**Untuk membuat template kedua untuk sumber daya saluran Amazon S3 Anda CloudTrail**
+ Dalam templat terpisah, di bawah`Resources`, gunakan`AWS::S3::Bucket`,`AWS::S3::BucketPolicy`, dan `AWS::CloudTrail::Trail` CloudFormation sumber daya untuk memberikan definisi dan jejak bucket sederhana CloudTrail.

  **Mengapa saya membuat perubahan ini?** Mengingat batas saat ini lima jalur per akun, CloudTrail jejak harus dibuat dan dikelola secara terpisah. (Lihat [Batas di AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/WhatIsCloudTrail-Limits.html).) Namun, Anda dapat menyertakan banyak bucket Amazon S3 pada satu jalur, sehingga Anda dapat membuat jejak sekali dan kemudian menambahkan bucket Amazon S3 untuk saluran pipa lain seperlunya. Tempelkan berikut ini ke dalam file template sampel kedua Anda.

------
#### [ YAML ]

  ```
  ###################################################################################
  # Prerequisites: 
  #   - S3 SourceBucket and SourceObjectKey must exist
  ###################################################################################
  
  Parameters:
    SourceObjectKey:
      Description: 'S3 source artifact'
      Type: String
      Default: SampleApp_Linux.zip
  
  Resources:
    AWSCloudTrailBucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref AWSCloudTrailBucket
        PolicyDocument:
          Version: 2012-10-17		 	 	 
          Statement:
            -
              Sid: AWSCloudTrailAclCheck
              Effect: Allow
              Principal:
                Service:
                  - cloudtrail.amazonaws.com
              Action: s3:GetBucketAcl
              Resource: !GetAtt AWSCloudTrailBucket.Arn
            -
              Sid: AWSCloudTrailWrite
              Effect: Allow
              Principal:
                Service:
                  - cloudtrail.amazonaws.com
              Action: s3:PutObject
              Resource: !Join [ '', [ !GetAtt AWSCloudTrailBucket.Arn, '/AWSLogs/', !Ref 'AWS::AccountId', '/*' ] ]
              Condition: 
                StringEquals:
                  s3:x-amz-acl: bucket-owner-full-control
    AWSCloudTrailBucket:
      Type: AWS::S3::Bucket
      DeletionPolicy: Retain
    AwsCloudTrail:
      DependsOn:
        - AWSCloudTrailBucketPolicy
      Type: AWS::CloudTrail::Trail
      Properties:
        S3BucketName: !Ref AWSCloudTrailBucket
        EventSelectors:
          -
            DataResources:
              -
                Type: AWS::S3::Object
                Values:
                  - !Join [ '', [ !ImportValue SourceBucketARN, '/', !Ref SourceObjectKey ] ]
            ReadWriteType: WriteOnly
            IncludeManagementEvents: false
        IncludeGlobalServiceEvents: true
        IsLogging: true
        IsMultiRegionTrail: true
  
  
  ...
  ```

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

  ```
  {
    "Parameters": {
      "SourceObjectKey": {
        "Description": "S3 source artifact",
        "Type": "String",
        "Default": "SampleApp_Linux.zip"
      }
    },
    "Resources": {
      "AWSCloudTrailBucket": {
        "Type": "AWS::S3::Bucket",
          "DeletionPolicy": "Retain"
      },
      "AWSCloudTrailBucketPolicy": {
        "Type": "AWS::S3::BucketPolicy",
        "Properties": {
          "Bucket": {
            "Ref": "AWSCloudTrailBucket"
          },
          "PolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Sid": "AWSCloudTrailAclCheck",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "cloudtrail.amazonaws.com"
                  ]
                },
                "Action": "s3:GetBucketAcl",
                "Resource": {
                  "Fn::GetAtt": [
                    "AWSCloudTrailBucket",
                    "Arn"
                  ]
                }
              },
              {
                "Sid": "AWSCloudTrailWrite",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "cloudtrail.amazonaws.com"
                  ]
                },
                "Action": "s3:PutObject",
                "Resource": {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AWSCloudTrailBucket",
                          "Arn"
                        ]
                      },
                      "/AWSLogs/",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      "/*"
                    ]
                  ]
                },
                "Condition": {
                  "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                  }
                }
              }
            ]
          }
        }
      },
      "AwsCloudTrail": {
        "DependsOn": [
          "AWSCloudTrailBucketPolicy"
        ],
        "Type": "AWS::CloudTrail::Trail",
        "Properties": {
          "S3BucketName": {
            "Ref": "AWSCloudTrailBucket"
          },
          "EventSelectors": [
            {
              "DataResources": [
                {
                  "Type": "AWS::S3::Object",
                  "Values": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          {
                            "Fn::ImportValue": "SourceBucketARN"
                          },
                          "/",
                          {
                            "Ref": "SourceObjectKey"
                          }
                        ]
                      ]
                    }
                  ]
                }
              ],
              "ReadWriteType": "WriteOnly",
              "IncludeManagementEvents": false
            }
          ],
          "IncludeGlobalServiceEvents": true,
          "IsLogging": true,
          "IsMultiRegionTrail": true
        }
      }
    }
  }
  
  ...
  ```

------

**Example**  
Saat Anda menggunakan CloudFormation untuk membuat sumber daya ini, pipeline Anda dipicu saat file di repositori dibuat atau diperbarui.   
Jangan berhenti di sini. Meskipun pipeline Anda dibuat, Anda harus membuat CloudFormation template kedua untuk pipeline Amazon S3 Anda. Jika Anda tidak membuat template kedua, pipeline Anda tidak memiliki fungsi deteksi perubahan.

```
Resources:
  SourceBucket:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration: 
        Status: Enabled
  CodePipelineArtifactStoreBucket:
    Type: AWS::S3::Bucket
  CodePipelineArtifactStoreBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref CodePipelineArtifactStoreBucket
      PolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
          -
            Sid: DenyUnEncryptedObjectUploads
            Effect: Deny
            Principal: '*'
            Action: s3:PutObject
            Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ]
            Condition:
              StringNotEquals: 
                s3:x-amz-server-side-encryption: aws:kms
          -
            Sid: DenyInsecureConnections
            Effect: Deny
            Principal: '*'
            Action: s3:*
            Resource: !Join [ '', [ !GetAtt CodePipelineArtifactStoreBucket.Arn, '/*' ] ]
            Condition:
              Bool:
                aws:SecureTransport: false
  CodePipelineServiceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - codepipeline.amazonaws.com
            Action: sts:AssumeRole
      Path: /
      Policies:
        -
          PolicyName: AWS-CodePipeline-Service-3
          PolicyDocument:
            Version: 2012-10-17		 	 	 
            Statement:
              -
                Effect: Allow
                Action:
                  - codecommit:CancelUploadArchive
                  - codecommit:GetBranch
                  - codecommit:GetCommit
                  - codecommit:GetUploadArchiveStatus
                  - codecommit:UploadArchive
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - codedeploy:CreateDeployment
                  - codedeploy:GetApplicationRevision
                  - codedeploy:GetDeployment
                  - codedeploy:GetDeploymentConfig
                  - codedeploy:RegisterApplicationRevision
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - codebuild:BatchGetBuilds
                  - codebuild:StartBuild
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - devicefarm:ListProjects
                  - devicefarm:ListDevicePools
                  - devicefarm:GetRun
                  - devicefarm:GetUpload
                  - devicefarm:CreateUpload
                  - devicefarm:ScheduleRun
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - lambda:InvokeFunction
                  - lambda:ListFunctions
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - iam:PassRole
                Resource: '{{resource_ARN}}'
              -
                Effect: Allow
                Action:
                  - elasticbeanstalk:*
                  - ec2:*
                  - elasticloadbalancing:*
                  - autoscaling:*
                  - cloudwatch:*
                  - s3:*
                  - sns:*
                  - cloudformation:*
                  - rds:*
                  - sqs:*
                  - ecs:*
                Resource: '{{resource_ARN}}'
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: s3-events-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: AWS
                Version: 1
                Provider: S3
              OutputArtifacts: 
                - Name: SourceOutput
              Configuration: 
                S3Bucket: !Ref SourceBucket
                S3ObjectKey: !Ref SourceObjectKey
                PollForSourceChanges: false
              RunOrder: 1
        - 
          Name: Beta
          Actions: 
            - 
              Name: BetaAction
              InputArtifacts: 
                - Name: SourceOutput
              ActionTypeId: 
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CodeDeploy
              Configuration: 
                ApplicationName: !Ref ApplicationName
                DeploymentGroupName: !Ref BetaFleet
              RunOrder: 1
      ArtifactStore: 
        Type: S3
        Location: !Ref CodePipelineArtifactStoreBucket
  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 ] ]
  EventRule:
    Type: AWS::Events::Rule
    Properties:
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - 'AWS API Call via CloudTrail'
        detail:
          eventSource:
            - s3.amazonaws.com
          eventName:
            - PutObject
            - CompleteMultipartUpload
          resources:
            ARN:
              - !Join [ '', [ !GetAtt SourceBucket.Arn, '/', !Ref SourceObjectKey ] ]
      Targets:
        -
          Arn:
            !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
          RoleArn: !GetAtt EventRole.Arn
          Id: codepipeline-AppPipeline
            
Outputs:
  SourceBucketARN:
    Description: "S3 bucket ARN that Cloudtrail will use"
    Value: !GetAtt SourceBucket.Arn
    Export:
      Name: SourceBucketARN
```

```
    "Resources": {
        "SourceBucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "VersioningConfiguration": {
                    "Status": "Enabled"
                }
            }
        },
        "CodePipelineArtifactStoreBucket": {
            "Type": "AWS::S3::Bucket"
        },
        "CodePipelineArtifactStoreBucketPolicy": {
            "Type": "AWS::S3::BucketPolicy",
            "Properties": {
                "Bucket": {
                    "Ref": "CodePipelineArtifactStoreBucket"
                },
                "PolicyDocument": {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [
                        {
                            "Sid": "DenyUnEncryptedObjectUploads",
                            "Effect": "Deny",
                            "Principal": "*",
                            "Action": "s3:PutObject",
                            "Resource": {
                                "Fn::Join": [
                                    "",
                                    [
                                        {
                                            "Fn::GetAtt": [
                                                "CodePipelineArtifactStoreBucket",
                                                "Arn"
                                            ]
                                        },
                                        "/*"
                                    ]
                                ]
                            },
                            "Condition": {
                                "StringNotEquals": {
                                    "s3:x-amz-server-side-encryption": "aws:kms"
                                }
                            }
                        },
                        {
                            "Sid": "DenyInsecureConnections",
                            "Effect": "Deny",
                            "Principal": "*",
                            "Action": "s3:*",
                            "Resource": {
                                "Fn::Join": [
                                    "",
                                    [
                                        {
                                            "Fn::GetAtt": [
                                                "CodePipelineArtifactStoreBucket",
                                                "Arn"
                                            ]
                                        },
                                        "/*"
                                    ]
                                ]
                            },
                            "Condition": {
                                "Bool": {
                                    "aws:SecureTransport": false
                                }
                            }
                        }
                    ]
                }
            }
        },
        "CodePipelineServiceRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "codepipeline.amazonaws.com"
                                ]
                            },
                            "Action": "sts:AssumeRole"
                        }
                    ]
                },
                "Path": "/",
                "Policies": [
                    {
                        "PolicyName": "AWS-CodePipeline-Service-3",
                        "PolicyDocument": {
                            "Version": "2012-10-17",		 	 	 
                            "Statement": [
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codecommit:CancelUploadArchive",
                                        "codecommit:GetBranch",
                                        "codecommit:GetCommit",
                                        "codecommit:GetUploadArchiveStatus",
                                        "codecommit:UploadArchive"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codedeploy:CreateDeployment",
                                        "codedeploy:GetApplicationRevision",
                                        "codedeploy:GetDeployment",
                                        "codedeploy:GetDeploymentConfig",
                                        "codedeploy:RegisterApplicationRevision"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "codebuild:BatchGetBuilds",
                                        "codebuild:StartBuild"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "devicefarm:ListProjects",
                                        "devicefarm:ListDevicePools",
                                        "devicefarm:GetRun",
                                        "devicefarm:GetUpload",
                                        "devicefarm:CreateUpload",
                                        "devicefarm:ScheduleRun"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "lambda:InvokeFunction",
                                        "lambda:ListFunctions"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "iam:PassRole"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                },
                                {
                                    "Effect": "Allow",
                                    "Action": [
                                        "elasticbeanstalk:*",
                                        "ec2:*",
                                        "elasticloadbalancing:*",
                                        "autoscaling:*",
                                        "cloudwatch:*",
                                        "s3:*",
                                        "sns:*",
                                        "cloudformation:*",
                                        "rds:*",
                                        "sqs:*",
                                        "ecs:*"
                                    ],
                                    "Resource": "{{resource_ARN}}"
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "Name": "s3-events-pipeline",
                "RoleArn": {
                    "Fn::GetAtt": [
                        "CodePipelineServiceRole",
                        "Arn"
                    ]
                },
                "Stages": [
                    {
                        "Name": "Source",
                        "Actions": [
                            {
                                "Name": "SourceAction",
                                "ActionTypeId": {
                                    "Category": "Source",
                                    "Owner": "AWS",
                                    "Version": 1,
                                    "Provider": "S3"
                                },
                                "OutputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "Configuration": {
                                    "S3Bucket": {
                                        "Ref": "SourceBucket"
                                    },
                                    "S3ObjectKey": {
                                        "Ref": "SourceObjectKey"
                                    },
                                    "PollForSourceChanges": false
                                },
                                "RunOrder": 1
                            }
                        ]
                    },
                    {
                        "Name": "Beta",
                        "Actions": [
                            {
                                "Name": "BetaAction",
                                "InputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "ActionTypeId": {
                                    "Category": "Deploy",
                                    "Owner": "AWS",
                                    "Version": 1,
                                    "Provider": "CodeDeploy"
                                },
                                "Configuration": {
                                    "ApplicationName": {
                                        "Ref": "ApplicationName"
                                    },
                                    "DeploymentGroupName": {
                                        "Ref": "BetaFleet"
                                    }
                                },
                                "RunOrder": 1
                            }
                        ]
                    }
                ],
                "ArtifactStore": {
                    "Type": "S3",
                    "Location": {
                        "Ref": "CodePipelineArtifactStoreBucket"
                    }
                }
            }
        },
        "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"
                                                }
                                            ]
                                        ]
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "EventRule": {
            "Type": "AWS::Events::Rule",
            "Properties": {
                "EventPattern": {
                    "source": [
                        "aws.s3"
                    ],
                    "detail-type": [
                        "AWS API Call via CloudTrail"
                    ],
                    "detail": {
                        "eventSource": [
                            "s3.amazonaws.com"
                        ],
                        "eventName": [
                            "PutObject",
                            "CompleteMultipartUpload"
                        ],
                        "resources": {
                            "ARN": [
                                {
                                    "Fn::Join": [
                                        "",
                                        [
                                            {
                                                "Fn::GetAtt": [
                                                    "SourceBucket",
                                                    "Arn"
                                                ]
                                            },
                                            "/",
                                            {
                                                "Ref": "SourceObjectKey"
                                            }
                                        ]
                                    ]
                                }
                            ]
                        }
                    }
                },
                "Targets": [
                    {
                        "Arn": {
                            "Fn::Join": [
                                "",
                                [
                                    "arn:aws:codepipeline:",
                                    {
                                        "Ref": "AWS::Region"
                                    },
                                    ":",
                                    {
                                        "Ref": "AWS::AccountId"
                                    },
                                    ":",
                                    {
                                        "Ref": "AppPipeline"
                                    }
                                ]
                            ]
                        },
                        "RoleArn": {
                            "Fn::GetAtt": [
                                "EventRole",
                                "Arn"
                            ]
                        },
                        "Id": "codepipeline-AppPipeline"
                    }
                ]
            }
        }
    },
    "Outputs" : {
        "SourceBucketARN" : {
            "Description" : "S3 bucket ARN that Cloudtrail will use",
            "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] },
            "Export" : {
                "Name" : "SourceBucketARN"
            }
        }
    }
}


...
```

## Migrasikan pipeline polling untuk tindakan sumber GitHub (melalui OAuth aplikasi) ke koneksi
<a name="update-change-detection-github-connection"></a>

Anda dapat memigrasikan tindakan sumber GitHub (melalui OAuth aplikasi) untuk menggunakan koneksi untuk repositori eksternal Anda. Ini adalah metode deteksi perubahan yang direkomendasikan untuk saluran pipa dengan tindakan sumber GitHub (melalui OAuth aplikasi).

Untuk pipeline dengan tindakan sumber GitHub (melalui OAuth aplikasi), kami sarankan untuk memodifikasi pipeline untuk menggunakan tindakan GitHub (melalui GitHub Aplikasi) sehingga deteksi perubahan otomatis. AWS CodeConnections Untuk informasi selengkapnya tentang bekerja dengan koneksi, lihat[GitHub koneksi](connections-github.md).



### Buat koneksi ke GitHub (konsol)
<a name="update-change-detection-github-connection-console"></a>

Anda dapat menggunakan konsol untuk membuat koneksi ke GitHub.

#### Langkah 1: Ganti tindakan Anda GitHub (melalui OAuth aplikasi)
<a name="update-change-detection-github-connection-console-edit"></a>

Gunakan halaman edit pipeline untuk mengganti tindakan GitHub (melalui OAuth aplikasi) Anda dengan tindakan GitHub (melalui GitHub Aplikasi).

**Untuk mengganti tindakan Anda GitHub (melalui OAuth aplikasi)**

1. Masuk ke CodePipeline konsol.

1. Pilih pipeline Anda, dan pilih **Edit**. Pilih **Edit tahap** pada tahap sumber Anda. Sebuah pesan menampilkan yang merekomendasikan Anda memperbarui tindakan Anda.

1. Di **penyedia Tindakan**, pilih **GitHub (melalui GitHub Aplikasi)**.

1. Lakukan salah satu tindakan berikut:
   + Di bawah **Koneksi**, jika Anda belum membuat sambungan ke penyedia Anda, pilih **Connect to GitHub**. Lanjutkan ke Langkah 2: Buat koneksi ke GitHub.
   + Di bawah **Koneksi**, jika Anda telah membuat koneksi ke penyedia Anda, pilih koneksi. Lanjutkan ke Langkah 3: Simpan Tindakan Sumber untuk Koneksi Anda.

#### Langkah 2: Buat koneksi ke GitHub
<a name="update-change-detection-github-connection-console-install"></a>

Setelah Anda memilih untuk membuat koneksi, GitHub halaman **Connect to** ditampilkan.

**Untuk membuat koneksi ke GitHub**

1. Di bawah **pengaturan GitHub koneksi**, nama koneksi Anda ditampilkan di **Nama koneksi**.

   Di bawah **GitHub Aplikasi**, pilih penginstalan aplikasi atau pilih **Instal aplikasi baru** untuk membuatnya.
**catatan**  
Anda menginstal satu aplikasi untuk semua koneksi Anda ke penyedia tertentu. Jika Anda telah menginstal GitHub aplikasi, pilih dan lewati langkah ini.

1. Jika halaman otorisasi untuk GitHub ditampilkan, masuk dengan kredensil Anda dan kemudian pilih untuk melanjutkan.

1. Di halaman penginstalan aplikasi, pesan menunjukkan bahwa AWS CodeStar aplikasi mencoba terhubung ke GitHub akun Anda.
**catatan**  
Anda hanya menginstal aplikasi sekali untuk setiap GitHub akun. Jika sebelumnya Anda menginstal aplikasi, Anda dapat memilih **Konfigurasi** untuk melanjutkan ke halaman modifikasi untuk instalasi aplikasi Anda, atau Anda dapat menggunakan tombol kembali untuk kembali ke konsol.

1. Pada AWS CodeStar halaman **Instal**, pilih **Instal**.

1. Pada GitHub halaman **Connect to**, ID koneksi untuk instalasi baru Anda ditampilkan. Pilih **Hubungkan**.

#### Langkah 3: Simpan tindakan GitHub sumber Anda
<a name="update-change-detection-github-connection-console-save"></a>

Selesaikan pembaruan Anda di halaman **Edit tindakan** untuk menyimpan tindakan sumber baru Anda.

**Untuk menyimpan tindakan GitHub sumber Anda**

1. Di **Repositori**, masukkan nama repositori pihak ketiga Anda. Di **Branch**, masukkan cabang tempat Anda ingin pipeline mendeteksi perubahan sumber.
**catatan**  
Di **Repository**, ketik `owner-name/repository-name` seperti yang ditunjukkan dalam contoh ini:   

   ```
   my-account/my-repository
   ```

1. Dalam **format artefak Output**, pilih format untuk artefak Anda. 
   + Untuk menyimpan artefak keluaran dari GitHub tindakan menggunakan metode default, pilih **CodePipelinedefault**. Tindakan mengakses file dari GitHub repositori dan menyimpan artefak dalam file ZIP di toko artefak pipa.
   + **Untuk menyimpan file JSON yang berisi referensi URL ke repositori sehingga tindakan hilir dapat melakukan perintah Git secara langsung, pilih klon Penuh.** Opsi ini hanya dapat digunakan oleh tindakan CodeBuild hilir.

     Jika Anda memilih opsi ini, Anda perlu memperbarui izin untuk peran layanan CodeBuild proyek Anda seperti yang ditunjukkan pada[Tambahkan CodeBuild GitClone izin untuk koneksi ke Bitbucket,, GitHub Enterprise Server GitHub, atau .com GitLab](troubleshooting.md#codebuild-role-connections). Untuk tutorial yang menunjukkan cara menggunakan opsi **klon Penuh**, lihat[Tutorial: Gunakan klon lengkap dengan sumber GitHub pipa](tutorials-github-gitclone.md).

1. Di **artefak Output**, Anda dapat mempertahankan nama artefak keluaran untuk tindakan ini, seperti. `SourceArtifact` Pilih **Selesai** untuk menutup halaman **tindakan Edit**.

1. Pilih **Selesai** untuk menutup halaman pengeditan panggung. Pilih **Simpan** untuk menutup halaman pengeditan pipeline.

### Buat koneksi ke GitHub (CLI)
<a name="update-change-detection-github-connection-cli"></a>

Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk membuat koneksi ke GitHub. 

Untuk melakukannya, gunakan perintah **create-connection**. 

**penting**  
Koneksi yang dibuat melalui AWS CLI atau AWS CloudFormation dalam `PENDING` status secara default. Setelah Anda membuat koneksi dengan CLI atau CloudFormation, gunakan konsol untuk mengedit koneksi untuk membuat statusnya. `AVAILABLE`

**Untuk membuat koneksi ke GitHub**

1. Buka terminal (Linux, macOS, atau Unix) atau command prompt (Windows). Gunakan AWS CLI untuk menjalankan **create-connection** perintah, menentukan `--provider-type` dan `--connection-name` untuk koneksi Anda. Dalam contoh ini, nama penyedia pihak ketiga adalah `GitHub` dan nama koneksi yang ditentukan adalah `MyConnection`.

   ```
   aws codeconnections create-connection --provider-type GitHub --connection-name MyConnection
   ```

   Jika berhasil, perintah ini mengembalikan informasi ARN koneksi seperti berikut ini.

   ```
   {
       "ConnectionArn": "arn:aws:codeconnections:us-west-2:{{account_id}}:connection/aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f"
   }
   ```

1. Gunakan konsol untuk menyelesaikan koneksi.

## Migrasikan jalur polling untuk tindakan sumber GitHub (melalui OAuth aplikasi) ke webhooks
<a name="update-change-detection-github-webhooks"></a>

Anda dapat memigrasikan pipeline untuk menggunakan webhook guna mendeteksi perubahan di repositori sumber. GitHub Migrasi ke webhooks ini hanya untuk tindakan GitHub (melalui OAuth aplikasi).
+ **Konsol:** [Migrasikan pipeline polling ke webhooks ((melalui OAuth aplikasi) tindakan sumber) GitHub (konsol)](#update-change-detection-console-github)
+ **CLI:** [Migrasikan jalur pemungutan suara ke tindakan sumber webhook (GitHub (melalui OAuth aplikasi)) (CLI)](#update-change-detection-cli-github)
+ **CloudFormation: ** [Perbarui saluran pipa untuk acara push (GitHub (melalui OAuth aplikasi) tindakan sumber) (CloudFormation templat)](#update-change-detection-cfn-github)

**penting**  
Saat membuat CodePipeline webhook, jangan gunakan kredensialnya sendiri atau gunakan kembali token rahasia yang sama di beberapa webhook. Untuk keamanan optimal, buat token rahasia unik untuk setiap webhook yang Anda buat. Token rahasia adalah string arbitrer yang Anda berikan, yang GitHub digunakan untuk menghitung dan menandatangani muatan webhook yang dikirim ke CodePipeline, untuk melindungi integritas dan keaslian muatan webhook. Menggunakan kredensil Anda sendiri atau menggunakan kembali token yang sama di beberapa webhook dapat menyebabkan kerentanan keamanan.

### Migrasikan pipeline polling ke webhooks ((melalui OAuth aplikasi) tindakan sumber) GitHub (konsol)
<a name="update-change-detection-console-github"></a>

Untuk tindakan sumber GitHub (melalui OAuth aplikasi), Anda dapat menggunakan CodePipeline konsol untuk memperbarui pipeline agar menggunakan webhook guna mendeteksi perubahan di repositori GitHub sumber.

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan polling (pemeriksaan berkala) untuk digunakan EventBridge sebagai gantinya. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

Saat Anda menggunakan konsol, `PollForSourceChanges` parameter untuk pipelined Anda diubah untuk Anda. GitHub Webhook dibuat dan terdaftar untuk Anda.

**Untuk mengedit tahap sumber pipa**

1. Masuk ke Konsol Manajemen AWS dan buka CodePipeline konsol di [http://console.aws.amazon. com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home).

   Nama-nama semua pipeline yang terkait dengan AWS akun Anda ditampilkan.

1. Di **Nama**, pilih nama pipeline yang ingin Anda edit. Ini membuka tampilan rinci dari pipa, termasuk keadaan masing-masing tindakan di setiap tahap pipa.

1. Pada halaman detail pipeline, pilih **Edit**.

1. Di **tahap Edit**, pilih ikon edit pada aksi sumber.

1. Perluas **Ubah opsi deteksi** dan pilih **Gunakan CloudWatch Acara Amazon untuk memulai pipeline saya secara otomatis saat terjadi perubahan (disarankan)**.

   Pesan ditampilkan untuk memberi saran yang CodePipeline membuat webhook GitHub untuk mendeteksi perubahan sumber: AWS CodePipeline akan membuat webhook untuk Anda. Anda dapat memilih keluar dalam opsi di bawah ini. Pilih **Perbarui**. Selain webhook, CodePipeline buat yang berikut:
   + Sebuah rahasia, dibuat secara acak dan digunakan untuk mengotorisasi koneksi ke. GitHub
   + URL webhook, dibuat menggunakan titik akhir publik untuk Wilayah.

   CodePipeline mendaftarkan webhook dengan. GitHub Ini berlangganan URL untuk menerima acara repositori.

1. Setelah selesai mengedit pipeline, pilih **Simpan perubahan pipeline** untuk kembali ke halaman ringkasan.

   Pesan menampilkan nama webhook yang akan dibuat untuk pipeline Anda. Jangan pilih **Save and continue** (Simpan dan lanjutkan).

1. Untuk menguji tindakan Anda, lepaskan perubahan dengan menggunakan AWS CLI to commit perubahan ke sumber yang ditentukan dalam tahap sumber pipeline.

### Migrasikan jalur pemungutan suara ke tindakan sumber webhook (GitHub (melalui OAuth aplikasi)) (CLI)
<a name="update-change-detection-cli-github"></a>

Ikuti langkah-langkah ini untuk mengedit pipeline yang menggunakan pemeriksaan berkala untuk menggunakan webhook sebagai gantinya. Jika Anda ingin membuat pipeline, lihat[Buat pipeline, tahapan, dan tindakan](pipelines-create.md).

Untuk membangun pipeline yang digerakkan oleh peristiwa, Anda mengedit `PollForSourceChanges` parameter pipeline Anda dan kemudian membuat sumber daya berikut secara manual:
+ GitHub webhook dan parameter otorisasi<a name="proc-cli-gh-webhook"></a>

**Untuk membuat dan mendaftarkan webhook Anda**
**catatan**  
Saat Anda menggunakan CLI atau CloudFormation untuk membuat pipeline dan menambahkan webhook, Anda harus menonaktifkan pemeriksaan berkala. Untuk menonaktifkan pemeriksaan berkala, Anda harus secara eksplisit menambahkan `PollForSourceChanges` parameter dan mengaturnya ke false, seperti yang dijelaskan dalam prosedur akhir di bawah ini. Jika tidak, default untuk CLI atau CloudFormation pipeline adalah `PollForSourceChanges` defaultnya true dan tidak ditampilkan dalam output struktur pipa. Untuk informasi selengkapnya tentang PollForSourceChanges default, lihat. [Pengaturan yang valid untuk `PollForSourceChanges` parameter](PollForSourceChanges-defaults.md)

1. Dalam editor teks, buat dan simpan file JSON untuk webhook yang ingin Anda buat. Gunakan file contoh ini untuk webhook bernama`my-webhook`:

   ```
   {
       "webhook": {
           "name": "my-webhook",
   	 "targetPipeline": "{{pipeline_name}}",
   	 "targetAction": "{{source_action_name}}",
   	 "filters": [{
   	     "jsonPath": "$.ref",
   	     "matchEquals": "refs/heads/{Branch}"
   	 }],
   	 "authentication": "GITHUB_HMAC",
   	 "authenticationConfiguration": {
   	     "SecretToken": "{{secret}}"
   	 }
       }
   }
   ```

1. Panggil **put-webhook** perintah dan sertakan `--region` parameter `--cli-input` dan.

   Contoh perintah berikut membuat webhook dengan file `webhook_json` JSON.

   ```
   aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
   ```

1. Dalam output yang ditunjukkan dalam contoh ini, URL dan ARN dikembalikan untuk webhook bernama. `my-webhook`

   ```
   {
       "webhook": {
           "url": "https://webhooks.{{domain}}.com/trigger111111111EXAMPLE11111111111111111",
           "definition": {
               "authenticationConfiguration": {
                   "SecretToken": "{{secret}}"
               },
               "name": "my-webhook",
               "authentication": "GITHUB_HMAC",
               "targetPipeline": "{{pipeline_name}}",
               "targetAction": "Source",
               "filters": [
                   {
                       "jsonPath": "$.ref",
                       "matchEquals": "refs/heads/{Branch}"
                   }
               ]
           },
           "arn": "arn:aws:codepipeline:eu-central-1:{{ACCOUNT_ID}}:webhook:my-webhook"
       },
       "tags": [{
         "key": "Project",
         "value": "ProjectA"
       }]
   }
   ```

   Contoh ini menambahkan penandaan ke webhook dengan menyertakan kunci `Project` tag dan `ProjectA` nilai pada webhook. Untuk informasi selengkapnya tentang menandai sumber daya CodePipeline, lihat[Penandaan pada sumber daya](tag-resources.md).

1. Panggil **register-webhook-with-third-party** perintah dan sertakan `--webhook-name` parameternya.

   Contoh perintah berikut mendaftarkan webhook bernama. `my-webhook`

   ```
   aws codepipeline register-webhook-with-third-party --webhook-name my-webhook
   ```<a name="proc-cli-flag-github"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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).

1. Jalankan **get-pipeline** perintah untuk menyalin struktur pipa ke file JSON. Misalnya, untuk pipeline bernama`MyFirstPipeline`, Anda akan mengetik perintah berikut: 

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

   Perintah ini tidak mengembalikan apa pun, tetapi file yang Anda buat akan muncul di direktori tempat Anda menjalankan perintah.

1. Buka file JSON di editor teks biasa dan edit tahap sumber dengan mengubah atau menambahkan parameter. `PollForSourceChanges` Dalam contoh ini, untuk repositori bernama`UserGitHubRepo`, parameter diatur ke. `false`

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

   ```
   "configuration": {
       "Owner": "{{name}}",
       "Repo": "UserGitHubRepo",
       {{"PollForSourceChanges": "false",}}
       "Branch": "main",
       "OAuthToken": "****"
   },
   ```

1. Jika Anda bekerja dengan struktur pipa yang diambil menggunakan **get-pipeline** perintah, Anda harus mengedit struktur dalam file JSON dengan menghapus `metadata` baris dari file. Jika tidak, **update-pipeline** perintah tidak dapat menggunakannya. Hapus `"metadata"` bagian dari struktur pipa di file JSON, termasuk: `{ }` dan`"created"`,`"pipelineARN"`, dan `"updated"` bidang.

   Misalnya, hapus baris berikut dari struktur: 

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

   Simpan file tersebut.

1. Untuk menerapkan perubahan Anda, jalankan **update-pipeline** perintah, tentukan file JSON pipeline, mirip dengan berikut ini:
**penting**  
Pastikan untuk menyertakan `file://` sebelum nama file. Diperlukan dalam perintah ini.

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

   Perintah ini mengembalikan seluruh struktur pipa yang diedit.
**catatan**  
**update-pipeline**Perintah menghentikan pipa. Jika revisi sedang dijalankan melalui pipeline saat Anda menjalankan **update-pipeline** perintah, proses itu dihentikan. Anda harus memulai pipeline secara manual untuk menjalankan revisi itu melalui pipeline yang diperbarui. Gunakan **start-pipeline-execution** perintah untuk memulai pipeline Anda secara manual.

### Perbarui saluran pipa untuk acara push (GitHub (melalui OAuth aplikasi) tindakan sumber) (CloudFormation templat)
<a name="update-change-detection-cfn-github"></a>

Ikuti langkah-langkah berikut untuk memperbarui pipeline Anda (dengan GitHub sumber) dari pemeriksaan berkala (polling) hingga deteksi perubahan berbasis peristiwa menggunakan webhook.

Untuk membangun pipeline berbasis peristiwa AWS CodeCommit, Anda mengedit `PollForSourceChanges` parameter pipeline Anda dan kemudian menambahkan sumber daya GitHub webhook ke template Anda.

Jika Anda menggunakan CloudFormation untuk membuat dan mengelola pipeline Anda, template Anda memiliki konten seperti berikut ini.

**catatan**  
Perhatikan properti `PollForSourceChanges` konfigurasi di tahap sumber. Jika template Anda tidak menyertakan properti itu, maka `PollForSourceChanges` disetel ke secara `true` default.

------
#### [ YAML ]

```
Resources:
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: github-polling-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: ThirdParty
                Version: 1
                Provider: GitHub
              OutputArtifacts: 
                - Name: SourceOutput
              Configuration: 
                Owner: !Ref GitHubOwner
                Repo: !Ref RepositoryName
                Branch: !Ref BranchName
                OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}                PollForSourceChanges: true
              RunOrder: 1


...
```

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

```
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "Name": "github-polling-pipeline",
                "RoleArn": {
                    "Fn::GetAtt": [
                        "CodePipelineServiceRole",
                        "Arn"
                    ]
                },
                "Stages": [
                    {
                        "Name": "Source",
                        "Actions": [
                            {
                                "Name": "SourceAction",
                                "ActionTypeId": {
                                    "Category": "Source",
                                    "Owner": "ThirdParty",
                                    "Version": 1,
                                    "Provider": "GitHub"
                                },
                                "OutputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "Configuration": {
                                    "Owner": {
                                        "Ref": "GitHubOwner"
                                    },
                                    "Repo": {
                                        "Ref": "RepositoryName"
                                    },
                                    "Branch": {
                                        "Ref": "BranchName"
                                    },
                                    "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}",
                                    "PollForSourceChanges": true
                                },
                                "RunOrder": 1
                            }
                        ]
                    },


...
```

------<a name="proc-cfn-webhook-github"></a>

**Untuk menambahkan parameter dan membuat webhook di template Anda**

Kami sangat menyarankan Anda menggunakan AWS Secrets Manager untuk menyimpan kredensil Anda. Jika Anda menggunakan Secrets Manager, Anda harus sudah mengkonfigurasi dan menyimpan parameter rahasia Anda di Secrets Manager. Contoh ini menggunakan referensi dinamis ke Secrets Manager untuk GitHub kredensialnya untuk webhook Anda. Untuk informasi selengkapnya, lihat [Menggunakan Referensi Dinamis untuk Menentukan Nilai Templat](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager). 
**penting**  
Saat meneruskan parameter rahasia, jangan masukkan nilainya langsung ke templat. Nilai tersebut diberikan sebagai teks biasa dan karena itu dapat dibaca. Untuk alasan keamanan, jangan gunakan plaintext di CloudFormation template Anda untuk menyimpan kredensi Anda.

Saat Anda menggunakan CLI atau CloudFormation untuk membuat pipeline dan menambahkan webhook, Anda harus menonaktifkan pemeriksaan berkala.
**catatan**  
Untuk menonaktifkan pemeriksaan berkala, Anda harus secara eksplisit menambahkan `PollForSourceChanges` parameter dan mengaturnya ke false, seperti yang dijelaskan dalam prosedur akhir di bawah ini. Jika tidak, default untuk CLI atau CloudFormation pipeline adalah `PollForSourceChanges` defaultnya true dan tidak ditampilkan dalam output struktur pipa. Untuk informasi selengkapnya tentang PollForSourceChanges default, lihat. [Pengaturan yang valid untuk `PollForSourceChanges` parameter](PollForSourceChanges-defaults.md)

1. Dalam template, di bawah`Resources`, tambahkan parameter Anda:

------
#### [ YAML ]

   ```
   Parameters:
           GitHubOwner:
             Type: String
   
   ...
   ```

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

   ```
   {
   	"Parameters": {
   		"BranchName": {
   			"Description": "GitHub branch name",
   			"Type": "String",
   			"Default": "main"
   		},
   		"GitHubOwner": {
   			"Type": "String"
   		},
   
   ...
   ```

------

1. Gunakan `AWS::CodePipeline::Webhook` CloudFormation sumber daya untuk menambahkan webhook.
**catatan**  
Yang `TargetAction` Anda tentukan harus cocok dengan `Name` properti tindakan sumber yang ditentukan dalam pipeline.

   Jika `RegisterWithThirdParty` disetel ke`true`, pastikan pengguna yang terkait dengan `OAuthToken` dapat mengatur cakupan yang diperlukan. GitHub Token dan webhook memerlukan GitHub cakupan berikut: 
   + `repo`- digunakan untuk kontrol penuh untuk membaca dan menarik artefak dari repositori publik dan swasta ke dalam pipa. 
   + `admin:repo_hook`- digunakan untuk kontrol penuh kait repositori.

   Jika tidak, GitHub mengembalikan 404. Untuk informasi lebih lanjut tentang 404 yang dikembalikan, lihat[https://help.github.com/articles/about-webhooks](https://help.github.com/articles/about-webhooks).

------
#### [ YAML ]

   ```
     AppPipelineWebhook:
       Type: AWS::CodePipeline::Webhook
       Properties:
         Authentication: GITHUB_HMAC
         AuthenticationConfiguration:
           SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}
         Filters:
           - 
             JsonPath: "$.ref"
             MatchEquals: refs/heads/{Branch}
         TargetPipeline: !Ref AppPipeline
         TargetAction: SourceAction
         Name: AppPipelineWebhook
         TargetPipelineVersion: !GetAtt AppPipeline.Version
         RegisterWithThirdParty: true
   
   
   ...
   ```

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

   ```
   "AppPipelineWebhook": {
       "Type": "AWS::CodePipeline::Webhook",
       "Properties": {
           "Authentication": "GITHUB_HMAC",
           "AuthenticationConfiguration": {
               "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}"
           },
           "Filters": [{
               "JsonPath": "$.ref",
               "MatchEquals": "refs/heads/{Branch}"
           }],
           "TargetPipeline": {
               "Ref": "AppPipeline"
           },
           "TargetAction": "SourceAction",
           "Name": "AppPipelineWebhook",
           "TargetPipelineVersion": {
               "Fn::GetAtt": [
                 "AppPipeline",
                 "Version"
               ]
           },
           "RegisterWithThirdParty": true
       }
   },
   
   ...
   ```

------

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-github"></a>

**Untuk mengedit PollForSourceChanges parameter pipeline**
**penting**  
Saat Anda membuat pipeline dengan metode ini, `PollForSourceChanges` parameter default ke true jika tidak secara eksplisit disetel ke false. 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: ThirdParty
                  Version: 1
                  Provider: GitHub
                OutputArtifacts: 
                  - Name: SourceOutput
                Configuration: 
                  Owner: !Ref GitHubOwner
                  Repo: !Ref RepositoryName
                  Branch: !Ref BranchName
                  OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}
                  {{PollForSourceChanges: false}}
                RunOrder: 1
  ```

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

  ```
   {
      "Name": "Source",
      "Actions": [{
  	 "Name": "SourceAction",
  	 "ActionTypeId": {
  	     "Category": "Source",
  	     "Owner": "ThirdParty",
  	     "Version": 1,
  	     "Provider": "GitHub"
  	},
  	"OutputArtifacts": [{
  	    "Name": "SourceOutput"
  	}],
  	"Configuration": {
  	    "Owner": {
  		 "Ref": "GitHubOwner"
  	    },
  	    "Repo": {
  		 "Ref": "RepositoryName"
  	    },
  	    "Branch": {
  	        "Ref": "BranchName"
  	    },
  	    "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}",
  	    {{PollForSourceChanges: false}}
  	},
  	"RunOrder": 1
      }]
  ```

------

**Example**  
Saat Anda membuat sumber daya ini CloudFormation, webhook yang ditentukan dibuat di GitHub repositori yang ditentukan. Pipeline Anda dipicu saat komit.   

```
Parameters:
  GitHubOwner:
    Type: String
    
Resources:
  AppPipelineWebhook:
    Type: AWS::CodePipeline::Webhook
    Properties:
      Authentication: GITHUB_HMAC
      AuthenticationConfiguration:
        SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}
      Filters:
        - 
          JsonPath: "$.ref"
          MatchEquals: refs/heads/{Branch}
      TargetPipeline: !Ref AppPipeline
      TargetAction: SourceAction
      Name: AppPipelineWebhook
      TargetPipelineVersion: !GetAtt AppPipeline.Version
      RegisterWithThirdParty: true
  AppPipeline: 
    Type: AWS::CodePipeline::Pipeline
    Properties: 
      Name: github-events-pipeline
      RoleArn: 
        !GetAtt CodePipelineServiceRole.Arn
      Stages: 
        - 
          Name: Source
          Actions: 
            - 
              Name: SourceAction
              ActionTypeId: 
                Category: Source
                Owner: ThirdParty
                Version: 1
                Provider: GitHub
              OutputArtifacts: 
                - Name: SourceOutput
              Configuration: 
                Owner: !Ref GitHubOwner
                Repo: !Ref RepositoryName
                Branch: !Ref BranchName
                OAuthToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}
                PollForSourceChanges: false
              RunOrder: 1

...
```

```
{
    "Parameters": {
        "BranchName": {
            "Description": "GitHub branch name",
            "Type": "String",
            "Default": "main"
        },
        "RepositoryName": {
            "Description": "GitHub repository name",
            "Type": "String",
            "Default": "test"
        },
        "GitHubOwner": {
            "Type": "String"
        },
        "ApplicationName": {
            "Description": "CodeDeploy application name",
            "Type": "String",
            "Default": "DemoApplication"
        },
        "BetaFleet": {
            "Description": "Fleet configured in CodeDeploy",
            "Type": "String",
            "Default": "DemoFleet"
        }
    },
    "Resources": {

...

        },
        "AppPipelineWebhook": {
            "Type": "AWS::CodePipeline::Webhook",
            "Properties": {
                "Authentication": "GITHUB_HMAC",
                "AuthenticationConfiguration": {
                    "SecretToken": {
                        "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}"
                    }
                },
                "Filters": [
                    {
                        "JsonPath": "$.ref",
                        "MatchEquals": "refs/heads/{Branch}"
                    }
                ],
                "TargetPipeline": {
                    "Ref": "AppPipeline"
                },
                "TargetAction": "SourceAction",
                "Name": "AppPipelineWebhook",
                "TargetPipelineVersion": {
                    "Fn::GetAtt": [
                        "AppPipeline",
                        "Version"
                    ]
                },
                "RegisterWithThirdParty": true
            }
        },
        "AppPipeline": {
            "Type": "AWS::CodePipeline::Pipeline",
            "Properties": {
                "Name": "github-events-pipeline",
                "RoleArn": {
                    "Fn::GetAtt": [
                        "CodePipelineServiceRole",
                        "Arn"
                    ]
                },
                "Stages": [
                    {
                        "Name": "Source",
                        "Actions": [
                            {
                                "Name": "SourceAction",
                                "ActionTypeId": {
                                    "Category": "Source",
                                    "Owner": "ThirdParty",
                                    "Version": 1,
                                    "Provider": "GitHub"
                                },
                                "OutputArtifacts": [
                                    {
                                        "Name": "SourceOutput"
                                    }
                                ],
                                "Configuration": {
                                    "Owner": {
                                        "Ref": "GitHubOwner"
                                    },
                                    "Repo": {
                                        "Ref": "RepositoryName"
                                    },
                                    "Branch": {
                                        "Ref": "BranchName"
                                    },
                                    "OAuthToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}",
                                    "PollForSourceChanges": false
                                },
                                "RunOrder": 1

...
```