

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

# CodeCommit ソースアクションと EventBridge
<a name="triggering"></a>

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

**Topics**
+ [CodeCommit ソースに対する EventBridge ルールを作成する (コンソール)](pipelines-trigger-source-repo-changes-console.md)
+ [CodeCommit ソースに対する EventBridge ルールを作成する (CLI)](pipelines-trigger-source-repo-changes-cli.md)
+ [CodeCommit ソースの EventBridge ルールを作成する (CloudFormation テンプレート)](pipelines-trigger-source-repo-changes-cfn.md)

# CodeCommit ソースに対する EventBridge ルールを作成する (コンソール)
<a name="pipelines-trigger-source-repo-changes-console"></a>

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

**CodePipeline オペレーションで使用する 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. [**サンプルイベント**] に、フィルタ処理するキーワードとして「CodeCommit」と入力します。[**CodeCommit リポジトリの状態変更**] を選択します。

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

   以下に示すイベントパターンを貼り付けます。以下は、[**Event**] ウィンドウに表示された、 `MyTestRepo` リポジトリのサンプルが`main` という名前のブランチを持った CodeCommit イベントパターンです。

   ```
   {
     "source": [
       "aws.codecommit"
     ],
     "detail-type": [
       "CodeCommit Repository State Change"
     ],
     "resources": [
       "arn:aws:codecommit:us-west-2:80398EXAMPLE:MyTestRepo"
     ],
     "detail": {
       "referenceType": [
         "branch"
       ],
       "referenceName": [
         "main"
       ]
     }
   }
   ```

1. [**ターゲット**] で、[**CodePipeline**] を選択します。

1. このルールによって開始するパイプラインの、パイプライン ARN を入力します。
**注記**  
**get-pipeline** コマンドを実行した後、メタデータ出力でパイプライン ARN を見つけることができます。パイプライン 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.image-digest"}
     ```
   + **[テンプレート]** ボックスで、次のキーと値のペアを入力します。

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

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

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

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

# CodeCommit ソースに対する EventBridge ルールを作成する (CLI)
<a name="pipelines-trigger-source-repo-changes-cli"></a>

**put-rule** コマンドを呼び出して、以下を指定します。
+ 作成中のルールを一意に識別する名前。この名前は、 AWS アカウントに関連付けられた CodePipeline で作成するすべてのパイプラインで一意である必要があります。
+ ルールで使用するソースと詳細フィールドのイベントパターン。詳細については、「[Amazon EventBridge とイベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)」を参照してください。<a name="proc-cli-event-codecommit"></a>

**CodeCommit をイベントソースとして、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` ロールを作成し、信頼ポリシーをアタッチします。

      ```
      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` アクセス権限ポリシーをアタッチします。

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

      ```
      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` パラメータを含めます。

   **この変更を行う理由** このコマンドでは、 CloudFormation でイベントを作成することができます。

   次のサンプルコマンドは、`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. CodePipeline をターゲットとして追加するには、**put-targets** コマンドを呼び出し、次のパラメータを含めます。
   + `--rule` パラメータは、**put-rule** を使用して作成した `rule_name` で使用されます。
   + `--targets` パラメータは、ターゲットリストのリスト `Id` とターゲットパイプラインの `ARN` で使用されます。

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

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

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

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "pipeline-ARN",
               "InputTransformer": {
                   "sourceRevisions": {
                       "actionName": "Source",
                       "revisionType": "COMMIT_ID",
                       "revisionValue": "<revisionValue>"
                   },
                   "variables": [
                       {
                           "name": "Branch_Name",
                           "value": "value"
                       }
                   ]
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-codecommit"></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` パラメータを `false` に変更してソースステージを編集します。

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

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

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`** コマンドを使用します。

# CodeCommit ソースの EventBridge ルールを作成する (CloudFormation テンプレート)
<a name="pipelines-trigger-source-repo-changes-cfn"></a>



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

**パイプライン CloudFormation テンプレートを更新して 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. テンプレートの で`Resources`、 `AWS::Events::Rule` CloudFormation リソースを使用して EventBridge ルールを追加します。このイベントパターンは、リポジトリへの変更のプッシュをモニタリングするイベントを作成します。EventBridge でリポジトリの状態の変更が検出されると、ルールはターゲットパイプラインで `StartPipelineExecution` を呼び出します。

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

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

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

1. 更新されたテンプレートをローカルコンピュータに保存し、 CloudFormation コンソールを開きます。

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

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

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

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

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

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

------