

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

# CodeBuild のビルド通知サンプル
<a name="sample-build-notifications"></a>

Amazon CloudWatch Events には、 のサポートが組み込まれています AWS CodeBuild。CloudWatch Events は、 AWS リソースの変更を説明するシステムイベントのストリームです。CloudWatch Events では、宣言型のルールを書き込んで、目的のイベントを自動アクションに関連付けます。このサンプルでは、Amazon CloudWatch Events と Amazon Simple Notification Service (Amazon SNS) を使用して、ビルドの成功、失敗、各ビルドフェーズへの移行、またはこれらのイベントの組み合わせを行うたびに、ビルド通知をサブスクライバーに送信します。

**重要**  
このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、CodeBuild と Amazon CloudWatch および Amazon SNS に関連する AWS リソースとアクションの料金が含まれます。詳細については、「[CodeBuild 料金表](https://aws.amazon.com/codebuild/pricing)」、「[Amazon CloudWatch 料金表](https://aws.amazon.com/cloudwatch/pricing)」および「[Amazon SNS 料金表](https://aws.amazon.com/sns/pricing)」を参照してください。

**Topics**
+ [ビルド通知サンプルを実行](#sample-build-notifications-running)
+ [ビルド通知の入力形式に関するリファレンス](sample-build-notifications-ref.md)

## ビルド通知サンプルを実行
<a name="sample-build-notifications-running"></a>

ビルド通知サンプルを実行するには、次の手順に従います。

**このサンプルを実行するには**

1. このサンプルで使用するトピックをすでに設定して Amazon SNS で購読している場合は、ステップ 4 に進みます。それ以外の場合は、 AWS ルートアカウントまたは管理者ユーザーの代わりに IAM ユーザーを使用して Amazon SNS を操作する場合は、ユーザー (またはユーザーが関連付けられている IAM グループ) に次のステートメント ({{\#\#\# BEGIN ADDING STATEMENT HERE \#\#\#}} と {{\#\#\# END ADDING STATEMENT HERE \#\#\#}} の間) を追加します。 AWS ルートアカウントの使用はお勧めしません。このステートメントにより、Amazon SNS のトピックへの通知の表示、作成、サブスクライブ、および送信テストができます。省略記号 (`...`) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号を既存のポリシーに入力しないでください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**注記**  
このポリシーを変更する IAM エンティティは、ポリシーを変更するために IAM のアクセス許可を持っている必要があります。  
詳細については、「[カスタマー管理ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console)」または、「*IAM ユーザーガイド*」の「[インラインポリシーの使用 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console)」の「グループ、ユーザー、ロールのインラインポリシーを編集または削除するには」セクションを参照してください。

1. Amazon SNS でトピックを作成または識別します。CloudWatch Events AWS CodeBuild を使用してAmazon SNSを介してこのトピックにビルド通知を送信します。

   トピックを作成するには:

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

   1. [**トピックの作成**] を選択します。

   1. [**新しいトピックの作成**] で、[**トピック名**] にトピックの名前 (**CodeBuildDemoTopic** など) を入力します。(別の名前を選択する場合は、このサンプル全体でそれを置き換えてください。) 

   1. [**トピックの作成**] を選択します。

   1. [**トピックの詳細: CodeBuildDemoTopic**] ページで、[**トピック ARN**] の値をコピーします。この値は次のステップで必要になります。

        
![トピック ARN 値。](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/topic-arn.png)

      

   詳細については、*Amazon SNS デベロッパーガイド*の「[トピックの作成](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html)」を参照してください。

1. 1 つかそれ以上の受信者にトピックをサブスクライブさせ、E メール通知を受け取ります。

   受信者にトピックをサブスクライブさせるには:

   1. 前のステップで Amazon SNS コンソールを開いた状態のまま、ナビゲーションペインで、[**Subscriptions**] (サブスクリプション) を選択してから、[**Create subscription**] (サブスクリプションの作成) を選択します。

   1. [**サブスクリプションの作成**] の [**トピック ARN**] に、前のステップからコピーしたトピック ARN を貼り付けます。

   1. [**Protocol**] で [**Email**] を選択します。

   1. [**エンドポイント**] に、受信者の完全な E メールアドレスを入力します。

        
![サブスクリプション設定。](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/create-subscription.png)

      

   1. **[Create Subscription]** (サブスクリプションの作成) を選択します。

   1. Amazon SNS は受信者にサブスクリプション確認の E メールを送信します。E メール通知の受信を開始するには、受信者は受信登録確認メールで [**Confirm subscription**] リンクを選択する必要があります。受信者がリンクをクリックした後、正常にサブスクライブされたら、Amazon SNS により受信者のウェブブラウザに確認メッセージが表示されます。

   詳細については、*Amazon SNS 開発者ガイド*の「[トピックのサブスクライブ](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html)」を参照してください。

1.  AWS ルートアカウントまたは管理者ユーザーの代わりに ユーザーを使用して CloudWatch Events を操作する場合は、ユーザー (またはユーザーが関連付けられている IAM グループ) に次のステートメント ({{\#\#\# BEGIN ADDING STATEMENT HERE \#\#\#}} と {{\#\#\# END ADDING STATEMENT HERE \#\#\#}} の間) を追加します。 AWS ルートアカウントの使用はお勧めしません。このステートメントは、CloudWatch Events の使用をユーザーに許可するために使用します。省略記号 (`...`) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号を既存のポリシーに入力しないでください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "{{arn:aws:iam::*:role/Service*}}"
           }
       ]
   }
   ```

------
**注記**  
このポリシーを変更する IAM エンティティは、ポリシーを変更するために IAM のアクセス許可を持っている必要があります。  
詳細については、「[カスタマー管理ポリシーの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console)」または、「*IAM ユーザーガイド*」の「[インラインポリシーの使用 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console)」の「グループ、ユーザー、ロールのインラインポリシーを編集または削除するには」セクションを参照してください。

1. CloudWatch Events ルールを作成します。これを行うために、CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch)) を開きます。

1. ナビゲーションペインの [**Events**] で、[**Rules**] を選択してから、[**Create rule**] を選択します。

1. [**ステップ 1: ルールの作成**] ページで、[**イベントパターン**] と [**サービス別のイベントに一致するイベントパターンの構築**] が選択済みであることを確認します。

1. [**サービス名**] で、[**CodeBuild**] を選択します。[**イベントタイプ**] で、[**すべてのイベント**] が選択済みであることを確認します。

1. [**イベントパターンのプレビュー**] には、次のコードが表示されます。

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. [**編集**] を選択し、[**イベントパターンのプレビュー**] のコードを、次の 2 つのルールパターンのいずれかに置き換えます。

   この最初のルールパターンは、 AWS CodeBuildで指定されたビルドプロジェクトのビルドが開始または完了すると、イベントをトリガーします。

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "{{my-demo-project-1}}",
         "{{my-demo-project-2}}"
       ]
     }  
   }
   ```

   前述のルールで、必要に応じて次のコードを変更します。
   + ビルドが開始または完了したときにイベントをトリガーするには、`build-status` 配列に表示されているすべての値をそのままにするか、`build-status` 配列を完全に削除します。
   + ビルドが完了したときにのみイベントをトリガーするには、`IN_PROGRESS` 配列から `build-status` を削除します。
   + ビルドの開始時にのみイベントをトリガーするには、`IN_PROGRESS` 配列から `build-status` を除くすべての値を削除します。
   + すべてのビルドプロジェクトのイベントをトリガーするには、`project-name` 配列を完全に削除します。
   + 個々のビルドプロジェクトのイベントのみをトリガーするには、`project-name` 配列に各ビルドプロジェクトの名前を指定します。

   この 2 番目のルールパターンでは、 AWS CodeBuildで指定されたビルドプロジェクトのビルドフェーズが別のビルドフェーズに移動するたびに、イベントをトリガーします。

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "{{my-demo-project-1}}",
         "{{my-demo-project-2}}"
       ]
     }  
   }
   ```

   前述のルールで、必要に応じて次のコードを変更します。
   + ビルドフェーズの変更 (各ビルドで送信される通知は最大 9 個) ごとにイベントをトリガーするには、`completed-phase` 配列に表示されているすべての値をそのままにするか、`completed-phase` 配列を完全に削除します。
   + 個々のビルドフェーズの変更に対してのみイベントをトリガーするには、イベントをトリガーしない `completed-phase` 配列の各ビルドフェーズの名前を削除します。
   + 各ビルドフェーズステータスが変更するたびにイベントをトリガーするには、`completed-phase-status` 配列に示すように、すべて値をそのままにするか、`completed-phase-status` 配列を完全に削除します。
   + 個々のビルドフェーズステータスの変更に対してのみイベントをトリガーするには、イベントをトリガーしない `completed-phase-status` 配列の各ビルドフェーズステータスの名前を削除します。
   + すべてのビルドプロジェクトのイベントをトリガーするには、`project-name` 配列を削除します。
   + 個々のビルドプロジェクトのイベントをトリガーするには、`project-name` 配列に各ビルドプロジェクトの名前を指定します。

   イベントパターンの詳細については、Amazon EventBridge ユーザーガイドの「[イベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html)」を参照してください。

   イベントパターンを用いたフィルタリングの詳細については、Amazon EventBridge ユーザーガイドの「[イベントパターンを使用したコンテンツベースのフィルタリング](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html)」を参照してください。
**注記**  
ビルド状態の変更とビルドフェーズの変更の両方に応じてイベントをトリガーする場合は、ビルド状態の変更用とビルドフェーズの変更用に 2 つの別個のルールを作成する必要があります。両方のルールを 1 つのルールに結合すると、結合したルールは予期しない結果を引き起こすか、まったく動作しなくなる可能性があります。

   コードの置換を完了したら、[**Save**] を選択します。

1. [**Targets**] で、[**Add target**] を選択します。

1. ターゲットのリストで、[**SNS トピック**] を選択します。

1. [**Topic**] で、以前に指定した、または作成したトピックを選択します。

1. [**入力の設定**] を展開して、[**インプットトランスフォーマー**] を閉じます。

1. [**Input Path**] ボックスに、次のいずれかの入力パスを入力します。

   `detail-type` の値が `CodeBuild Build State Change` であるルールの場合は、次のように入力します。

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   `detail-type` の値が `CodeBuild Build Phase Change` であるルールの場合は、次のように入力します。

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   他のタイプの情報を取得するには、「[ビルド通知の入力形式に関するリファレンス](sample-build-notifications-ref.md)」を参照してください。

1. [**入力テンプレート**] ボックスに、次のいずれかの入力テンプレートを入力します。

   `detail-type` の値が `CodeBuild Build State Change` であるルールの場合は、次のように入力します。

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   `detail-type` の値が `CodeBuild Build Phase Change` であるルールの場合は、次のように入力します。

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. [**設定の詳細**] を選択します。

1. [**ステップ 2: ルールの詳細を設定する**] ページで、名前と説明 (オプション) を入力します。[**状態**] は、[**有効**] のままとします。

1. [**Create rule**] を選択します。

1. ビルドプロジェクトを作成して、ビルドを実行し、ビルド情報を表示します。

1. CodeBuild がビルド通知を現在正常に送信していることを確認します。たとえば、ビルド通知 E メールが受信トレイにあるかどうかを確認します。

ルールの動作を変更するには、CloudWatch コンソールで変更するルールを選択し、[**アクション**]、[**編集**] の順に選択します。ルールを編集し、[**設定の詳細**]、[**ルールの更新**] の順に選択します。

ルールを使用したビルド通知の送信を停止するには、CloudWatch コンソールで、使用を停止するルールを選択し、[**アクション**]、[**無効化**] の順に選択します。

ルールを完全に削除するには、CloudWatch コンソールで、削除するルールを選択し、[**アクション**]、[**削除**] の順に選択します。