

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

# Menghubungkan ke tindakan sumber Amazon S3 yang menggunakan dan EventBridge AWS CloudTrail
<a name="create-cloudtrail-S3-source"></a>

Petunjuk di bagian ini memberikan langkah-langkah untuk membuat tindakan sumber S3 yang menggunakan sumber AWS CloudTrail daya yang harus Anda buat dan kelola. Untuk menggunakan tindakan sumber S3 dengan EventBridge itu tidak memerlukan AWS CloudTrail sumber daya tambahan, gunakan instruksi CLI di. [Migrasikan jalur pemungutan suara dengan sumber S3 yang diaktifkan untuk acara](update-change-detection.md#update-change-detection-S3-event)

**penting**  
Prosedur ini menyediakan langkah-langkah untuk membuat tindakan sumber S3 yang menggunakan sumber AWS CloudTrail daya yang harus Anda buat dan kelola. Prosedur untuk membuat tindakan ini tanpa AWS CloudTrail sumber daya tidak tersedia di konsol. Untuk menggunakan CLI, lihat. [Migrasikan jalur pemungutan suara dengan sumber S3 yang diaktifkan untuk acara](update-change-detection.md#update-change-detection-S3-event)

Untuk menambahkan aksi sumber Amazon S3 CodePipeline, Anda memilih salah satu untuk: 
+ Gunakan CodePipeline konsol **Create pipeline** wizard ([Buat pipeline khusus (konsol)](pipelines-create.md#pipelines-create-console)) atau **Edit halaman tindakan** untuk memilih opsi penyedia **S3**. Konsol membuat EventBridge aturan dan CloudTrail jejak yang memulai pipeline Anda saat sumbernya berubah.
+ Gunakan AWS CLI untuk menambahkan konfigurasi tindakan untuk `S3` tindakan dan membuat sumber daya tambahan sebagai berikut:
  + Gunakan `S3` contoh konfigurasi tindakan [Referensi tindakan sumber Amazon S3](action-reference-S3.md) untuk membuat tindakan Anda seperti yang ditunjukkan pada[Buat pipeline (CLI)](pipelines-create.md#pipelines-create-cli).
  + Metode deteksi perubahan default untuk memulai pipeline dengan polling sumber. Anda harus menonaktifkan pemeriksaan berkala dan membuat aturan deteksi perubahan dan jejak secara manual. Gunakan salah satu metode berikut:[Buat EventBridge aturan untuk sumber Amazon S3 (konsol)](create-cloudtrail-S3-source-console.md),[Buat EventBridge aturan untuk sumber Amazon S3 (CLI)](create-cloudtrail-S3-source-cli.md), atau[Buat EventBridge aturan untuk sumber Amazon S3 (template)CloudFormation](create-cloudtrail-S3-source-cfn.md).

AWS CloudTrail adalah layanan yang mencatat dan memfilter peristiwa di bucket sumber Amazon S3 Anda. Jejak mengirimkan perubahan sumber yang difilter ke EventBridge aturan. EventBridge Aturan mendeteksi perubahan sumber dan kemudian memulai pipeline Anda. 

**Persyaratan:**
+ Jika Anda tidak membuat jejak, gunakan jejak yang ada AWS CloudTrail untuk mencatat peristiwa di bucket sumber Amazon S3 dan mengirim peristiwa yang difilter ke aturan. EventBridge
+ Buat atau gunakan bucket S3 yang ada di mana AWS CloudTrail dapat menyimpan file lognya. AWS CloudTrail harus memiliki izin yang diperlukan untuk mengirimkan file log ke bucket Amazon S3. Bucket tidak dapat dikonfigurasi sebagai bucket [Requester Pays](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html). Saat Anda membuat bucket Amazon S3 sebagai bagian dari membuat atau memperbarui jejak di konsol, AWS CloudTrail lampirkan izin yang diperlukan ke bucket untuk Anda. Untuk informasi selengkapnya, lihat [Kebijakan Bucket Amazon S3](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html) untuk. CloudTrail

# Buat EventBridge aturan untuk sumber Amazon S3 (konsol)
<a name="create-cloudtrail-S3-source-console"></a>

Sebelum Anda membuat aturan EventBridge, Anda harus membuat AWS CloudTrail jejak. Untuk informasi selengkapnya, lihat [Membuat Jejak di Konsol](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html).

**penting**  
Jika Anda menggunakan konsol untuk membuat atau mengedit pipeline, EventBridge aturan dan AWS CloudTrail jejak dibuat untuk Anda.

**Untuk membuat jejak**

1. Buka AWS CloudTrail konsol.

1. Di panel navigasi, pilih **Jejak**.

1. Pilih **Buat jejak**. Untuk **nama Trail**, masukkan nama untuk jejak Anda.

1. Di bawah **Lokasi penyimpanan**, buat atau tentukan bucket yang akan digunakan untuk menyimpan file log. Secara default, ember dan objek Amazon S3 bersifat pribadi. Hanya pemilik sumber daya ( AWS akun yang membuat bucket) yang dapat mengakses bucket dan objeknya. Bucket harus memiliki kebijakan sumber daya yang memungkinkan AWS CloudTrail izin mengakses objek di bucket.

1. Di bawah **Bucket dan folder log Trail**, tentukan bucket Amazon S3 dan awalan objek (nama folder) untuk mencatat peristiwa data untuk semua objek di folder. Untuk setiap jejak, Anda dapat menambahkan hingga 250 objek Amazon S3. Lengkapi informasi kunci enkripsi yang diperlukan dan pilih **Berikutnya**.

1. Untuk **jenis Acara**, pilih **Acara manajemen**.

1. Untuk **acara Manajemen**, pilih **Tulis**. Jejak merekam aktivitas API tingkat objek Amazon S3 (misalnya, `GetObject` dan`PutObject`) pada bucket dan awalan yang ditentukan.

1. Pilih **Tulis**. 

1. Jika Anda puas dengan jejak, pilih **Buat jejak**.

**Untuk membuat EventBridge aturan yang menargetkan pipeline Anda dengan sumber Amazon S3**

1. Buka EventBridge konsol Amazon di [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. Di panel navigasi, pilih **Aturan**. Biarkan bus default dipilih atau pilih bus acara. Pilih **Buat aturan**.

1. Di **Nama**, masukkan nama untuk aturan Anda.

1. Di bawah **Jenis aturan**, pilih **Aturan dengan pola acara**. Pilih **Berikutnya**.

1. Di bawah **Sumber acara**, pilih **AWS acara atau acara EventBridge mitra**.

1. Di bawah **Contoh jenis acara**, pilih **AWS acara**.

1. Dalam **contoh peristiwa**, ketik S3 sebagai kata kunci untuk memfilter. Pilih **panggilan AWS API melalui CloudTrail**.

1. Di bawah **metode Creation**, pilih **pola Pelanggan (editor JSON)**.

   Tempel pola acara yang disediakan di bawah ini. Pastikan untuk menambahkan nama bucket dan kunci objek S3 (atau nama kunci) yang secara unik mengidentifikasi objek dalam ember sebagai. `requestParameters` Dalam contoh ini, aturan dibuat untuk bucket bernama `amzn-s3-demo-source-bucket` dan kunci objek dari`my-files.zip`. Saat Anda menggunakan jendela **Edit** untuk menentukan sumber daya, aturan Anda diperbarui untuk menggunakan pola peristiwa khusus.

   Berikut ini adalah contoh pola acara untuk menyalin dan menempel:

   ```
   {
       "source": [
           "aws.s3"
       ],
       "detail-type": [
           "AWS API Call via CloudTrail"
       ],
       "detail": {
           "eventSource": [
               "s3.amazonaws.com"
           ],
           "eventName": [
               "CopyObject",
               "CompleteMultipartUpload",
               "PutObject"
           ],
           "requestParameters": {
               "bucketName": [
                   "amzn-s3-demo-source-bucket"
               ],
               "key": [
                   "my-files.zip"
               ]
           }
       }
   }
   ```

1. Pilih **Berikutnya**.

1. Di **jenis Target**, pilih **AWS layanan**.

1. Di **Pilih target**, pilih **CodePipeline**. Di **ARN Pipeline**, masukkan ARN pipa agar pipa dimulai dengan aturan ini.
**catatan**  
Untuk mendapatkan ARN pipeline, jalankan perintah. **get-pipeline** ARN pipa muncul di output. Itu dibangun dalam format ini:   
arn:aws:codepipeline:: *region* *account* *pipeline-name*  
Contoh pipa ARN:  
arn:aws:codepipeline:us-east- 2:80398 CONTOH: MyFirstPipeline 

1. Untuk membuat atau menentukan peran layanan IAM yang memberikan EventBridge izin untuk memanggil target yang terkait dengan EventBridge aturan Anda (dalam hal ini, targetnya adalah): CodePipeline 
   + Pilih **Buat peran baru untuk sumber daya khusus ini** untuk membuat peran layanan yang memberikan EventBridge izin untuk memulai eksekusi pipeline Anda.
   + Pilih **Gunakan peran yang ada** untuk memasukkan peran layanan yang memberikan EventBridge izin untuk memulai eksekusi pipeline Anda.

1. (Opsional) Untuk menentukan penggantian sumber dengan ID gambar tertentu, gunakan transformator input untuk meneruskan data sebagai parameter JSON. Anda juga dapat menggunakan transformator input untuk melewati variabel pipa.
   + Perluas **Pengaturan tambahan**.

     Di bawah **Konfigurasikan input target**, pilih **Konfigurasi transformator input**.

     Di jendela dialog, pilih **Enter my own**. Dalam kotak **jalur Input**, ketik pasangan kunci-nilai berikut.

     ```
     {"revisionValue": "$.detail.object.version-id"}
     ```
   + Dalam kotak **Template**, ketik pasangan kunci-nilai berikut.

     ```
                                     
                                     {
         "sourceRevisions": [
             {
                 "actionName": "Source",
                 "revisionType": "S3_OBJECT_VERSION_ID",
                 "revisionValue": "<revisionValue>"
             }
         ],
          "variables": [
             {
                 "name": "Variable_Name",
                 "value": "Variable_Value"
             }
         ]
     }
     ```
   + Pilih **Konfirmasi**.

1. Pilih **Berikutnya**.

1. Pada halaman **Tag**, pilih **Berikutnya**.

1. Pada halaman **Tinjau dan buat**, tinjau konfigurasi aturan. Jika Anda puas dengan aturan, pilih **Create rule (Buat aturan)**.

# Buat EventBridge aturan untuk sumber Amazon S3 (CLI)
<a name="create-cloudtrail-S3-source-cli"></a><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.

# Buat EventBridge aturan untuk sumber Amazon S3 (template)CloudFormation
<a name="create-cloudtrail-S3-source-cfn"></a>

Untuk digunakan CloudFormation untuk membuat aturan, perbarui template Anda seperti yang ditunjukkan di sini.<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
        }
      }
    }
  }
  
  ...
  ```

------