

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

# CodeBuild のクロスサービス例
<a name="cross-service-samples"></a>

これらのクロスサービスサンプルを使用して、以下を試すことができます AWS CodeBuild。

[Amazon ECR のサンプル](sample-ecr.md)  
Amazon ECR リポジトリの Docker イメージを使用して、Apache Maven を使用して単一の JAR ファイルを生成します。サンプル手順では、Docker イメージを作成して Amazon ECR にプッシュし、Go プロジェクトを作成し、プロジェクトをビルドし、プロジェクトを実行し、CodeBuild が Amazon ECR に接続できるようにアクセス許可を設定する方法を示します。

[Amazon EFS のサンプル](sample-efs.md)  
CodeBuild プロジェクトが Amazon EFS ファイルシステムをマウントしてビルドするように buildspec ファイルを設定する方法を示します。サンプル手順では、Amazon VPC を作成し、Amazon VPC でファイルシステムを作成し、Amazon VPC を使用するプロジェクトを作成してビルドし、生成されたプロジェクトファイルと変数を確認する方法について説明します。

[AWS CodePipeline サンプル](sample-codepipeline.md)  
 AWS CodePipeline を使用して、バッチビルド、複数の入力ソース、複数の出力アーティファクトを含むビルドを作成する方法を示します。このセクションには、個別のアーティファクトと、結合アーティファクトでバッチビルドを作成するパイプライン構造を示すサンプル JSON ファイルが含まれています。複数の入力ソースと複数の出力アーティファクトを含むパイプライン構造を示す追加の JSON サンプルが提供されます。

[AWS Config サンプル](how-to-integrate-config.md)  
のセットアップ方法を示します AWS Config。追跡される CodeBuild リソースを一覧表示し、CodeBuild プロジェクトを検索する方法について説明します AWS Config。サンプル手順では、 と統合するための前提条件 AWS Config、セットアップする手順 AWS Config、CodeBuild プロジェクトとデータを検索する手順を示します AWS Config。

[ビルド通知サンプル](sample-build-notifications.md)  
Apache Maven を使用して単一の JAR ファイルを生成します。Amazon SNS トピックのサブスクライバーにビルド通知を送信します。サンプル手順では、CodeBuild が Amazon SNS および CloudWatch と通信できるようにアクセス許可を設定する方法、Amazon SNS で CodeBuild トピックを作成および識別する方法、トピックに受信者をサブスクライブする方法、および CloudWatch でルールを設定する方法を示します。

# CodeBuild の Amazon ECR サンプル
<a name="sample-ecr"></a>

このサンプルでは Amazon Elastic Container Registry (Amazon ECR) イメージレポジトリの Docker イメージを使用して、サンプルの Go プロジェクトをビルドします。

