のビルド通知のサンプル CodeBuild - AWS CodeBuild

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

のビルド通知のサンプル CodeBuild

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

重要

このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、Amazon CodeBuild および Amazon SNS に関連する AWS リソースやアクションに対する CloudWatch および の料金が含まれます。詳細については、「 のCodeBuild 料金」、「Amazon CloudWatch の料金」、および「Amazon SNS の料金」を参照してください。

サンプルの実行

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

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:List*", "sns:Publish", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    注記

    このポリシーを変更する IAM エンティティは、ポリシーを変更するために IAM のアクセス許可を持っている必要があります。

    詳細については、「カスタマー管理ポリシーの編集」または、「IAM ユーザーガイド」の「インラインポリシーの使用 (コンソール)」の「グループ、ユーザー、ロールのインラインポリシーを編集または削除するには」セクションを参照してください。

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

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

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

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

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

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

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

    詳細については、Amazon SNS デベロッパーガイドの「トピックの作成」を参照してください。

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

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

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

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

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

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

    5. [Create Subscription] を選択します。

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

    詳細については、Amazon SNS 開発者ガイドの「トピックのサブスクライブ」を参照してください。

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

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    注記

    このポリシーを変更する IAM エンティティは、ポリシーを変更するために IAM のアクセス許可を持っている必要があります。

    詳細については、「カスタマー管理ポリシーの編集」または、「IAM ユーザーガイド」の「インラインポリシーの使用 (コンソール)」の「グループ、ユーザー、ロールのインラインポリシーを編集または削除するには」セクションを参照してください。

  5. CloudWatch イベントでルールを作成します。これを行うには、https://console.aws.amazon.com/cloudwatch で CloudWatch コンソールを開きます。

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

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

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

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

    { "source": [ "aws.codebuild" ] }
  10. [編集] を選択し、[イベントパターンのプレビュー] のコードを、次の 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 ユーザーガイド」の「イベントパターン」を参照してください。

    イベントパターンによるフィルタリングの詳細については、「Amazon EventBridge ユーザーガイド」の「イベントパターンによるコンテンツベースのフィルタリング」を参照してください。

    注記

    ビルド状態の変更とビルドフェーズの変更の両方に応じてイベントをトリガーする場合は、ビルド状態の変更用とビルドフェーズの変更用に 2 つの別個のルールを作成する必要があります。両方のルールを 1 つのルールに結合すると、結合したルールは予期しない結果を引き起こすか、まったく動作しなくなる可能性があります。

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

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

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

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

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

  15. [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"}

    他のタイプの情報を取得するには、「ビルド通知の入力形式に関するリファレンス」を参照してください。

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

    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>'."
  17. [設定の詳細] を選択します。

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

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

  20. ビルドプロジェクトの作成、ビルドの実行、ビルド情報の表示を行います。

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

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

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

ルールを完全に削除するには、 CloudWatch コンソールで削除するルールを選択し、アクション を選択してから、削除 を選択します。

関連リソース

ビルド通知の入力形式に関するリファレンス

CloudWatch は JSON 形式で通知を送信します。

ビルド状態変更通知は次の形式を使用します。

{ "version": "0", "id": "c030038d-8c4d-6141-9545-00ff7b7153EX", "detail-type": "CodeBuild Build State Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:28Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "build-status": "SUCCEEDED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:5.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "current-phase": "COMPLETED", "current-phase-context": "[]", "version": "1" } }

ビルドフェーズ変更通知は次の形式を使用します。

{ "version": "0", "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX", "detail-type": "CodeBuild Build Phase Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:21Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "completed-phase": "COMPLETED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "completed-phase-context": "[]", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:5.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "completed-phase-status": "SUCCEEDED", "completed-phase-duration-seconds": 4, "version": "1", "completed-phase-start": "Sep 1, 2017 4:14:21 PM", "completed-phase-end": "Sep 1, 2017 4:14:26 PM" } }