

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EventBridge と を使用する Amazon S3 ソースアクションへの接続 AWS CloudTrail
<a name="create-cloudtrail-S3-source"></a>

このセクションの手順では、作成および管理する必要がある AWS CloudTrail リソースを使用する S3 ソースアクションを作成する手順について説明します。追加の AWS CloudTrail リソースを必要としない EventBridge で S3 ソースアクションを使用するには、「」の CLI の手順を使用します[イベントに対応した S3 ソースを使用してポーリングパイプラインを移行する](update-change-detection.md#update-change-detection-S3-event)。

**重要**  
この手順では、作成および管理する必要がある AWS CloudTrail リソースを使用する S3 ソースアクションを作成するステップを示します。 AWS CloudTrail リソースなしでこのアクションを作成する手順は、 コンソールでは使用できません。CLI を使用するには、「[イベントに対応した S3 ソースを使用してポーリングパイプラインを移行する](update-change-detection.md#update-change-detection-S3-event)」を参照してください。

CodePipeline で Amazon S3 のソースアクションを追加するには、次のいずれかを選択できます。
+ CodePipeline コンソールの **[パイプラインの作成]** ウィザード ([カスタムパイプラインを作成する (コンソール)](pipelines-create.md#pipelines-create-console))、または **[アクションを編集する]** ページを使用して、**[S3]** プロバイダオプションを選択します。コンソールは、ソースが変更されたときにパイプラインを開始する EventBridge ルールと CloudTrail 証跡を作成します。
+ を使用して、アクションの`S3`アクション設定 AWS CLI を追加し、次のように追加のリソースを作成します。
  + `S3` でのアクション設定の例を [Amazon S3 ソースアクションリファレンス](action-reference-S3.md) で使用し、[パイプラインを作成する (CLI)](pipelines-create.md#pipelines-create-cli) で表示されるようにアクションを作成します。
  + 変更検出方法のデフォルトは、ソースをポーリングすることによってパイプラインを開始します。定期的なチェックを無効にして、手動で変更検出ルールと証跡を作成する必要があります。[Amazon S3 ソースに対する EventBridge ルールを作成する (コンソール)](create-cloudtrail-S3-source-console.md)、[Amazon S3 ソースに対する EventBridge ルールを作成する (CLI)](create-cloudtrail-S3-source-cli.md)、[Amazon S3 ソースの EventBridge ルールを作成する (CloudFormation テンプレート) Amazon S3](create-cloudtrail-S3-source-cfn.md) の内、いずれかののいずれかの方法を使用します。

AWS CloudTrail は、Amazon S3 ソースバケットのイベントをログに記録し、フィルタリングするサービスです。この証跡によって、フィルタ処理されたソースの変更が EventBridge ルールに送信されます。EventBridge ルールはソースの変更を検出し、パイプラインを開始します。

**要件:**
+ 証跡を作成しない場合は、既存の AWS CloudTrail 証跡を使用して Amazon S3 ソースバケットのイベントを記録し、フィルタリングされたイベントを EventBridge ルールに送信します。
+ がログファイルを保存 AWS CloudTrail できる既存の S3 バケットを作成または使用します。 には、ログファイルを Amazon S3 バケットに配信するために必要なアクセス許可 AWS CloudTrail が必要です。このバケットを[リクエスタ支払い](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html)バケットとして設定することはできません。コンソールで証跡を作成または更新する一環として Amazon S3 バケットを作成すると、 は必要なアクセス許可をバケットにア AWS CloudTrail タッチします。詳細については、「[CloudTrail の Amazon S3 バケットポリシー」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html)を参照して ください。

# Amazon S3 ソースに対する EventBridge ルールを作成する (コンソール)
<a name="create-cloudtrail-S3-source-console"></a>

EventBridge でルールを設定する前に、 AWS CloudTrail 証跡を作成する必要があります。詳細については、「[コンソールで証跡を作成する](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html)」を参照してください。

**重要**  
コンソールを使用してパイプラインを作成または編集する場合は、EventBridge ルールと AWS CloudTrail 証跡が自動的に作成されます。

**証跡を作成するには**

1.  AWS CloudTrail コンソールを開きます。

1. ナビゲーションペインで、**[Trails]** (追跡) を選択します。

1. **[追跡の作成]**を選択します。[**Trail name**] に、証跡の名前を入力します。

1. [**保存場所**] でログファイルを保存するために使用するバケットを作成あるいは指定します。デフォルトでは、Amazon S3 バケットとオブジェクトはプライベートです。リソース所有者 (バケットを作成した AWS アカウント) のみがバケットとそのオブジェクトにアクセスできます。バケットには、バケット内のオブジェクトへのアクセス AWS CloudTrail を許可するリソースポリシーが必要です。

1. [**証跡ログバケットとフォルダ**] で、フォルダ内のすべてのオブジェクトのデータイベントを記録するための Amazon S3 バケットとオブジェクトプレフィックス (フォルダ名) を指定します。証跡ごとに、最大 250 個の Amazon S3 オブジェクトを追加できます。必要な暗号化キー情報を入力し、**[次へ]** を選択します。

1. **[イベントタイプ]** で **[管理イベント]** を選択します。

1. [**管理イベント**] で、[**書き込み**] を選択します。証跡では、指定したバケットとプレフィックスの Amazon S3 オブジェクトレベルの API アクティビティ (`GetObject` や `PutObject` など) が記録されます。

1. [**Write (書き込み)**] を選択します。

1. 証跡が適切であることを確認したら、[**証跡の作成**] を選択します。

**Amazon S3 ソースを使用するパイプラインをターゲットとする EventBridge ルールを作成するには**

1. Amazon EventBridge コンソール ([https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)) を開きます。

1. ナビゲーションペインで **[ルール]** を選択します。デフォルトのバスを選択したままにするか、イベントバスを選択します。**[‬ルールを作成]‭** を選択します。

1. [**名前**] で、ルールの名前を入力します。

1. [**ルールタイプ**] で、[**イベントパターンを持つルール**] を選択します。[**次へ**] を選択します。

1. [**イベントソース**] で、[**AWS イベントまたは EventBridge パートナーイベント**] を選択します。

1. **[サンプルイベントタイプ]** で **[AWS イベント]** を選択します。

1. **[サンプルイベント]** に、フィルタ処理するキーワードとして「S3」と入力します。[**CloudTrail 経由のAWS API コール**] を選択します。

1. [**作成方法**] セクションで、[**カスタムパターン (JSON エディタ)**] を選択します。

   以下に示すイベントパターンを貼り付けます。バケット名と、バケット内のオブジェクトを `requestParameters` として一意に識別する S3 オブジェクトキー (またはキー名) を必ず追加してください。この例では、`amzn-s3-demo-source-bucket` というバケットと `my-files.zip` というオブジェクトキーのルールが作成されます。リソースを指定するために [**編集**] ウィンドウを使用する場合、ルールはカスタムイベントパターンを使用するように更新されます。

   以下に示しているのは、コピーして貼り付けるサンプルイベントパターンです。

   ```
   {
       "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. [**次へ**] を選択します。

1. [**ターゲットタイプ**] で、[**AWS サービス**] を選択します。

1. [**ターゲットの選択**] で、[**CodePipeline**] を選択します。[**パイプライン ARN**] に、このルールによって開始されるパイプラインの ARN を入力します。
**注記**  
このパイプライン ARN を取得するには、**get-pipeline** コマンドを実行します。パイプライン ARN が出力に表示されます。以下の形式で作成されます。  
arn:aws:codepipeline:*region*:*account*:*pipeline-name*  
パイプライン ARN の例:  
arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline 

1. EventBridge ルールに関連付けられたターゲットを呼び出すためのアクセス許可を EventBridge に与える IAM サービスロールを作成または指定するには (この場合、ターゲットは CodePipeline): 
   + パイプラインの実行を開始するためのアクセス許可を EventBridge に与えるサービスロールを作成するには、[**この特定のリソースに対して新しいロールを作成する**] を選択します。
   + パイプラインの実行を開始するためのアクセス許可を EventBridge に与えるサービスロールを指定するには、[**既存のロールの使用**] を選択します。

1. (オプション) 特定のイメージ ID でソースオーバーライドを指定するには、入力トランスフォーマーを使用してデータを JSON パラメータとして渡します。入力トランスフォーマーを使用してパイプライン変数を渡すこともできます。
   + **[追加の設定]** を展開します。

     **[ターゲット入力を設定]** で、**[入力トランスフォーマーを設定]** を選択します。

     ダイアログウィンドウで、**[独自のサンプルイベントを入力]** を選択します。**[入力パス]** ボックスで、次のキーと値のペアを入力します。

     ```
     {"revisionValue": "$.detail.object.version-id"}
     ```
   + **[テンプレート]** ボックスで、次のキーと値のペアを入力します。

     ```
                                     
                                     {
         "sourceRevisions": [
             {
                 "actionName": "Source",
                 "revisionType": "S3_OBJECT_VERSION_ID",
                 "revisionValue": "<revisionValue>"
             }
         ],
          "variables": [
             {
                 "name": "Variable_Name",
                 "value": "Variable_Value"
             }
         ]
     }
     ```
   + **[確認]** を選択します。

1. [**次へ**] を選択します。

1. [**タグ**] ページで、[**次へ**] を選択します

1. [**確認と作成**] ページで、ルールの設定を確認します。ルールが適切であることを確認したら、[**Create rule**] を選択します。

# Amazon S3 ソースに対する EventBridge ルールを作成する (CLI)
<a name="create-cloudtrail-S3-source-cli"></a><a name="proc-cli-event-s3-createtrail"></a>

**AWS CloudTrail 証跡を作成し、ログ記録を有効にするには**

を使用して証跡 AWS CLI を作成するには、 **create-trail** コマンドを呼び出し、以下を指定します。
+ 証跡名。
+  AWS CloudTrailにバケットポリシーをすでに適用しているバケットです。

詳細については、[AWS 「コマンドラインインターフェイスを使用した証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail-by-using-the-aws-cli.html)」を参照してください。

1. **create-trail** コマンドを呼び出し、`--name` および `--s3-bucket-name` パラメータを含めます。

   **この変更を行う理由** これにより、S3 ソースバケットに必要な CloudTrail 証跡が作成されます。

   次のコマンドでは、`--name` および `--s3-bucket-name` を使用して、`my-trail` という名前の証跡と、`amzn-s3-demo-source-bucket` という名前のバケットを作成します。

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

1. **start-logging** コマンドを呼び出し、`--name` パラメータを含めます。

   **この変更を行う理由** これにより、ソースバケットの CloudTrail ロギングが開始され、EventBridge にイベントが送信されます。

   例:

   次のコマンドでは、`--name` を使用して、`my-trail` という名前の証跡のログ記録を開始します。

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

1. **put-event-selectors** コマンドを呼び出し、`--trail-name` および `--event-selectors` パラメータを含めます。イベントセレクタを使用してソースバケットに記録するデータイベントを指定し、それらのイベントを EventBridge ルールに送信します。

   **この変更を行う理由** このコマンドはイベントをフィルタ処理します。

   例:

   次のサンプルコマンドでは、`--trail-name` および `--event-selectors` を使用してソースバケットと `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>

**Amazon S3 をイベントソース、CodePipeline をターゲットとする EventBridge ルールを作成し、アクセス許可ポリシーを適用するには**

1. EventBridge が CodePipeline を使用してルールを呼び出すためのアクセス許可を付与します。詳細については、 デベロッパーガイドの [[Amazon EventBridge のリソースベースのポリシーを使用する](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html)] を参照してください。

   1. 次のサンプルを使用して、EventBridge にサービスロールの引き受けを許可する信頼ポリシーを作成します。このスクリプトに `trustpolicyforEB.json` という名前を付けます。

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

****  

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

------

   1. 次のコマンドを使用して、`Role-for-MyRule` ロールを作成し、信頼ポリシーをアタッチします。

      **この変更を行う理由** ロールにこの信頼ポリシーを追加すると、EventBridge に対するアクセス許可が作成されます。

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

   1. 次に示すように、`MyFirstPipeline` という名前のパイプラインに対してアクセス許可ポリシー JSON を作成します。アクセス権限ポリシーに `permissionspolicyforEB.json` と名前を付けます。

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

****  

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

------

   1. 次のコマンドを実行して、作成した `Role-for-MyRule` ロールに新しい `CodePipeline-Permissions-Policy-for-EB` アクセス権限ポリシーをアタッチします。

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

1. **put-rule** コマンドを呼び出し、`--name`、`--event-pattern`、`--role-arn` パラメータを含めます。

   次のサンプルコマンドでは、`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. CodePipeline をターゲットとして追加するには、**put-targets** コマンドを呼び出し、`--rule` および `--targets` パラメータを含めます。

   次のコマンドでは、`MyS3SourceRule` という名前のルールに対して指定し、ターゲット `Id` は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このコマンドでは、パイプラインのサンプルの `ARN` も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。

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

1. (オプション) 特定のイメージ ID のソースオーバーライドを使用して入力トランスフォーマーを設定するには、CLI コマンドで次の JSON を使用します。次の例では、以下のオーバーライドを設定します。
   + `actionName` は (この例では `Source`)、ソースイベントから派生したものではなく、パイプラインの作成時に定義された動的な値です。
   + `revisionType` は (この例では `S3_OBJECT_VERSION_ID`)、ソースイベントから派生したものではなく、パイプラインの作成時に定義された動的な値です。
   + `revisionValue` は (この例では <*revisionValue*>)、ソースイベント変数から派生しています。

   ```
   {
       "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>

**パイプラインの PollForSourceChanges パラメータを編集するには**
**重要**  
このメソッドを使用してパイプラインを作成すると、`PollForSourceChanges` パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「[`PollForSourceChanges` パラメータの有効な設定](PollForSourceChanges-defaults.md)」を参照してください

1. **get-pipeline** コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、`MyFirstPipeline` という名前のパイプラインに対して、以下のコマンドを実行します。

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

   このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

1. この例に示すように、プレーンテキストエディタで JSON ファイルを開き、`PollForSourceChanges` という名前のバケットの `amzn-s3-demo-source-bucket` パラメータを `false` に変更してソースステージを編集します。

   **この変更を行う理由** このパラメータを `false` に設定すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

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

1. **get-pipeline** コマンドを使用して取得したパイプライン構造を使用している場合、JSON ファイルから `metadata` 行を削除する必要があります。それ以外の場合は、**update-pipeline** コマンドで使用することはできません。`"metadata": { }` 行と、`"created"`、`"pipelineARN"`、`"updated"` フィールドを削除します。

   例えば、構造から以下の行を削除します。

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

   ファイルを保存します。

1. 変更を適用するには、パイプライン JSON ファイルを指定して、**update-pipeline** コマンドを実行します。
**重要**  
ファイル名の前に必ず `file://` を含めてください。このコマンドでは必須です。

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

   このコマンドは、編集したパイプラインの構造全体を返します。
**注記**  
**update-pipeline** コマンドは、パイプラインを停止します。**update-pipeline** コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには **start-pipeline-execution** コマンドを使用します。

# Amazon S3 ソースの EventBridge ルールを作成する (CloudFormation テンプレート) Amazon S3
<a name="create-cloudtrail-S3-source-cfn"></a>

 CloudFormation を使用してルールを作成するには、次に示すようにテンプレートを更新します。<a name="proc-cfn-event-s3-createrule"></a>

**Amazon S3 をイベントソース、CodePipeline をターゲットとする EventBridge ルールを作成し、アクセス許可ポリシーを適用するには**

1. テンプレートの で`Resources`、 `AWS::IAM::Role` CloudFormation リソースを使用して、イベントがパイプラインを開始できるようにする IAM ロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。
   + 最初のポリシーでは、ロールを引き受けることを許可します。
   + 2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。

   **この変更を行う理由** `AWS::IAM::Role` リソースを追加する CloudFormation と、 は EventBridge のアクセス許可を作成できます。このリソースは CloudFormation スタックに追加されます。

------
#### [ 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. `AWS::Events::Rule` CloudFormation リソースを使用して EventBridge ルールを追加します。このイベントパターンは、Amazon S3 ソースバケットでの `CopyObject`、`PutObject`、および `CompleteMultipartUpload` をモニタリングするイベントを作成します。さらに、パイプラインのターゲットも含めます。`CopyObject`、`PutObject`、または `CompleteMultipartUpload` が発生すると、このルールは、ターゲットパイプラインで `StartPipelineExecution` を呼び出します。

   **この変更を行う理由** `AWS::Events::Rule` リソースを追加すると CloudFormation 、 は イベントを作成できます。このリソースは CloudFormation スタックに追加されます。

------
#### [ 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. このスニペットを最初のテンプレートに追加して、クロススタック機能を有効にします。

------
#### [ 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. (オプション) 特定のイメージ ID のソースオーバーライドを使用して入力トランスフォーマーを設定するには、次の YAML スニペットを使用します。次の例では、以下のオーバーライドを設定します。
   + `actionName` は (この例では `Source`)、ソースイベントから派生したものではなく、パイプラインの作成時に定義された動的な値です。
   + `revisionType` は (この例では `S3_OBJECT_VERSION_ID`)、ソースイベントから派生したものではなく、パイプラインの作成時に定義された動的な値です。
   + `revisionValue` は (この例では <*revisionValue*>)、ソースイベント変数から派生しています。

   ```
   ---
   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. 更新されたテンプレートをローカルコンピュータに保存し、 CloudFormation コンソールを開きます。

1. スタックを選択し、[**既存スタックの変更セットの作成**] を選択します。

1. 更新されたテンプレートをアップロードし、 CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。

1. **[実行]** を選択してください。<a name="proc-cfn-flag-s3"></a>

**パイプラインの PollForSourceChanges パラメータを編集するには**
**重要**  
このメソッドを使用してパイプラインを作成すると、`PollForSourceChanges` パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「[`PollForSourceChanges` パラメータの有効な設定](PollForSourceChanges-defaults.md)」を参照してください
+ テンプレートで、`PollForSourceChanges` を `false` に変更します。パイプライン定義に `PollForSourceChanges` が含まれていなかった場合は、追加して `false` に設定します。

  **この変更を行う理由** `PollForSourceChanges` パラメータを `false` に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

------
#### [ 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>

**Amazon S3 パイプラインの CloudTrail リソース用に 2 番目のテンプレートを作成するには**
+ 別のテンプレートの で`Resources`、、`AWS::S3::BucketPolicy`、および `AWS::S3::Bucket``AWS::CloudTrail::Trail` CloudFormation リソースを使用して、CloudTrail のシンプルなバケット定義と証跡を提供します。

  **この変更を行う理由** CloudTrail 証跡は、アカウントあたり 5 証跡を現在の制限として、個別に作成して管理する必要があります。(「 [の制限 AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/WhatIsCloudTrail-Limits.html)」を参照してください。) ただし、1 つの証跡に複数の Amazon S3 バケットを含めることができるため、いったん証跡を作成してから、必要に応じて他のパイプライン用に Amazon S3 バケットを追加できます。2 番目のサンプルテンプレートファイルに以下のコードを貼り付けます。

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

------