**重要**  
このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、Amazon S3、、CloudWatch Logs AWS KMS、Amazon ECR に関連する AWS リソースとアクション AWS CodeBuild に対して発生する可能性のある料金が含まれます。詳細については、[CodeBuild 料金表](https://aws.amazon.com/codebuild/pricing)、[Amazon S3 料金表](https://aws.amazon.com/s3/pricing)、[AWS Key Management Service 料金表](https://aws.amazon.com/kms/pricing)、[Amazon CloudWatch 料金表](https://aws.amazon.com/cloudwatch/pricing)、[Amazon Elastic Container Registry 料金表](https://aws.amazon.com/ecr/pricing)を参照してください。

**Topics**
+ [Amazon ECR サンプルを実行](#sample-ecr-running)

## Amazon ECR サンプルを実行
<a name="sample-ecr-running"></a>

CodeBuild の Amazon ECR サンプルを実行するには、以下の手順に従います。

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

1. Amazon ECR で Docker イメージを作成してイメージリポジトリにプッシュするには、「['Docker イメージを Amazon ECR に公開' サンプル](sample-docker.md)」の「['Docker イメージを Amazon ECR に公開' サンプルを実行](sample-docker.md#sample-docker-running)」セクションにある手順を完了します。

1. Go プロジェクトの作成: 

   1. このトピックの [Go プロジェクトの構造](#ecr-sample-go-project-file-structure)および [Go プロジェクトのファイル](#sample-ecr-go-project-files)セクションで説明されているようにファイルを作成し、S3 入力バケットまたは AWS CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。
**重要**  
`(root directory name)` をアップロードしないでください。アップロードするのは、`(root directory name)` 内のファイルのみです。  
S3 入力バケットを使用している場合は、ファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。`(root directory name)` を ZIP ファイルに追加しないでください。追加するのは、`(root directory name)` 内のファイルのみです。

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

      を使用してビルドプロジェクト AWS CLI を作成する場合、`create-project`コマンドへの JSON 形式の入力は次のようになります。(プレースホルダは独自の値に置き換えてください。)

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. ビルド出力アーティファクトを取得するには、S3 出力バケットを開きます。

   1. `GoOutputArtifact.zip` ファイルをローカルコンピュータまたはインスタンスへダウンロードし、ファイルの内容を抽出します。展開したコンテンツから、`hello` ファイルを取得します。

1.  次のいずれかに該当する場合、 が Docker イメージをビルド環境に AWS CodeBuild プルできるように、Amazon ECR のイメージリポジトリにアクセス許可を追加する必要があります。
   +  プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルしている場合。これは、`CODEBUILD` の `imagePullCredentialsType` 属性で `ProjectEnvironment` の値で示されます。
   +  プロジェクトでクロスアカウントの Amazon ECR イメージを使用している場合。この場合は、プロジェクトでサービスロールを使用して Amazon ECR イメージをプルする必要があります。この動作を有効にするには、`imagePullCredentialsType` の `ProjectEnvironment` 属性を `SERVICE_ROLE` に設定します。

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

   1. リポジトリ名のリストで、作成または選択したリポジトリの名前を選択します。

   1. ナビゲーションペインで、[**アクセス許可**]、[**編集**]、[**ステートメントを追加**] の順に選択します。

   1. [**ステートメント名**] で、識別子 (**CodeBuildAccess** など) を入力します。

   1. [**効果**] で、[**許可**] を選択したままにしておきます。これにより、別の AWS アカウントへのアクセスを許可します。

   1. [**プリンシパル**] で、次のいずれかを実行します。
      + プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合は、[**サービスプリンシパル**] に「**codebuild.amazonaws.com**」と入力します。
      + プロジェクトでクロスアカウントの Amazon ECR イメージを使用する場合は、[**AWS アカウント ID**] に、アクセス権を付与する AWS アカウントの ID を入力します。

   1. [**すべての IAM エンティティ**] リストをスキップします。

   1. [**アクション**] で、プル専用アクションとして [**ecr:GetDownloadUrlForLayer**]、[**ecr:BatchGetImage**]、および [**ecr:BatchCheckLayerAvailability**] を選択します。

   1. [**条件**] で、以下を追加します。

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. **[保存]** を選択します。

      このポリシーは [**アクセス許可**] に表示されます。プリンシパルは、この手順のステップ 3 で [**プリンシパル**] に入力した値です。
      + プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合は、**[Service principals]** (サービスプリンシパル) に「`"codebuild.amazonaws.com"`」と入力します。
      + プロジェクトでクロスアカウント Amazon ECR イメージを使用している場合、アクセスを許可する AWS アカウントの ID が**AWS アカウント IDs**の下に表示されます。

        次のサンプルポリシーでは、CodeBuild 認証情報とクロスアカウント Amazon ECR イメージの両方を使用します。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + プロジェクトで CodeBuild 認証情報を使用し、CodeBuild プロジェクトに Amazon ECR リポジトリへのオープンアクセスを許可する場合は、`Condition` キーを省略し、次のサンプルポリシーを追加できます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

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

   を使用してビルドプロジェクト AWS CLI を作成する場合、`create-project`コマンドへの JSON 形式の入力は次のようになります。(プレースホルダは独自の値に置き換えてください。)

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. ビルド出力アーティファクトを取得するには、S3 出力バケットを開きます。

1. `GoOutputArtifact.zip` ファイルをローカルコンピュータまたはインスタンスへダウンロードし、`GoOutputArtifact.zip` ファイルの内容を抽出します。展開したコンテンツから、`hello` ファイルを取得します。

### Go プロジェクトの構造
<a name="ecr-sample-go-project-file-structure"></a>

このサンプルのディレクトリ構造は次のとおりとします。

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Go プロジェクトのファイル
<a name="sample-ecr-go-project-files"></a>

このサンプルで使用するファイルは以下のとおりです。

`buildspec.yml` ( 内)`(root directory name)`

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` ( 内)`(root directory name)`

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```

# の Amazon Elastic File System サンプル AWS CodeBuild
<a name="sample-efs"></a>

 Amazon EC2 インスタンス用のスケーラブルな共有ファイルサービスである Amazon Amazon Elastic File Systemで AWS CodeBuild ビルドを作成することもできます。Amazon EFS のストレージ容量は伸縮自在なため、ファイルの追加および削除に合わせて拡大または縮小されます。また、ファイルシステムを作成、設定するために使用できるシンプルなウェブサービスインターフェイスを提供します。さらに、ファイルストレージインフラストラクチャも自動的に管理されるため、ファイルシステム設定のデプロイ、パッチ適用、保守について心配する必要がありません。詳細については、*Amazon Elastic File System ユーザーガイド*の「[Amazon Elastic File System とは](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)」を参照してください。

 このサンプルでは、Java アプリケーションが Amazon EFS ファイルシステムにマウントされて構築されるように CodeBuild プロジェクトを設定する方法を示します。開始する前に、S3 入力バケット、、GitHub、GitHub Enterprise Server AWS CodeCommit、または Bitbucket リポジトリにアップロードされる Java アプリケーションを構築できる状態になっている必要があります。

ファイルシステムの転送中のデータは暗号化されます。別のイメージを使用して転送中のデータを暗号化するには、「[転送中のデータの暗号化](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)」を参照してください。

**Topics**
+ [Amazon Elastic File System AWS CodeBuild で を使用する](#sample-efs-high-level-steps)
+ [Amazon EFS 統合のトラブルシューティング](sample-efs-troubleshooting.md)

## Amazon Elastic File System AWS CodeBuild で を使用する
<a name="sample-efs-high-level-steps"></a>

このサンプルでは、 で Amazon EFS を使用するために必要な 4 つの大まかなステップについて説明します AWS CodeBuild。具体的には次の 2 つです。

1.  AWS アカウントに Virtual Private Cloud (VPC) を作成します。

1. この VPC を使用するファイルシステムを作成します。

1. VPC を使用する CodeBuild プロジェクトを作成および構築します。CodeBuild プロジェクトでは、以下を使用してファイルシステムが識別されます。
   +  一意のファイルシステム識別子。ビルドプロジェクトでファイルシステムを指定するときに識別子を選択します。
   + ファイルシステム ID。ID は、Amazon EFS コンソールでファイルシステムを開くと表示されます。
   +  マウントポイント。ファイルシステムをマウントする Docker コンテナ内のディレクトリです。
   + マウントオプション。ファイルシステムのマウント方法に関する詳細が含まれます。

1. ビルドプロジェクトを確認して、正しいプロジェクトファイルと変数が生成されていることを確認します。

**注記**  
 Amazon EFS で作成されたファイルシステムは Linux プラットフォームでのみサポートされます。

 

**Topics**
+ [ステップ 1: を使用して VPC を作成する CloudFormation](#sample-efs-create-vpc)
+ [ステップ 2: VPC を使用した Amazon Elastic File System ファイルシステムを作成](#sample-efs-create-efs)
+ [ステップ 3: Amazon EFS で使用する CodeBuild プロジェクトを作成](#sample-efs-create-acb)
+ [ステップ 4: ビルドプロジェクトを確認](#sample-efs-summary)

### ステップ 1: を使用して VPC を作成する CloudFormation
<a name="sample-efs-create-vpc"></a>

 CloudFormation テンプレートを使用して VPC を作成します。

1.  「」の手順に従って[CloudFormation VPC テンプレート](cloudformation-vpc-template.md)、 CloudFormation を使用して VPC を作成します。
**注記**  
 この CloudFormation テンプレートによって作成された VPC には、2 つのプライベートサブネットと 2 つのパブリックサブネットがあります。プライベートサブネットを使用するのは、Amazon EFS で作成したファイルシステムを、 AWS CodeBuild でマウントする場合のみです。いずれかのパブリックサブネットを使用する場合、ビルドに失敗します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

1.  で作成した VPC を選択します CloudFormation。

1. [**説明**] タブに表示される VPC の名前と ID を書き留めます。どちらも、このサンプルの後半で AWS CodeBuild プロジェクトを作成するときに必要になります。

### ステップ 2: VPC を使用した Amazon Elastic File System ファイルシステムを作成
<a name="sample-efs-create-efs"></a>

 先ほど作成した VPC を使用して、このサンプルのシンプルな Amazon EFS ファイルシステムを作成します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/) で Amazon EFS コンソールを開きます。

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

1.  [**VPC**] で、このサンプルの前のステップで書き留めた VPC 名を選択します。

1.  サブネットに関連付けられているアベイラビリティーゾーンの選択したままにしておきます。

1.  [**Next Step**] (次のステップ) をクリックします。

1.  [**Add tags**] (タグの追加) のデフォルトの [**Name**] (名前) キーにある [**Value**] (値) に、Amazon EFS ファイルシステムの名前を入力します。

1.  デフォルトのパフォーマンスモードおよびスループットモードとして [**General Purpose （汎用）**] および [**Bursting （バースト）**] を選択したまま [**Next Step （次のステップ）**] を選択します。

1. [**Configure client access (クライアントアクセスの設定)**] で、[**Next Step (次のステップ)**] を選択します。

1.  [**Create File System (ファイルシステムの作成)**] を選択します。

1.  (オプション) 転送時のデータ暗号化を適用するポリシーを、Amazon EFS ファイルシステムに追加することをお勧めします。Amazon EFS コンソールで、[**ファイルシステムポリシー**]、[**編集**]、[**すべてのクライアントに転送中の暗号化を適用する**] ボックス、[**保存**] の順に選択します。

### ステップ 3: Amazon EFS で使用する CodeBuild プロジェクトを作成
<a name="sample-efs-create-acb"></a>

 このサンプルで前に作成した VPC を使用する AWS CodeBuild プロジェクトを作成します。ビルドを実行すると、先ほど作成した Amazon EFS ファイルシステムがマウントされます。次に、Java アプリケーションによって作成された .jar ファイルがファイルシステムのマウントポイントディレクトリに保存されます。

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) で AWS CodeBuild コンソールを開きます。

1.  ナビゲーションペインで [**ビルドプロジェクト**] を選択し、次に [**ビルドプロジェクトの作成**] を選択します。

1.  [**Project name (プロジェクト名)**] にプロジェクトの名前を入力します。

1.  [**ソースプロバイダー**] で、構築する Java アプリケーションが含まれているリポジトリを選択します。

1.  CodeBuild がアプリケーションを見つけるために使用するリポジトリ URL などの情報を入力します。オプションはソースプロバイダーごとに異なります。詳細については、「[Choose source provider](create-project.md#create-project-source-provider)」を参照してください。

1.  [**環境イメージ**] で、[**Managed image (マネージド型イメージ)**] を選択します。

1.  [**オペレーティングシステム**] で、[**Amazon Linux 2**] を選択します。

1. [**ランタイム**] で、[**Standard (標準)**] を選択します。

1.  [**イメージ**] で、[**aws/codebuild/amazonlinux-x86\$164-standard:4.0**] を選択します。

1.  [**環境タイプ**] で、[**Linux**] を選択します。

1.  [**Service role (サービスロール)**] で、[**New service role (新しいサービスロール)**] を選択します。[**Role name**] (ロール名) に、CodeBuild により作成されたロールの名前を入力します。

1. [**Additional configuration (追加設定)**] を展開します。

1.  [**Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Docker イメージを構築する場合、またはビルドで昇格された権限を取得する場合は、このフラグを有効にする)**] を選択します。
**注記**  
デフォルトでは、Docker デーモンは非 VPC ビルドで有効になっています。VPC ビルドに Docker コンテナを使用する場合は、Docker Docs ウェブサイトの「[Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)」を参照して、特権モードを有効にします。また、Windows は特権モードをサポートしていません。

1.  [**VPC (VPC)**] で、VPC ID を選択します。

1.  [**サブネット**] で、VPC に関連付けられているプライベートサブネットのうち 1 つ以上を選択します。Amazon EFS ファイルシステムをマウントするビルドでプライベートサブネットを使用する必要があります。パブリックサブネットを使用している場合、ビルドに失敗します。

1.  [**Security groups (セキュリティグループ)**] で、デフォルトのセキュリティグループを選択します。

1.  [**ファイルシステム**] で、以下の情報を入力します。
   + [**識別子**] に、一意のファイルシステム識別子を入力します。識別子の長さは 129 文字未満である必要があります。英数字とアンダースコアのみを使用できます。一意のファイルシステム識別子。CodeBuild によって使用されて、伸縮自在なファイルシステムを識別する環境変数が作成されます。環境変数の形式は大文字の `CODEBUILD_<file_system_identifier>` です。たとえば、`my_efs` と入力すると、環境変数は `CODEBUILD_MY_EFS` になります。
   + [**ID**] で、ファイルシステム ID を選択します。
   + (オプション) ファイルシステムのディレクトリを入力します。CodeBuild はこのディレクトリをマウントします。[**ディレクトリパス**] を空白のままにすると、CodeBuild はファイルシステム全体をマウントします。パスはファイルシステムのルートからの相対です。
   + [**マウントポイント**] に、ファイルシステムをマウントするディレクトリの絶対パスを入力します。このディレクトリが存在しない場合は、CodeBuild によってビルド中に作成されます。
   + (オプション) マウントオプションを入力します。[**マウントオプション**] を空白のままにすると、CodeBuild はデフォルトのマウントオプションを使用します。

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     詳細については、*Amazon Elastic File System ユーザーガイド*の「[NFS の推奨されるマウントオプション](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html)」を参照してください。

1.  [**ビルド仕様**] で、[**ビルドコマンドの挿入**]、[**Switch to editor (エディタに切り替え)**] の順に選択します。

1.  エディタに次のビルド仕様コマンドを入力します。`<file_system_identifier>` をステップ 17 で入力した識別子に置き換えます。大文字を使用します (`CODEBUILD_MY_EFS` など)。

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  他のすべての設定にはデフォルト値を使用し、[**Create build project (ビルドプロジェクトの作成)**] を選択します。ビルドが完了すると、プロジェクトのコンソールページが表示されます。

1.  [**Start build**] を選択します。

### ステップ 4: ビルドプロジェクトを確認
<a name="sample-efs-summary"></a>



 AWS CodeBuild プロジェクトの構築後: 
+  Java アプリケーションによって作成された .jar ファイルがあります。このファイルは Amazon EFS ファイルシステムのマウントポイントディレクトリにビルドされています。
+  ファイルシステムを識別する環境変数は、プロジェクトの作成時に入力したファイルシステム識別子を使用して作成されます。

 詳細については、*Amazon Elastic File System ユーザーガイド*の「[ファイルシステムのマウント](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)」を参照してください。

# Amazon EFS 統合のトラブルシューティング
<a name="sample-efs-troubleshooting"></a>

CodeBuild で Amazon EFS を設定するときに発生する可能性のあるエラーは次のとおりです。

**Topics**
+ [CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. permission denied (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。パーミッションが拒否されました)](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. connection reset by peer (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。ピアによって接続がリセットされました)](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: Unexpected EC2 error: UnauthorizedOperation (VPC\$1CLIENT\$1ERROR: 予期せぬEC2エラー UnauthorizedOperation)](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. permission denied (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。パーミッションが拒否されました)
<a name="sample-efs-troubleshooting.permission-denied"></a>

IAM 認可は、CodeBuild を使用した Amazon EFS のマウントではサポートされていません。カスタム Amazon EFS ファイルシステムポリシーを使用している場合は、すべての IAM プリンシパルへの読み取りおよび書き込みアクセスを許可する必要があります。例: 

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. connection reset by peer (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。ピアによって接続がリセットされました)
<a name="sample-efs-troubleshooting.connection-reset"></a>

この問題の原因は 2 つ考えられます。
+ CodeBuild VPC サブネットが、Amazon EFS マウントターゲットとは異なるアベイラビリティーゾーンにあります。Amazon EFS マウントターゲットと同じアベイラビリティーゾーンに VPC サブネットを追加することで、この問題を解決できます。
+ セキュリティグループには、Amazon EFS と通信する許可がありません。これを解決するには、VPC（VPC のプライマリ CIDR ブロックを追加する）またはセキュリティグループ自体からのすべてのトラフィックを許可するインバウンドルールを追加します。

## VPC\$1CLIENT\$1ERROR: Unexpected EC2 error: UnauthorizedOperation (VPC\$1CLIENT\$1ERROR: 予期せぬEC2エラー UnauthorizedOperation)
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

このエラーは、CodeBuild プロジェクトの VPC 設定内のすべてのサブネットがパブリックサブネットである場合に発生します。ネットワーク接続を確保するには、VPC 内に少なくとも 1 つのプライベートサブネットが必要です。

# AWS CodePipeline CodeBuild のサンプル
<a name="sample-codepipeline"></a>

このセクションでは、CodePipeline と CodeBuild 間のサンプル統合について説明します。


| サンプル | 説明 | 
| --- | --- | 
|  [CodePipeline/CodeBuild 統合とバッチビルドのサンプル](#sample-pipeline-batch)  |  これらのサンプルは、 AWS CodePipeline を使用してバッチビルドを使用するビルドプロジェクトを作成する方法を示しています。  | 
|  [複数の入力ソースおよび出力アーティファクトを持つ CodePipeline/CodeBuild の統合のサンプル](#sample-pipeline-multi-input-output)  |  このサンプルでは、 AWS CodePipeline を使用して、複数の入力ソースを使用して複数の出力アーティファクトを作成するビルドプロジェクトを作成する方法を示します。  | 

## CodePipeline/CodeBuild 統合とバッチビルドのサンプル
<a name="sample-pipeline-batch"></a>

AWS CodeBuild はバッチビルドをサポートしています。次のサンプルは、 AWS CodePipeline を使用してバッチビルドを使用するビルドプロジェクトを作成する方法を示しています。

パイプラインの構造を定義する JSON 形式のファイルを使用し、それを で使用 AWS CLI してパイプラインを作成できます。詳細については、『*AWS CodePipeline ユーザーガイド*』の「[AWS CodePipeline パイプライン構造のリファレンス](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html)」を参照してください。

### 個々のアーティファクトを使用した Batch 構築
<a name="sample-pipeline-batch.separate-artifacts"></a>

個別のアーティファクトを含むバッチビルドを作成するパイプライン構造の例として、次の JSON ファイルを使用してください。CodePipeline でバッチビルドを有効にするには、「`BatchEnabled`」パラメータのパラメータ「`configuration`」オブジェクトを「`true`」に設定します。

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

次の例は、このパイプライン設定で動作する CodeBuild buildspec ビルドファイルです。

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

パイプラインの JSON ファイルで指定されている出力成果物の名前は、buildspec ファイルで定義されているビルドおよびアーティファクトの識別子と一致していなければなりません。構文は、プライマリアーティファクトの場合は *buildIdentifier* で、セカンダリアーティファクトの場合は *buildIdentifier*\$1*artifactIdentifier* です。

たとえば、出力アーティファクト名 `build1` の場合、CodeBuild は `build1` の場所に「`build1`」を出力します。出力名は「`build1_artifact1`」であり、CodeBuild はセカンダリアーティファクトを `artifact1` の `build1`、`build1_artifact1` の場所にアップロードします。出力場所が 1 つだけ指定されている場合、名前は *buildIdentifier* のみにします。

JSON ファイルを作成したら、パイプラインを作成することができます。を使用して **create-pipeline** コマンド AWS CLI を実行し、 ファイルを `--cli-input-json`パラメータに渡します。詳細については、『*AWS CodePipeline ユーザーガイド*』の「[パイプラインの作成 (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli)」を参照してください。

### 複合アーチファクトを使用したBatch ビルド
<a name="sample-pipeline-batch.combined-artifacts"></a>

結合アーティファクトを含むバッチビルドを作成するパイプライン構造の例として、次の JSON ファイルを使用してください。CodePipeline でバッチビルドを有効にするには、「`BatchEnabled`」パラメータのパラメータ「`configuration`」オブジェクトを「`true`」に設定します。ビルド成果物を同じ場所に結合するには、「`CombineArtifacts`」オブジェクトの「`configuration`」パラメータのパラメータを「`true`」に設置します。

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

次の例は、このパイプライン設定で動作する CodeBuild buildspec ビルドファイルです。

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

結合アーチファクトがバッチ構築で有効になっている場合、出力は 1 つだけです。CodeBuild は、すべてのビルドの主要なアーティファクトを 1 つのZIPファイルに結合します。

JSON ファイルを作成したら、パイプラインを作成することができます。を使用して **create-pipeline** コマンド AWS CLI を実行し、 ファイルを `--cli-input-json`パラメータに渡します。詳細については、『*AWS CodePipeline ユーザーガイド*』の「[パイプラインの作成 (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli)」を参照してください。

## 複数の入力ソースおよび出力アーティファクトを持つ CodePipeline/CodeBuild の統合のサンプル
<a name="sample-pipeline-multi-input-output"></a>

 AWS CodeBuild プロジェクトは複数の入力ソースを取ることができます。また、複数の出力アーティファクトを作成することもできます。このサンプルでは、 AWS CodePipeline を使用して、複数の入力ソースを使用して複数の出力アーティファクトを作成するビルドプロジェクトを作成する方法を示します。詳細については、「[複数の入力ソースと出力アーティファクトのサンプル](sample-multi-in-out.md)」を参照してください。

パイプラインの構造を定義する JSON 形式のファイルを使用し、それを で使用 AWS CLI してパイプラインを作成できます。複数の入力ソースと複数の出力アーティファクトを含むビルドを作成するパイプライン構造の例として、次の JSON ファイルを使用してください。このサンプルの後半では、このファイルが複数の入力と出力をどのように指定しているかが分かります。詳細については、『*AWS CodePipeline ユーザーガイド*』の「[CodePipeline パイプライン構造リファレンス](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html)」を参照してください。

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 この JSON ファイルの制約事項: 
+ 入力ソースの 1 つを `PrimarySource`に指定する必要があります。このソースは、CodeBuild が buildspec ファイルを探して実行するディレクトリです。キーワード `PrimarySource` は、JSON ファイルの CodeBuild ステージの`configuration` セクションにプライマリソースを指定するのに使用されます。
+ 各入力ソースは、それぞれのディレクトリにインストールされます。このディレクトリは、組み込み環境変数 `$CODEBUILD_SRC_DIR` (プライマリソースの場合) と `$CODEBUILD_SRC_DIR_yourInputArtifactName` (他のすべてのソースの場合) に保存されます。このサンプルのパイプラインでは、2 つの入力ソースディレクトリは `$CODEBUILD_SRC_DIR` と `$CODEBUILD_SRC_DIR_source2` です。詳細については、「[ビルド環境の環境変数](build-env-ref-env-vars.md)」を参照してください。
+ パイプラインの JSON ファイルで指定されている出力成果物の名前は、buildspec ファイルで定義されているセカンダリアーティファクトの名前と一致していなければなりません。このパイプラインは、次の buildspec ファイルを使用します。詳細については、「[buildspec の構文](build-spec-ref.md#build-spec-ref-syntax)」を参照してください。

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 JSON ファイルを作成したら、パイプラインを作成することができます。を使用して **create-pipeline** コマンド AWS CLI を実行し、 ファイルを `--cli-input-json`パラメータに渡します。詳細については、『*AWS CodePipeline ユーザーガイド*』の「[パイプラインの作成 (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli)」を参照してください。

# AWS Config CodeBuild を使用した サンプル
<a name="how-to-integrate-config"></a>

AWS Config は、 AWS リソースのインベントリと、これらのリソースの設定変更の履歴を提供します。 は AWS リソース AWS CodeBuild として をサポートする AWS Config ようになりました。つまり、サービスは CodeBuild プロジェクトを追跡できます。詳細については AWS Config、「 *AWS Config デベロッパーガイド*」の[「What is AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)」を参照してください。

CodeBuild リソースに関する以下の情報は、 AWS Config コンソールの**リソースインベントリ**ページで確認できます。
+ CodeBuild 設定変更のタイムライン。
+ 各 CodeBuild プロジェクトの設定詳細。
+ 他の AWS リソースとの関係。
+ CodeBuild プロジェクトの変更のリスト。

**Topics**
+ [で CodeBuild を使用する AWS Config](#how-to-integrate-config-run)
+ [ステップ 3: AWS Config コンソールで AWS CodeBuild データを表示する](#viewing-config-details)

## で CodeBuild を使用する AWS Config
<a name="how-to-integrate-config-run"></a>

このトピックの手順では、CodeBuild プロジェクトを設定 AWS Config および検索する方法を示します。

**Topics**
+ [前提条件](#how-to-create-a-build-project)
+ [ステップ 1: をセットアップする AWS Config](#setup-config)
+ [ステップ 2: AWS CodeBuild プロジェクトを検索する](#lookup-projects)

### 前提条件
<a name="how-to-create-a-build-project"></a>

 AWS CodeBuild プロジェクトを作成します。手順については、「[ビルドプロジェクトの作成](create-project.md)」を参照してください。

### ステップ 1: をセットアップする AWS Config
<a name="setup-config"></a>
+ [AWS Config のセットアップ (コンソール)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [AWS Config をセットアップする (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**注記**  
セットアップが完了すると、 AWS Config コンソールに AWS CodeBuild プロジェクトが表示されるまでに最大 10 分かかる場合があります。

### ステップ 2: AWS CodeBuild プロジェクトを検索する
<a name="lookup-projects"></a>

1.  AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/config](https://console.aws.amazon.com/config) で AWS Config コンソールを開きます。

1. **[リソースインベントリ]** ページで、**[リソースタイプ]** の **[AWS CodeBuild プロジェクト]** を選択します。下方にスクロールして [**CodeBuild プロジェクト**] チェックボックスをオンにします。

1. [**検索**] を選択します。

1. CodeBuild プロジェクトのリストが追加されたら、**[Configのタイムライン] **列で CodeBuild プロジェクト名のリンクを選択します。

## ステップ 3: AWS Config コンソールで AWS CodeBuild データを表示する
<a name="viewing-config-details"></a>

リソース**インベントリページでリソース**を検索するときに、タイムラインを選択して CodeBuild プロジェクトの詳細 AWS Config を表示できます。リソースの詳細ページは、リソースの設定、関係、および変更回数の情報を提供します。

ページの上部にあるブロックは、まとめてタイムラインと呼ばれます。タイムラインは、記録を取った日付と時刻を示します。

詳細については、「 *AWS Config デベロッパーガイド*[」の AWS Config 「コンソールでの設定の詳細の表示](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html)」を参照してください。

# 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 グループ) に次のステートメント (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* と *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* の間) を追加します。 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 グループ) に次のステートメント (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* と *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* の間) を追加します。 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 コンソールで、削除するルールを選択し、[**アクション**]、[**削除**] の順に選択します。

# ビルド通知の入力形式に関するリファレンス
<a name="sample-build-notifications-ref"></a>

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