

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

# CodeBuild のユースケースベースのサンプル
<a name="use-case-based-samples"></a>

AWS CodeBuild を試用するために、これらのユースケースベースのサンプルを使用できます。

[クロスサービス例](cross-service-samples.md)  
AWS CodeBuild を試すための、クロスサービスサンプルのリスト。

[ビルドバッジサンプル](sample-build-badges.md)  
ビルドバッジを使用して CodeBuild を設定する方法を示します。

[テストレポートサンプル](sample-test-report-cli.md)  
AWS CLI を使用して、テストレポートの作成、実行、および結果の表示を行います。

[CodeBuild の Docker サンプル](sample-docker-section.md)  
カスタム Docker イメージの使用、Amazon ECR のリポジトリへの Docker イメージの公開、プライベートレジストリでの Docker イメージの使用方法について説明します。

[S3 バケットでのビルド出力のホスティング ](sample-disable-artifact-encryption.md)  
暗号化されていないビルドアーティファクトを使用して S3 バケットに静的なウェブサイトを作成する方法を示します。

[ 複数の入出力のサンプル ](sample-multi-in-out.md)  
ビルドプロジェクトで複数の入力ソースと複数の出力アーティファクトを使用する方法を示します。

[ 並列テスト実行のサンプル ](sample-parallel-test.md)  
`codebuild-tests-run` CLI コマンドを使用して、並列実行環境間にテストを分割して実行する方法を示します。

[ buildspec ファイルサンプルのランタイムバージョン ](sample-runtime-versions.md)  
buildspec ファイルでランタイムとバージョンを指定する方法を示します。

[ソースバージョンのサンプル](sample-source-version.md)  
ソースの特定のバージョンを CodeBuild ビルドプロジェクトで使用する方法を示します。

[CodeBuild のサードパーティーソースリポジトリのサンプル](sample-third-party-source.md)  
CodeBuild を使用して、ウェブフックで BitBucket、GitHub Enterprise Server、GitHub プルリクエストを作成する方法について説明します。

[セマンティックバージョニングを使用してビルド時にアーティファクト名を設定](sample-buildspec-artifact-naming.md)  
セマンティックバージョニングを使用して、ビルド時にアーティファクト名を作成する方法を示します。

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

# CodeBuild でのビルドバッジサンプル
<a name="sample-build-badges"></a>

AWS CodeBuild はビルドバッジの使用をサポートするようになりました。ビルドバッジは、プロジェクトの最新のビルドのステータスを表示する埋め込み可能な動的に生成されたイメージ (*バッジ*) を提供します。このイメージにアクセスするには、CodeBuild プロジェクトに対して生成されるパブリックアクセス可能な URL を使用できます。そのため、誰でも CodeBuild プロジェクトのステータスを確認できます。ビルドバッジにはセキュリティ情報が含まれないため、認証は不要です。

**Topics**
+ [ビルドバッジを使用してビルドプロジェクトを作成](#sample-build-badges-request-running)
+ [AWS CodeBuild ビルドバッジにアクセスする](access-badges.md)
+ [CodeBuild ビルドバッジの公開](publish-badges.md)
+ [CodeBuild バッジのステータス](badge-statuses.md)

## ビルドバッジを使用してビルドプロジェクトを作成
<a name="sample-build-badges-request-running"></a>

ビルドバッジを有効にしてビルドプロジェクトを作成するには、次のいずれかの手順を実行します。 AWS CLI または を使用できます AWS マネジメントコンソール。

**ビルドバッジを有効にしてビルドプロジェクトを作成するには (AWS CLI)**
+ ビルドプロジェクトの作成の詳細については、「[ビルドプロジェクトの作成 (AWS CLI)](create-project.md#create-project-cli)」を参照してください。ビルドバッジを AWS CodeBuild プロジェクトに含めるには、*badgeEnabled* を `true` の値で指定する必要があります。

**ビルドバッジを有効にしてビルドプロジェクトを作成するには (コンソール)**

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

1.  CodeBuild の情報ページが表示された場合、**ビルドプロジェクトを作成する**を選択します。それ以外の場合は、ナビゲーションペインで**ビルド**を展開し、**[ビルドプロジェクト] **を選択し、次に **[Create build project (ビルドプロジェクトの作成)] **を選択します。

1. [**プロジェクト名**] に、このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、 AWS アカウントごとに一意である必要があります。また、他のユーザーがこのプロジェクトの使用目的を理解できるように、ビルドプロジェクトの説明を任意で指定することもできます。

1. [**ソース**] の [**ソースプロバイダ**] で、ソースコードプロバイダタイプを選択し、次のいずれかの操作を行います。
**注記**  
 CodeBuild は、Amazon S3 ソースプロバイダーでのビルドバッジをサポートしていません。はアーティファクト転送に Amazon S3 AWS CodePipeline を使用するため、CodePipeline で作成されたパイプラインの一部であるビルドプロジェクトではビルドバッジはサポートされていません。
   + [**CodeCommit**] を選択した場合は、[**リポジトリ**] で、リポジトリの名前を選択します。[**Enable build badge (ビルドバッジを有効にする)**] を選択すると、プロジェクトのビルドステータスが表示可能および埋め込み可能になります。
   + [**GitHub**] を選択した場合は、手順に従って GitHub に接続 (または再接続) します。GitHub **のアプリケーションの承認**ページで、**組織アクセス**で、アクセス AWS CodeBuild を許可する各リポジトリの横にあるアクセスの**リクエスト**を選択します。[**Authorize application (アプリケーションの承認)**] を選択した後で AWS CodeBuild コンソールに戻り、[**リポジトリ**] でソースコードが含まれているリポジトリの名前を選択します。[**Enable build badge (ビルドバッジを有効にする)**] を選択すると、プロジェクトのビルドステータスが表示可能および埋め込み可能になります。
   + [**Bitbucket**] を選択した場合は、手順に従って Bitbucket に接続 (または再接続) します。Bitbucket の [**Confirm access to your account**] ページで、[**Organization access**] の [**Grant access**] を選択します。**アクセス許可**を選択したら、 AWS CodeBuild コンソールに戻り、**リポジトリ**で、ソースコードを含むリポジトリの名前を選択します。[**Enable build badge (ビルドバッジを有効にする)**] を選択すると、プロジェクトのビルドステータスが表示可能および埋め込み可能になります。
**重要**  
プロジェクトソースを更新すると、プロジェクトのビルドバッジの正確性に影響する場合があります。

1. [**環境**] で以下の操作を行います。

   [**Environment image (環境イメージ)**] で、次のいずれかの操作を行います。
   + によって管理される Docker イメージを使用するには AWS CodeBuild、**マネージドイメージ**を選択し、**オペレーティングシステム**、**ランタイム (複数可)**、**イメージ**、**イメージバージョン**から選択します。利用可能な場合は、[**環境タイプ**] から選択します。
   + 別の Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Other registry (その他のレジストリ)**] を選択した場合は、[**External registry URL (外部のレジストリ URL)**] に `docker repository/docker image name` の形式に従って Docker Hub の Docker イメージの名前とタグを入力します。**Amazon ECR** を選択した場合は、**Amazon ECR リポジトリ**と **Amazon ECR イメージ**を使用して、 AWS アカウントの Docker イメージを選択します。
   + プライベート Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Image registry (イメージレジストリ)**] に [**Other registry (その他のレジストリ)**] を選択して、その後プライベート Docker イメージの認証情報の ARN を入力します。認証情報は、Secrets Manager で作成する必要があります。詳細については、*AWS Secrets Manager ユーザーガイド*の「[AWS Secrets Managerとは](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。

1. [**Service role (サービスロール)**] で、次のいずれかの操作を行います。
   + CodeBuild サービスロールがない場合は、[**新しいサービスロール**] を選択します。[**Role name**] に、新しいロールの名前を入力します。
   + CodeBuild サービスロールがある場合は、**[Existing service role (既存のサービスロール)]** を選択します。[**Role ARN**] で、サービスロールを選択します。
**注記**  
コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールは最大 10 個のビルドプロジェクトで使用できます。

1. [**Buildspec**] で、次のいずれかを行います。
   + [**Use a buildspec file**] (ビルド仕様ファイルの使用) を選択して、ソースコードのルートディレクトリの buildspec.yml を使用します。
   + [**ビルドコマンドの挿入**] を選択して、コンソールを使用してビルドコマンドを挿入します。

   詳細については、「[ビルド仕様 (buildspec) に関するリファレンス](build-spec-ref.md)」を参照してください。

1. [**アーティファクト**] の [**タイプ**] で、次のいずれかの操作を行います。
   + ビルド出力アーティファクトを作成しない場合は、[**No artifacts (アーティファクトなし)**] を選択します。
   + ビルド出力を S3 バケットに保存する場合は、[**Amazon S3**] を選択して次のいずれかの操作を行います。
     + ビルド出力 ZIP ファイルまたはフォルダにプロジェクト名を使用する場合は、[**Name (名前)**] を空白のままにします。それ以外の場合は、名前を入力します。デフォルトでは、アーティファクト名はプロジェクト名です。別の名前を使用する場合は、アーティファクト名ボックスに名前を入力します。ZIP ファイルを出力する場合は、zip 拡張子を含めます。
     + [**Bucket name (バケット名)**] で、出力バケットの名前を選択します。
     + この手順の前の方で [**ビルドコマンドの挿入**] を選択した場合は、[**出力ファイル**] に、ビルド出力 ZIP ファイルまたはフォルダに格納するビルドのファイルの場所を入力します。複数の場所の場合は、各場所をコンマで区切ります (例: `appspec.yml, target/my-app.jar`)。詳細については、「`files`」で [buildspec の構文](build-spec-ref.md#build-spec-ref-syntax) の説明を参照してください。

1. [**Additional configuration (追加設定)**] オプションを展開し、必要に応じてオプションを選択します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。[**確認**] ページで、[**ビルドの開始**] を選択してビルドを実行します。

# AWS CodeBuild ビルドバッジにアクセスする
<a name="access-badges"></a>

 AWS CodeBuild コンソールまたは AWS CLI を使用してビルドバッジにアクセスできます。
+ CodeBuild コンソールでは、ビルドプロジェクトのリストの **[名前]** 列で、ビルドプロジェクトに対応するリンクを選択します。[**ビルドプロジェクト: *project-name***] ページで、[**設定**] の [**Copy badge URL (バッジ URL のコピー)**] を選択します。詳細については、「[ビルドプロジェクトの詳細を表示する (コンソール)](view-project-details.md#view-project-details-console)」を参照してください。
+ で AWS CLI、 `batch-get-projects` コマンドを実行します。ビルドバッジの URL は出力のプロジェクト環境の詳細セクションを含まれています。詳細については、「[ビルドプロジェクトの詳細を表示する (AWS CLI)](view-project-details.md#view-project-details-cli)」を参照してください。

ビルドバッジのリクエスト URL は共通のデフォルトブランチのものですが、ビルドの実行に使用したソースリポジトリの任意のブランチを指定できます。次に例を示します。

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&branch=<branch>
```

また、バッジの URL の「`branch`」パラメーターで「`tag`」パラメーターを置き換えることにより、ソースリポジトリからタグを指定することもできます。例えば、次のようになります。

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&tag=<tag>
```

# CodeBuild ビルドバッジの公開
<a name="publish-badges"></a>

マークダウンのイメージのビルドバッジ URL を使用して、マークダウンファイルに最新ビルドのステータスを表示できます。これは、ソースリポジトリ (GitHub や CodeCommit など) の readme.md ファイルに最新ビルドのステータスを表示する場合に便利です。例:

```
![](<build badge URL>)
```

# CodeBuild バッジのステータス
<a name="badge-statuses"></a>

CodeBuild ビルドバッジには、次のいずれかのステータスがあります。
+ **PASSING** 該当するブランチで最新ビルドが成功しました。
+ **FAILING** 該当するブランチで最新ビルドがタイムアウト、失敗、途中終了、または停止しました。
+ **IN\$1PROGRESS** 該当するブランチで最新ビルドが進行中です。
+ **UNKNOWN** 該当するブランチでプロジェクトがビルドをまだ実行していないか、まったく実行したことがありません。また、ビルドバッジ機能が無効になっている可能性もあります。

# 「 サンプルを使用したテストレポート AWS CLI」
<a name="sample-test-report-cli"></a>

buildspec ファイルで指定したテストは、ビルド中に実行されます。このサンプルでは、 AWS CLI を使用して CodeBuild のビルドにテストを組み込む方法を示します。JUnit を使用して単体テストを作成または、別のツールを使用して構成テストを作成することもできます。その後、テスト結果を評価して、問題を修正したり、アプリケーションを最適化したりできます。

CodeBuild API または AWS CodeBuild コンソールを使用して、テスト結果にアクセスできます。このサンプルでは、テスト結果が S3 バケットにエクスポートされるようにレポートを設定する方法を示します。

**Topics**
+ [テストレポートサンプルを実行](#sample-test-report-cli-run)

## テストレポートサンプルを実行
<a name="sample-test-report-cli-run"></a>

次の手順を使用して、テストレポートサンプルを実行します。

**Topics**
+ [前提条件](#sample-test-report-cli-prerequisites)
+ [ステップ 1: レポートグループを作成](#sample-test-report-cli-create-report)
+ [ステップ 2: レポートグループによるプロジェクトの設定](#sample-test-report-cli-create-project-with-report)
+ [ステップ 3: レポートの実行と結果の表示](#sample-test-report-cli-run-and-view-report-results)

### 前提条件
<a name="sample-test-report-cli-prerequisites"></a>
+ テストケースの作成 このサンプルは、サンプルテストレポートに含めるテストケースがあるという前提で書かれています。buildspec ファイルでテストファイルの場所を指定します。

  以下のテストレポートファイル形式がサポートされています。
  + Cucumber JSON (.json)
  + JUnit XML (.xml)
  + NUnit XML (.xml)
  + NUnit3 XML (.xml)
  + TestNG XML (.xml)
  + Visual Studio TRX (.trx)
  + Visual Studio TRX XML (.xml)

  Surefire JUnit plugin、TestNG、Cucumber などのいずれかの形式でレポートファイルを作成できる任意のテストフレームワークを使用して、テストケースを作成します。
+ S3 バケットを作成し、その名前を書き留めます。詳細については、*Amazon S3 ユーザーガイド*の「[S3 バケットを作成する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)」を参照してください。
+ IAM ロールを作成し、その ARN を書き留めます。ビルドプロジェクトを作成する際は、ARN が必要です。
+ ロールに次の権限がない場合は、追加します。

  ```
  {
      "Effect": "Allow",
      "Resource": [
          "*"
      ],
      "Action": [
          "codebuild:CreateReportGroup",
          "codebuild:CreateReport",
          "codebuild:UpdateReport",
          "codebuild:BatchPutTestCases"
      ]
  }
  ```

   詳細については、「[テストレポートオペレーションのアクセス許可](test-permissions.md#test-permissions-related-to-reporting)」を参照してください。

### ステップ 1: レポートグループを作成
<a name="sample-test-report-cli-create-report"></a>

1. `CreateReportGroupInput.json` という名前のファイルを作成します。

1. S3 バケットに、テスト結果をエクスポートするフォルダを作成します。

1. 以下を `CreateReportGroupInput.json` にコピーします。`<bucket-name>` で、S3 バケットの名前を使用します。`<path-to-folder>` で、S3 バケット内のフォルダへのパスを入力します。

   ```
   {
     "name": "<report-name>",
     "type": "TEST",
     "exportConfig": {
       "exportConfigType": "S3",
       "s3Destination": {
         "bucket": "<bucket-name>",
         "path": "<path-to-folder>",
         "packaging": "NONE"
       }
     }
   }
   ```

1. `CreateReportGroupInput.json` が含まれているディレクトリで次のコマンドを実行します。

   ```
   aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
   ```

   出力は次のようになります。`reportGroup` の ARN を書き留めます。これは、このレポートグループを使用するプロジェクトを作成するときに使用します。

   ```
   {
     "reportGroup": {
       "arn": "arn:aws:codebuild:us-west-2:123456789012:report-group/<report-name>",
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "S3",
         "s3Destination": {
           "bucket": "<s3-bucket-name>",
           "path": "<folder-path>",
           "packaging": "NONE",
           "encryptionKey": "arn:aws:kms:us-west-2:123456789012:alias/aws/s3"
         }
       },
       "created": 1570837165.885,
       "lastModified": 1570837165.885
     }
   }
   ```

### ステップ 2: レポートグループによるプロジェクトの設定
<a name="sample-test-report-cli-create-project-with-report"></a>

レポートを実行するには、まずレポートグループで構成された CodeBuild ビルドプロジェクトを作成します。レポートグループに指定されたテストケースは、ビルドの実行時に実行されます。

1. `buildspec.yml` という名前の buildspec ファイルを作成します。

1. 次のYAMLを `buildspec.yml` ファイルのテンプレートとして使用します。テストを実行するコマンドを必ず含めてください。`reports` セクションで、テストケースの結果を含むファイルを指定します。これらのファイルは、CodeBuild でアクセスできるテスト結果を保存します。作成から 30 日後に有効期限が切れます。これらのファイルは、S3 バケットにエクスポートする生のテストケース結果ファイルとは異なります。

   ```
   version: 0.2
       phases:
       install:
           runtime-versions:
               java: openjdk8
       build:
         commands:
           - echo Running tests 
           - <enter commands to run your tests>
           
       reports:
         <report-name-or-arn>: #test file information
         files:
           - '<test-result-files>'
         base-directory: '<optional-base-directory>'
         discard-paths: false #do not remove file paths from test result files
   ```
**注記**  
既存のレポートグループの ARN の代わりに、作成されていないレポートグループの名前を指定することもできます。ARN の代わりに名前を指定すると、CodeBuild はビルドの実行時にレポートグループを作成します。この名前には、プロジェクト名と buildspec ファイルで指定した名前が `project-name-report-group-name` の形式で含まれます。詳細については、「[テストレポートの作成](report-create.md)」および「[Report group naming](test-report-group-naming.md)」を参照してください。

1. `project.json` という名前のファイルを作成します。このファイルには、**create-project** コマンドの入力が含まれます。

1. 次の JSON を `project.json` にコピーします。`source` で、ソースファイルを含むリポジトリのタイプと場所を入力します。`serviceRole` で、使用しているロールの ARN を指定します。

   ```
   {
     "name": "test-report-project",
     "description": "sample-test-report-project",
     "source": {
       "type": "CODECOMMIT|CODEPIPELINE|GITHUB|S3|BITBUCKET|GITHUB_ENTERPRISE|NO_SOURCE",
       "location": "<your-source-url>"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "cache": {
       "type": "NO_CACHE"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "small"
     },
     "serviceRole": "arn:aws:iam::<your-aws-account-id>:role/service-role/<your-role-name>"
   }
   ```

1. `project.json` が含まれているディレクトリで次のコマンドを実行します。これにより、`test-project` という名前のプロジェクトが作成されます。

   ```
   aws codebuild create-project --cli-input-json file://project.json
   ```

### ステップ 3: レポートの実行と結果の表示
<a name="sample-test-report-cli-run-and-view-report-results"></a>

このセクションでは、前に作成したプロジェクトのビルドを実行します。ビルドプロセス中に、CodeBuild は、テストケースの結果を含むレポートを作成します。レポートは、指定したレポートグループに含まれます。

1. ビルドを開始するには、次のコマンドを実行します。「`test-report-project`」は、上記で作成されたビルドプロジェクトの名前です。出力に表示されるビルド ID を書き留めます。

   ```
   aws codebuild start-build --project-name test-report-project
   ```

1. 次のコマンドを実行して、レポートの ARN を含むビルドに関する情報を取得します。`<build-id>` で、ビルド ID を指定します。出力の「`reportArns`」プロパティのレポート ARN を書き留めます。

   ```
   aws codebuild batch-get-builds --ids <build-id>
   ```

1. 次のコマンドを実行して、レポートの詳細を取得します。`<report-arn>` で、レポート ARN を指定します。

   ```
   aws codebuild batch-get-reports --report-arns <report-arn>
   ```

   出力は次のようになります。このサンプル出力は、成功、失敗、スキップされたテスト、エラーの結果、または不明なステータスを返したテストの数を示しています。

   ```
   {
     "reports": [
       {
         "status": "FAILED",
         "reportGroupArn": "<report-group-arn>",
         "name": "<report-group-name>",
         "created": 1573324770.154,
         "exportConfig": {
           "exportConfigType": "S3",
           "s3Destination": {
             "bucket": "<amzn-s3-demo-bucket>",
             "path": "<path-to-your-report-results>",
             "packaging": "NONE",
             "encryptionKey": "<encryption-key>"
           }
         },
         "expired": 1575916770.0,
         "truncated": false,
         "executionId": "arn:aws:codebuild:us-west-2:123456789012:build/<name-of-build-project>:2c254862-ddf6-4831-a53f-6839a73829c1",
         "type": "TEST",
         "arn": "<report-arn>",
         "testSummary": {
           "durationInNanoSeconds": 6657770,
           "total": 11,
           "statusCounts": {
             "FAILED": 3,
             "SKIPPED": 7,
             "ERROR": 0,
             "SUCCEEDED": 1,
             "UNKNOWN": 0
           }
         }
       }
     ],
     "reportsNotFound": []
   }
   ```

1. レポートのテストケースに関する情報を一覧表示するには、次のコマンドを実行します。`<report-arn>` で、レポートの ARN を指定します。オプションの `--filter` パラメータでは、(`SUCCEEDED`、`FAILED`、`SKIPPED`、 `ERROR`、または `UNKNOWN`) の 1 つのステータス結果指定できます。

   ```
   aws codebuild describe-test-cases \
       --report-arn <report-arn> \
       --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWN
   ```

    出力は次のようになります。

   ```
   {
     "testCases": [
       {
         "status": "FAILED",
         "name": "Test case 1",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       },
       {
         "status": "SUCCEEDED",
         "name": "Test case 2",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       }
     ]
   }
   ```

# CodeBuild の Docker サンプル
<a name="sample-docker-section"></a>

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


| サンプル | 説明 | 
| --- | --- | 
|  [CodeBuild のカスタム Docker イメージのサンプル](sample-docker-custom-image.md)  |  このサンプルでは、CodeBuild とカスタム Docker ビルドイメージ (Docker Hub の `docker:dind`) を使用して Docker イメージをビルドして実行します。  | 
|  [CodeBuild の Docker イメージビルドサーバーのサンプル](sample-docker-server.md)  |  このサンプルは、Docker ビルドをマネージドイメージビルドサーバーにオフロードします。  | 
|  [CodeBuild 用の Windows Docker ビルドサンプル](sample-windows-docker-custom-image.md)  |  このサンプルは、CodeBuild を使用することで Windows Docker イメージを構築して実行します。  | 
|  [CodeBuild の 'Docker イメージを Amazon ECR イメージリポジトリに公開' サンプル](sample-docker.md)  |  このサンプルでは、Docker イメージをビルド出力として生成し、Docker イメージを Amazon Elastic Container Registry (Amazon ECR) イメージリポジトリにプッシュします。  | 
|  [CodeBuild AWS Secrets Manager のサンプルを含むプライベートレジストリ](sample-private-registry.md)  |  このサンプルでは、プライベートレジストリに保存されている Docker イメージを CodeBuild ランタイム環境として使用する方法を示します。  | 

# CodeBuild のカスタム Docker イメージのサンプル
<a name="sample-docker-custom-image"></a>

次のサンプルは、 とカスタム Docker ビルドイメージ (`docker:dind`Docker Hub の ) を使用して Docker イメージを構築 AWS CodeBuild して実行します。

代わりに、Docker をサポートする CodeBuild に用意されているビルドイメージを使用して Docker イメージをビルドする方法については、「['Docker イメージを Amazon ECR に公開' サンプル](sample-docker.md)」を参照してください。

**重要**  
このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、CodeBuild と Amazon S3 に関連する AWS リソースとアクション AWS KMS、および CloudWatch Logs に対して発生する可能性のある料金が含まれます。 Amazon S3 詳細については、「[g465]CodeBuild 料金表[/g465]」、「[g464]Amazon S3 料金表[/g464]」、「[g463]AWS Key Management Service 料金表[/g463]」、および「[g462]Amazon CloudWatch 料金表[/g462]」を参照してください。

**Topics**
+ [カスタムイメージサンプルで Docker を実行](#sample-docker-custom-image-running)

## カスタムイメージサンプルで Docker を実行
<a name="sample-docker-custom-image-running"></a>

カスタムイメージサンプルで Docker を実行するには、次の手順に従います。このサンプルの詳細については、「[CodeBuild のカスタム Docker イメージのサンプル](#sample-docker-custom-image)」を参照してください。

**カスタムイメージサンプルで Docker を実行するには**

1. このトピックの [ディレクトリ構造](#sample-docker-custom-image-dir)および [ファイル](#sample-docker-custom-image-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-docker-custom-image-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerCustomImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "docker:dind",
       "computeType": "BUILD_GENERAL1_SMALL",
       "privilegedMode": false
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```
**注記**  
デフォルトでは、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. ビルドの結果を表示するには、ビルドのログで文字列 `Hello, World!` を探します。詳細については、「[ビルドの詳細の表示](view-build-details.md)」を参照してください。

### ディレクトリ構造
<a name="sample-docker-custom-image-dir"></a>

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

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

### ファイル
<a name="sample-docker-custom-image-files"></a>

このサンプルで使用されているオペレーティングシステムの基本イメージは Ubuntu です。このサンプルで使用するファイルは以下のとおりです。

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

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` ( 内)`(root directory name)`

```
FROM maven:3.3.9-jdk-8
 
RUN echo "Hello World"
```

# CodeBuild の Docker イメージビルドサーバーのサンプル
<a name="sample-docker-server"></a>

次のサンプルは、Docker ビルドをマネージドイメージビルドサーバーにオフロードします。このサンプルを調整して、CodeBuild プロジェクト設定で専用のマネージド Docker イメージビルドサーバーをプロビジョニングできます。プロビジョニングされたインスタンスは、プロジェクトのビルドがアクティブに実行されている間はアクティブであり、ビルドが実行されていない間はインスタンスが停止することに注意してください。プロビジョニングされたインスタンスは、リサイクルされるまで最大 1 か月間保存されます。詳細については、「[CodeBuild の Docker サーバーの機能](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability)」を参照してください。

**重要**  
このサンプルを実行すると、 AWS アカウントに料金が発生する可能性があります。これには、CodeBuild と Amazon S3 に関連する AWS リソースとアクション AWS KMS、および CloudWatch Logs に対して発生する可能性のある料金が含まれます。 Amazon S3 詳細については、「[g465]CodeBuild 料金表[/g465]」、「[g464]Amazon S3 料金表[/g464]」、「[g463]AWS Key Management Service 料金表[/g463]」、および「[g462]Amazon CloudWatch 料金表[/g462]」を参照してください。

**Topics**
+ [Docker サーバーを設定する](#sample-docker-server-running)

## Docker サーバーを設定する
<a name="sample-docker-server-running"></a>

Docker ワークロードを管理し、Docker イメージレイヤーを保存する CodeBuild プロジェクト専用のコンピューティング環境をプロビジョニングするには、次の手順に従います。

**Docker サーバーを設定するには**

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

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

   1. コンソールの **[環境]** セクションで、**[その他の設定]** を選択し、**[Docker サーバー設定]** に移動して、**[このプロジェクトで Docker サーバーを有効にする]** を選択します。その後、**[Docker サーバーのコンピューティングタイプ]** を選択し、**[レジストリの認証情報]** を指定できます。

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

      ```
      {
        "name": "sample-docker-custom-image-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/DockerServerSample.zip"
        },
        "artifacts": {
          "type": "NO_ARTIFACTS"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/amazonlinux-x86_64-standard:5.0",
          "computeType": "BUILD_GENERAL1_LARGE",
          "dockerServer": [ 
               { 
                  "computeType": "BUILD_GENERAL1_LARGE",
                  "securityGroupIds": [ "security-groups-ID" ]
               }
            ]
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name"
      }
      ```
**注記**  
Docker サーバー用に設定されたセキュリティグループは、プロジェクトで設定された VPC からの進入ネットワークトラフィックを許可する必要があります。ポート 9876 で進入を許可する必要があります。

1. ビルドの結果を表示するには、ビルドのログで文字列 `Hello, World!` を探します。詳細については、「[ビルドの詳細の表示](view-build-details.md)」を参照してください。

### ディレクトリ構造
<a name="sample-docker-server-dir"></a>

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

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

### ファイル
<a name="sample-docker-server-files"></a>

このサンプルで使用されているオペレーティングシステムの基本イメージは Ubuntu です。このサンプルで使用するファイルは以下のとおりです。

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

```
version: 0.2

phases:
  build:
    commands:
      - docker buildx build -t helloworld --load .
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` ( 内)`(root directory name)`

```
FROM public.ecr.aws/amazonlinux/amazonlinux:latest 
 
RUN echo "Hello World"
```

# CodeBuild 用の Windows Docker ビルドサンプル
<a name="sample-windows-docker-custom-image"></a>

次のサンプルは、CodeBuild を使用することで Windows Docker イメージを構築して実行します。

**Topics**
+ [Windows Docker ビルドサンプルを実行する](#sample-windows-docker-build-running)

## Windows Docker ビルドサンプルを実行する
<a name="sample-windows-docker-build-running"></a>

Windows Docker サンプルを実行するには、次の手順に従います。

**Windows Docker ビルドサンプルを実行するには**

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

1. `WINDOWS_EC2` フリートを作成します。

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

   ```
   {
     "name": "fleet-name",
     "baseCapacity": 1,
     "environmentType": "WINDOWS_EC2",
     "computeType": "BUILD_GENERAL1_MEDIUM"
   }
   ```

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

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

   ```
   {
     "name": "project-name",
     "source": {
       "type": "S3",
       "location": "bucket-name/DockerImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "WINDOWS_EC2",
       "image": "Windows",
       "computeType": "BUILD_GENERAL1_MEDIUM",
       "fleet": {
          "fleetArn": "fleet-arn"
       }
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name"
   }
   ```

1. ビルドの結果を表示するには、ビルドのログで文字列 `Hello, World!` を探します。詳細については、「[ビルドの詳細の表示](view-build-details.md)」を参照してください。

### ディレクトリ構造
<a name="sample-windows-docker-custom-image-dir"></a>

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

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

### ファイル
<a name="sample-windows-docker-custom-image-files"></a>

このサンプルで使用されているオペレーティングシステムの基本イメージは `mcr.microsoft.com/windows/servercore:ltsc2022` です。このサンプルで使用するファイルは以下のとおりです。

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

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld powershell -Command "Write-Host 'Hello World!'"
```

`Dockerfile` ( 内)`(root directory name)`

```
FROM mcr.microsoft.com/windows/servercore:ltsc2022

RUN powershell -Command "Write-Host 'Hello World'"
```

# CodeBuild の 'Docker イメージを Amazon ECR イメージリポジトリに公開' サンプル
<a name="sample-docker"></a>

このサンプルでは、Docker イメージをビルド出力として生成し、Docker イメージを Amazon Elastic Container Registry (Amazon ECR) イメージリポジトリにプッシュします。このサンプルを適応させて、Docker イメージを Docker Hub にプッシュすることができます。詳細については、「['Docker イメージを Amazon ECR に公開' サンプルを Docker Hub にプッシュするように変更](sample-docker-docker-hub.md)」を参照してください。

カスタム Docker ビルドイメージ (Docker Hub の `docker:dind`) を使用して Docker イメージをビルドする方法については、「[カスタム Docker イメージのサンプル](sample-docker-custom-image.md)」を参照してください。

このサンプルは、`golang:1.12` を参照してテストされています。

このサンプルでは、新しいマルチステージの Docker ビルド機能を使用しています。この機能により、Docker イメージがビルド出力として生成されます。次に、Docker イメージがAmazon ECR イメージリポジトリにプッシュされます。マルチステージの Docker イメージビルドは、最終的な Docker イメージのサイズを縮小するのに役立ちます。詳細については、「[Docker でのマルチステージビルドの使用](https://docs.docker.com/engine/userguide/eng-image/multistage-build/)」を参照してください。

**重要**  
このサンプルを実行すると、 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**
+ ['Docker イメージを Amazon ECR に公開' サンプルを実行](#sample-docker-running)
+ ['Docker イメージを Amazon ECR に公開' サンプルを Docker Hub にプッシュするように変更](sample-docker-docker-hub.md)

## 'Docker イメージを Amazon ECR に公開' サンプルを実行
<a name="sample-docker-running"></a>

Docker イメージを Amazon ECR に公開するサンプルを実行するには、次の手順に従います。このサンプルの詳細については、「[CodeBuild の 'Docker イメージを Amazon ECR イメージリポジトリに公開' サンプル](#sample-docker)」を参照してください。

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

1. 使用する Amazon ECR にイメージリポジトリがすでにある場合は、ステップ 3 に進みます。それ以外の場合は、 AWS ルートアカウントまたは管理者ユーザーの代わりに ユーザーを使用して Amazon ECR を操作する場合は、このステートメント (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* と *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1 の間*) をユーザー (またはユーザーが関連付けられている IAM グループ) に追加します。 AWS ルートアカウントの使用はお勧めしません。このステートメントでは、Docker イメージを保存するための Amazon ECR リポジトリを作成できます。省略記号 (`...`) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号をポリシーに入力しないでください。詳細については、*ユーザーガイド*の「[AWS マネジメントコンソールでのインラインポリシーの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console)」を参照してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:CreateRepository"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

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

1. Amazon ECR にイメージリポジトリを作成します。必ず、ビルド環境を作成してビルドを実行するリージョンと同じ AWS リージョンにリポジトリを作成します。詳細については、*Amazon ECR ユーザーガイド*の「[リポジトリの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)」を参照してください。このリポジトリの名前は、この手順で後ほど `IMAGE_REPO_NAME` 環境変数を使用して指定するリポジトリ名と一致させる必要があります。Amazon ECR リポジトリポリシーで、CodeBuild サービスの IAM ロールに、イメージをプッシュするアクセスが許可されていることを確認してください。

1. このステートメント (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* と *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* の間) を AWS CodeBuild サービスロールにアタッチしたポリシーに追加します。このステートメントでは、Amazon ECR リポジトリに Docker イメージをアップロードすることを CodeBuild に許可します。省略記号 (`...`) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号をポリシーに入力しないでください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:BatchCheckLayerAvailability",
                   "ecr:CompleteLayerUpload",
                   "ecr:GetAuthorizationToken",
                   "ecr:InitiateLayerUpload",
                   "ecr:PutImage",
                   "ecr:UploadLayerPart"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

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

1. このトピックの [ディレクトリ構造](#sample-docker-dir)および [ファイル](#sample-docker-files)セクションで説明されているようにファイルを作成し、S3 入力バケットまたは AWS CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。詳細については、「*AWS CodePipeline ユーザーガイド*」の「[イメージ定義ファイルのリファレンス](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html)」を参照してください。
**重要**  
`(root directory name)` をアップロードしないでください。アップロードするのは、`(root directory name)` 内のファイルのみです。  
S3 入力バケットを使用している場合は、ファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。`(root directory name)` を ZIP ファイルに追加しないでください。追加するのは、`(root directory name)` 内のファイルのみです。

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

    コンソールを使用してプロジェクトを作成する場合:

   1.  [**Operating system**] で、[**Ubuntu**] を選択します。

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

   1.  [**イメージ**] で、[**aws/codebuild/standard:5.0**] を選択します。

   1.  次の環境変数を設定します。
      +  AWS\$1DEFAULT\$1REGION (値は *region-ID*) 
      +  AWS\$1ACCOUNT\$1ID (値は *account-ID*) 
      +  IMAGE\$1TAG (最新の値) 
      +  IMAGE\$1REPO\$1NAME (値は *Amazon-ECR-repo-name*) 

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

   ```
   {
     "name": "sample-docker-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL",
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ],
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. CodeBuild が Docker イメージをリポジトリに正常にプッシュしたことを確認します。

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

   1. リポジトリ名を選択します。イメージは、[**Image tag (イメージタグ)**] 列に表示されています。

### ディレクトリ構造
<a name="sample-docker-dir"></a>

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

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

### ファイル
<a name="sample-docker-files"></a>

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

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

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
```

`Dockerfile` ( 内)`(root directory name)`

```
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld 
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
```

**注記**  
CodeBuild はカスタムDocker イメージの「`ENTRYPOINT`」をオーバーライドします。

# 'Docker イメージを Amazon ECR に公開' サンプルを Docker Hub にプッシュするように変更
<a name="sample-docker-docker-hub"></a>

'Docker イメージを Amazon ECR に公開' サンプルを調整して、Docker イメージが Amazon ECR の代わりに Docker Hub にプッシュされるようにするには、サンプルのコードを編集します。サンプルの詳細については、「[CodeBuild の 'Docker イメージを Amazon ECR イメージリポジトリに公開' サンプル](sample-docker.md)」と「['Docker イメージを Amazon ECR に公開' サンプルを実行](sample-docker.md#sample-docker-running)」を参照してください。
**注記**  
使用している Docker のバージョンが 17.06 より前のものである場合は、`--no-include-email` オプションを削除します。

1. `buildspec.yml` ファイルで、以下の Amazon ECR 固有のコード行を置き換えます。

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Amazon ECR...
         - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...          
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

   代わりに、以下の Docker Hub 固有のコード行を使用します。

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Docker Hub...
         # Type the command to log in to your Docker Hub account here.          
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

1. 編集したコードを S3 入力バケット、、GitHub AWS CodeCommit、または Bitbucket リポジトリにアップロードします。
**重要**  
`(root directory name)` をアップロードしないでください。アップロードするのは、`(root directory name)` 内のファイルのみです。  
S3 入力バケットを使用している場合は、ファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。`(root directory name)` を ZIP ファイルに追加しないでください。追加するのは、`(root directory name)` 内のファイルのみです。

1. `create-project` コマンドに対する JSON 形式の入力で、以下のコード行が置き換えの対象です。

   ```
   ...
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

   以下のコード行に置き換えます。

   ```
   ...
       "environmentVariables": [
         {
           "name": "IMAGE_REPO_NAME",
           "value": "your-Docker-Hub-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

1. ビルド環境を作成して、ビルドを実行し、関連するビルド情報を表示します。

1. が Docker イメージをリポジトリに AWS CodeBuild 正常にプッシュしたことを確認します。Docker Hub にサインインし、リポジトリに進み、[**Tags**] タブを選択します。`latest` タグには、ごく最近の **[Last Updated]** (最終更新) の値が含まれています。

# CodeBuild AWS Secrets Manager のサンプルを含むプライベートレジストリ
<a name="sample-private-registry"></a>

 このサンプルでは、プライベートレジストリに保存されている Docker イメージを AWS CodeBuild ランタイム環境として使用する方法を示します。プライベートレジストリの認証情報は AWS Secrets Managerに保存されています。CodeBuild では任意のプライベートレジストリを使用できます。このサンプルでは Docker Hub を使用します。

**注記**  
シークレットはアクションに表示され、ファイルに書き込まれる際にマスクされません。

**Topics**
+ [プライベートレジストリのサンプルの要件](#sample-private-registry-requirements)
+ [プライベートレジストリを使用した CodeBuild プロジェクトの作成](private-registry-sample-create-project.md)
+ [セルフホスト型ランナーのプライベートレジストリ認証情報を設定する](private-registry-sample-configure-runners.md)

## プライベートレジストリのサンプルの要件
<a name="sample-private-registry-requirements"></a>

 でプライベートレジストリを使用するには AWS CodeBuild、以下が必要です。
+  Docker Hub 認証情報を保存する Secrets Manager シークレット。この認証情報を使用してプライベートリポジトリにアクセスします。
**注記**  
作成したシークレットに対して料金が発生します。
+  プライベートリポジトリまたはアカウント。
+  Secrets Manager シークレットへのアクセス許可を付与する CodeBuild サービスロールの IAM ポリシー。

 これらのリソースを作成し、プライベートレジストリに保存されている Docker イメージを使用して CodeBuild ビルドプロジェクトを作成するには、以下の手順に従います。

# プライベートレジストリを使用した CodeBuild プロジェクトの作成
<a name="private-registry-sample-create-project"></a>

1. 無料のプライベートリポジトリを作成する方法については、[Docker Hub のリポジトリ](https://docs.docker.com/docker-hub/repos/)に関するページを参照してください。ターミナルで以下のコマンドを実行して、イメージのプル、ID の取得、新しいリポジトリへのプッシュを行うこともできます。

   ```
   docker pull amazonlinux
   docker images amazonlinux --format {{.ID}}
   docker tag image-id your-username/repository-name:tag
   docker login
   docker push your-username/repository-name
   ```

1.  *AWS Secrets Manager 「 ユーザーガイド*」の「 [AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」の手順に従います。

   

   1.  ステップ 3 の **[シークレットのタイプを選択]** で、**[他の種類のシークレット]** を選択します。

   1. **[キー/値のペア]** で、Docker Hub ユーザー名として 1 つのキーと値のペアを作成し、Docker Hub パスワードとして 1 つのキーと値のペアを作成します 

   1.  「 [AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」の手順に従ってください。

   1.  ステップ 5 の **[自動ローテーションの設定]** ページで、自動ローテーションをオフにします。キーは Docker Hub の認証情報に対応しているためです。

   1.  「 [AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」のステップに従います。

    詳細については、「[What is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。

1.  コンソールで AWS CodeBuild プロジェクトを作成すると、CodeBuild は必要なアクセス許可をアタッチします。以外の AWS KMS キーを使用する場合は`DefaultEncryptionKey`、サービスロールに追加する必要があります。詳細については、『[g852]IAM ユーザーガイド[/g852]』の「[g851]ロールの修正 (コンソール)[/g851]」を参照してください。

    Secrets Manager で使用するサービスロールには、少なくとも `secretsmanager:GetSecretValue` アクセス許可が必要です。  
![\[サービスロールの設定。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  コンソールでプライベートレジストリに保存されている環境を使用してプロジェクトを作成するには、プロジェクトの作成時に以下の操作を行います。詳細については、[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console) を参照してください。
**注記**  
 プライベートレジストリが VPC 内にある場合は、パブリックインターネットアクセスが必要です。CodeBuild は、VPC 内のプライベート IP アドレスからイメージを取得できません。

   1.  **[環境イメージ]** で、**[カスタムイメージ]** を選択します。

   1.  [**Environment type (環境タイプ)**] で、[**Linux**] または [**Windows**] を選択します。

   1.  **[イメージレジストリ]** で、**[その他のレジストリ]** を選択します。

   1.  **[外部レジストリの URL]** で、画像の場所を入力し、**[レジストリの認証情報 - オプション]** で Secrets Manager の認証情報の ARN または名前を入力します。
**注記**  
 認証情報が現在のリージョンに存在しない場合は、ARN を使用する必要があります。認証情報が別のリージョンに存在する場合、認証情報の名前は使用できません。

# セルフホスト型ランナーのプライベートレジストリ認証情報を設定する
<a name="private-registry-sample-configure-runners"></a>

セルフホスト型ランナーのレジストリ認証情報を設定するには、次の手順に従います。

**注記**  
これらの認証情報は、イメージがプライベートレジストリのイメージで上書きされている場合にのみ使用されることに注意してください。

------
#### [ AWS Management Console ]

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

1. ビルドプロジェクトを作成するか、既存のプロジェクトを選択します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドプロジェクトの設定の変更 (コンソール)](change-project.md#change-project-console)」を参照してください。

1.  **[環境]** で、**[追加設定]** を選択します。

1.  **追加設定**で、レジストリ認証情報 AWS Secrets Manager の からシークレットの名前または ARN を入力します。オプションです。 ****  
![\[レジストリ認証情報の設定。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/registry-credential.png)

------
#### [ AWS CLI ]

1. 新しいプロジェクトを作成する場合は、**create-project** コマンドを実行します。

   ```
   aws codebuild create-project \
       --name project-name \
       --source type=source-type,location=source-location \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn},imagePullCredentialsType=CODEBUILD|SERVICE_ROLE" \
       --artifacts type=artifacts-type \
       --service-role arn:aws:iam::account-ID:role/service-role/service-role-name
   ```

1. 既存のプロジェクトを更新する場合は、**update-project** コマンドを実行します。

   ```
   aws codebuild update-project \
       --name project-name \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn}"
   ```

------

# ビルド出力を S3 バケットでホストする静的ウェブサイトの作成
<a name="sample-disable-artifact-encryption"></a>

ビルドのアーティファクトの暗号化を無効にすることができます。これにより、ウェブサイトをホストするように設定した場所にアーティファクトを発行できます。(暗号化されたアーティファクトを発行することはできません。) このサンプルは、ウェブフックを使用してビルドをトリガーし、ウェブサイトとして設定した S3 バケットにそのアーティファクトを発行する方法を示しています。

1.  「[静的ウェブサイトのセットアップ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html)」の手順に従って、S3 バケットをウェブサイトとして動作するように設定します。

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

1.  CodeBuild の情報ページが表示された場合、**ビルドプロジェクトを作成する**を選択します。それ以外の場合は、ナビゲーションペインで**ビルド**を展開し、**[ビルドプロジェクト] **を選択し、次に **[Create build project (ビルドプロジェクトの作成)] **を選択します。

1. [**プロジェクト名**] に、このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、 AWS アカウントごとに一意である必要があります。また、他のユーザーがこのプロジェクトの使用目的を理解できるように、ビルドプロジェクトの説明を任意で指定することもできます。

1.  [**ソース**] で、[**ソースプロバイダ**] として [**GitHub**] を選択します。手順に従って GitHub に接続 (または再接続) し、[**Authorize (承認)**] を選択します。

    [**ウェブフック**] で、[**Rebuild every time a code change is pushed to this repository (コードの変更がこのレポジトリにプッシュされるたびに再構築する)**] を選択します。このチェックボックスは、[**Use a repository in my account (自分のアカウントでリポジトリを使用する)**] を選択した場合のみオンにできます。  
![\[ウェブフック設定。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/webhook.png)

1. [**環境**] で以下の操作を行います。

   [**Environment image (環境イメージ)**] で、次のいずれかの操作を行います。
   + によって管理される Docker イメージを使用するには AWS CodeBuild、**マネージドイメージ**を選択し、**オペレーティングシステム**、**ランタイム (複数可)**、**イメージ**、**イメージバージョン**から選択します。利用可能な場合は、[**環境タイプ**] から選択します。
   + 別の Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Other registry (その他のレジストリ)**] を選択した場合は、[**External registry URL (外部のレジストリ URL)**] に `docker repository/docker image name` の形式に従って Docker Hub の Docker イメージの名前とタグを入力します。**Amazon ECR** を選択した場合は、**Amazon ECR リポジトリ**と **Amazon ECR イメージ**を使用して、 AWS アカウントの Docker イメージを選択します。
   + プライベート Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Image registry (イメージレジストリ)**] に [**Other registry (その他のレジストリ)**] を選択して、その後プライベート Docker イメージの認証情報の ARN を入力します。認証情報は、Secrets Manager で作成する必要があります。詳細については、*AWS Secrets Manager ユーザーガイド*の「[AWS Secrets Managerとは](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。

1. [**Service role (サービスロール)**] で、次のいずれかの操作を行います。
   + CodeBuild サービスロールがない場合は、[**新しいサービスロール**] を選択します。[**Role name**] に、新しいロールの名前を入力します。
   + CodeBuild サービスロールがある場合は、**[Existing service role (既存のサービスロール)]** を選択します。[**Role ARN**] で、サービスロールを選択します。
**注記**  
コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールは最大 10 個のビルドプロジェクトで使用できます。

1. [**Buildspec**] で、次のいずれかを行います。
   + [**Use a buildspec file**] (ビルド仕様ファイルの使用) を選択して、ソースコードのルートディレクトリの buildspec.yml を使用します。
   + [**ビルドコマンドの挿入**] を選択して、コンソールを使用してビルドコマンドを挿入します。

   詳細については、「[ビルド仕様 (buildspec) に関するリファレンス](build-spec-ref.md)」を参照してください。

1.  **[アーティファクト] **で、**[タイプ]** として Amazon S3 を選択し、**S3** バケットにビルド出力を保存します。

1.  [**バケット名**] で、ステップ 1 でウェブサイトとして動作するよう設定した S3 バケットの名前を選択します。

1.  [**環境**] で [**ビルドコマンドの挿入**] を選択した場合は、[**出力ファイル**] に、出力バケットに入れるビルドのファイルの場所を入力します。複数の場所がある場合は、カンマを使用して場所ごとに区切ります (例: **appspec.yml, target/my-app.jar**)。詳細については、「[Artifacts reference-key in the buildspec file](build-spec-ref.md#artifacts-build-spec)」を参照してください。

1.  [**Disable artifacts encryption (アーティファクトの暗号化を無効化)**] を選択します。

1. [**Additional configuration (追加設定)**] オプションを展開し、必要に応じてオプションを選択します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。ビルドプロジェクトページの [**ビルド履歴**] で、[**ビルドの開始**] を選択してビルドを実行します。

1.  (オプション) *Amazon S3 デベロッパーガイド*の「[例: Amazon CloudFront でウェブサイトを高速化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-cloudfront-walkthrough.html)」の手順に従います。

# 複数の入力ソースと出力アーティファクトのサンプル
<a name="sample-multi-in-out"></a>

複数の入力ソースと複数の出力アーティファクトのセットを持つ AWS CodeBuild ビルドプロジェクトを作成できます。このサンプルは、ビルドプロジェクトをセットアップする方法を示しています。
+ さまざまなタイプの複数のソースとリポジトリを使用します。
+ ビルドアーティファクトを複数の S3 バケットに 1 つのビルドで発行します。

 次のサンプルでは、ビルドプロジェクトを作成し、それを使用してビルドを実行します。このサンプルでは、ビルドプロジェクトの buildspec ファイルを使用して、複数のソースを組み込み、複数のアーティファクトセットを作成する方法を示します。

CodeBuild への複数のソース入力を使用して複数の出力アーティファクトを作成するパイプラインの作成方法については、「[複数の入力ソースおよび出力アーティファクトを持つ CodePipeline/CodeBuild の統合のサンプル](sample-codepipeline.md#sample-pipeline-multi-input-output)」を参照してください。

**Topics**
+ [複数の入力と出力を持つビルドプロジェクトを作成](sample-multi-in-out-create.md)
+ [ソースなしでビルドプロジェクトを作成](no-source.md)

# 複数の入力と出力を持つビルドプロジェクトを作成
<a name="sample-multi-in-out-create"></a>

次の手順を使用して、複数の入力と出力を持つビルドプロジェクトを作成します。

**複数の入力と出力を持つビルドプロジェクトを作成するには**

1.  ソースを 1 つ以上の S3 バケットにアップロードするか、1 つ以上の CodeCommit、GitHub、GitHub Enterprise Server、または Bitbucket リポジトリにアップロードします。

1.  プライマリソースを選択します。これは、CodeBuild が buildspec ファイルを探して実行するソースです。

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

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

1.  AWS CLI を使用してビルドプロジェクトを作成する場合、`create-project` コマンドへの JSON 形式の入力は次のようになります。

   ```
   {
     "name": "sample-project",
     "source": {
       "type": "S3",
       "location": "<bucket/sample.zip>"
     },
     "secondarySources": [
       {
         "type": "CODECOMMIT",
         "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo",
         "sourceIdentifier": "source1"
       },
       {
         "type": "GITHUB",
         "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin",
         "sourceIdentifier": "source2"
       }
     ],
     "secondaryArtifacts": [ss
       {
         "type": "S3",
         "location": "<output-bucket>",
         "artifactIdentifier": "artifact1"
       },
       {
         "type": "S3",
         "location": "<other-output-bucket>",
         "artifactIdentifier": "artifact2"
       }
     ],
     "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"
   }
   ```

 プライマリソースは、`source` 属性で定義されます。他のすべてのソースはセカンダリソースと呼ばれ、`secondarySources` の下に表示されます。すべてのセカンダリソースは、独自のディレクトリにインストールされます。このディレクトリは、組み込みの環境変数 `CODEBUILD_SRC_DIR_sourceIdentifer` に保存されます。詳細については、「[ビルド環境の環境変数](build-env-ref-env-vars.md)」を参照してください。

 `secondaryArtifacts` 属性には、アーティファクトの定義のリストが含まれます。これらのアーティファクトは、`secondary-artifacts` ブロック内にネストされている buildspec ファイルの `artifacts` ブロックを使用します。

 buildspec ファイル内のセカンダリアーティファクトは、アーティファクトと同じ構造を持ち、アーティファクト識別子で区切られます。

**注記**  
 [CodeBuild API](https://docs.aws.amazon.com/codebuild/latest/APIReference/) で、セカンダリアーティファクトの `artifactIdentifier` は、`CreateProject` および `UpdateProject` で必須の属性です。セカンダリアーティファクトを参照するために使用される必要があります。

 前述の JSON 形式の入力を使用すると、プロジェクトの buildspec ファイルは次のようになります。

```
version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk11
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  files:
    - '**.*'
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2
```

 `sourceVersion` の `StartBuild` 属性で API を使用して、プライマリソースのバージョンを上書きすることができます。1 つまたは複数のセカンダリソースバージョンを上書きするには、`secondarySourceVersionOverride` 属性を使用します。

 `start-build` の AWS CLI コマンドへの JSON 形式の入力は次のようになります。

```
{
   "projectName": "sample-project",
   "secondarySourcesVersionOverride": [
      {
        "sourceIdentifier": "source1",
        "sourceVersion": "codecommit-branch"
      },
      {
        "sourceIdentifier": "source2",
        "sourceVersion": "github-branch"
      },
   ]
}
```

# ソースなしでビルドプロジェクトを作成
<a name="no-source"></a>

 ソースを設定するときに、「**NO\$1SOURCE**」ソースタイプを選択することによって CodeBuild プロジェクトを構成できます。ソースタイプが **NO\$1SOURCE** である場合、プロジェクトにはソースがないため、buildspec ファイルを指定することはできません。代わりに、CLI の `buildspec` コマンドに対する JSON 形式の入力の `create-project` 属性で、YAML 形式の buildspec 文字列を指定する必要があります。次のように指定します。

```
{
  "name": "project-name",
  "source": {
    "type": "NO_SOURCE",
    "buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n      - command"
   },
  "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"
}
```

詳細については、「[ビルドプロジェクトの作成 (AWS CLI)](create-project.md#create-project-cli)」を参照してください。

# CodeBuild の buildspec ファイルサンプルのランタイムバージョン
<a name="sample-runtime-versions"></a>

Amazon Linux 2 (AL2) 標準イメージバージョン 1.0 以降、または Ubuntu 標準イメージバージョン 2.0 以降を使用している場合は、buildspec ファイルの `runtime-versions` セクションで 1 つ以上のランタイムを指定できます。次のサンプルでは、プロジェクトランタイムを変更する方法、複数のランタイムを指定する方法、および別のランタイムに依存するランタイムを指定する方法を示します。サポートされているランタイムについては、「[CodeBuild に用意されている Docker イメージ](build-env-ref-available.md)」を参照してください。

**注記**  
ビルドコンテナで Docker を使用している場合、ビルドは特権モードで実行する必要があります。詳細については、「[AWS CodeBuild ビルドを手動で実行する](run-build.md)」および「[でのビルドプロジェクトの作成AWS CodeBuild](create-project.md)」を参照してください。

**Topics**
+ [buildspec ファイル内のランタイムバージョンを更新](sample-runtime-update-version.md)
+ [2 つのランタイムの指定](sample-runtime-two-major-version-runtimes.md)

# buildspec ファイル内のランタイムバージョンを更新
<a name="sample-runtime-update-version"></a>

プロジェクトで使用されるランタイムを新しいバージョンに変更するには、buildpec ファイルの `runtime-versions` セクションを更新します。以下の例では、Java バージョン 8 および 11 を指定する方法を示します。
+ Java バージョン 8 を指定する `runtime-versions` セクション:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto8
  ```
+ Java バージョン 11 を指定する `runtime-versions` セクション:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto11
  ```

次の例では、Ubuntu 標準イメージ 5.0 または Amazon Linux 2 標準イメージ 3.0 を使用して、Python の異なるバージョンを指定する方法を示しています。
+ Python バージョン 3.7 を指定する `runtime-versions` セクション: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.7
  ```
+ Python バージョン 3.8 を指定する `runtime-versions` セクション: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.8
  ```

このサンプルでは、Java バージョン 8 ランタイムで始まり、その後で Java バージョン 10 ランタイムに更新されるプロジェクトを示します。

1. Maven をダウンロードし、インストールします。詳細については、Apache Maven ウェブサイトの「[Apache Maven のダウンロード](https://maven.apache.org/download.cgi)」および「[Apache Maven のインストール](https://maven.apache.org/install.html)」を参照してください。

1. ローカルコンピュータまたはインスタンスの空のディレクトリに切り替えて、この Maven コマンドを実行します。

   ```
   mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"
   ```

   成功すると、このディレクトリ構造とファイルが作成されます。

   ```
   .
   └── ROOT
       ├── pom.xml
       └── src
           └── main
               ├── resources
               └── webapp
                   ├── WEB-INF
                   │   └── web.xml
                   └── index.jsp
   ```

1. 次の内容で、`buildspec.yml` というファイルを作成します。ファイルを ` (root directory name)/my-web-app` ディレクトリ内に保存します。

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         java: corretto8
     build:
       commands:
         - java -version
         - mvn package
   artifacts:
     files:
       - '**/*'
     base-directory: 'target/my-web-app'
   ```

   buildspec ファイル: 
   + この `runtime-versions` セクションでは、プロジェクトでバージョン 8 のJava ランタイムを使用することを指定します。
   + この `- java -version` コマンドは、ビルド時にプロジェクトで使用されている Java のバージョンを表示します。

   ファイル構造は次のようになります。

   ```
   (root directory name)
   └── my-web-app
       ├── src
       │   ├── main
       │   ├── resources
       │   └── webapp
       │       └── WEB-INF
       │           └── web.xml
       │               └── index.jsp
       ├── buildspec.yml
       └── pom.xml
   ```

1. 「`my-web-app`」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。
**重要**  
`(root directory name)` または `(root directory name)/my-web-app` をアップロードしないでください。アップロードするのは、`(root directory name)/my-web-app` のディレクトリとファイルだけです。  
S3 入力バケットを使用している場合は、ディレクトリ構造とファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。`(root directory name)` または `(root directory name)/my-web-app` を ZIP ファイルに追加しないでください。追加するのは、`(root directory name)/my-web-app` のディレクトリとファイルだけです。

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

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。
   + [**環境**] の場合:
     + [**環境イメージ**] で、[**Managed image (マネージド型イメージ)**] を選択します。
     + [**オペレーティングシステム**] で、[**Amazon Linux 2**] を選択します。
     +  [**ランタイム**] で、[**Standard (標準)**] を選択します。
     + [**イメージ**] で、[**aws/codebuild/amazonlinux-x86\$164-standard:4.0**] を選択します。

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

1. [**ビルド設定**] でデフォルト値をそのまま使用して、[**ビルドの開始**] を選択します。

1. ビルドが完了したら、[**ビルドログ**] タブでビルド出力を表示します。次のような出力が表示されます。

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto8' based on manual selections...
   [Container] Date Time Running command echo "Installing Java version 8 ..."
   Installing Java version 8 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_8_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_8_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_8_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_8_HOME"/bin/* "$JRE_8_HOME"/bin/*;
   ```

1. `runtime-versions` セクションを Java バージョン 11 で更新します。

   ```
   install:
       runtime-versions:
         java: corretto11
   ```

1. 変更を保存したら、ビルドを再実行し、ビルド出力を表示します。現在インストールされている Java のバージョンが 11 であることが表示されます。次のような出力が表示されます: 

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto11' based on manual selections... 
   Installing Java version 11 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_11_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_11_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_11_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_11_HOME"/bin/* "$JRE_11_HOME"/bin/*;
   ```

# 2 つのランタイムの指定
<a name="sample-runtime-two-major-version-runtimes"></a>

同じ CodeBuild ビルドプロジェクトで、複数のランタイムを指定できます。このサンプルプロジェクトでは、2 つのソースファイルを使用します。1 つは Go ランタイムを使用し、もう 1 つは Node.js ランタイムを使用します。

1. `my-source` という名前のディレクトリを作成します。

1. `my-source` ディレクトリ内に `golang-app` という名前のディレクトリを作成します。

1. 次の内容で、`hello.go` というファイルを作成します。ファイルを `golang-app` ディレクトリ内に保存します。

   ```
   package main
   import "fmt"
   
   func main() {
     fmt.Println("hello world from golang")
     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)
     fmt.Println("good bye from golang")
   }
   ```

1. `my-source` ディレクトリ内に `nodejs-app` という名前のディレクトリを作成します。これは `golang-app` ディレクトリと同じレベルにある必要があります。

1. 次の内容で、`index.js` というファイルを作成します。ファイルを `nodejs-app` ディレクトリ内に保存します。

   ```
   console.log("hello world from nodejs");
   console.log("1+1 =" + (1+1));
   console.log("7.0/3.0 =" + 7.0/3.0);
   console.log(true && false);
   console.log(true || false);
   console.log(!true);
   console.log("good bye from nodejs");
   ```

1. 次の内容で、`package.json` というファイルを作成します。ファイルを `nodejs-app` ディレクトリ内に保存します。

   ```
   {
     "name": "mycompany-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"run some tests here\""
     },
     "author": "",
     "license": "ISC"
   }
   ```

1. 次の内容で、`buildspec.yml` というファイルを作成します。`my-source` および `nodejs-app` ディレクトリと同じレベルで、ファイルを `golang-app` ディレクトリに保存します。`runtime-versions` セクションでは、Node.js バージョン 12 および Go バージョン 1.13 ランタイムを指定します。

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         golang: 1.13
         nodejs: 12
     build:
       commands:
         - echo Building the Go code...
         - cd $CODEBUILD_SRC_DIR/golang-app
         - go build hello.go 
         - echo Building the Node code...
         - cd $CODEBUILD_SRC_DIR/nodejs-app
         - npm run test
   artifacts:
     secondary-artifacts:
       golang_artifacts:
         base-directory: golang-app
         files:
           - hello
       nodejs_artifacts:
         base-directory: nodejs-app
         files:
           - index.js
           - package.json
   ```

1. ファイル構造は次のようになります。

   ```
   my-source
   ├── golang-app
   │   └── hello.go
   ├── nodejs.app
   │   ├── index.js
   │   └── package.json
   └── buildspec.yml
   ```

1. 「`my-source`」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。
**重要**  
 S3 入力バケットを使用している場合は、ディレクトリ構造とファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。`my-source` を ZIP ファイルに追加しないでください。追加するのは、`my-source` のディレクトリとファイルのみです。

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

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。
   + [**環境**] の場合:
     + [**環境イメージ**] で、[**Managed image (マネージド型イメージ)**] を選択します。
     + [**オペレーティングシステム**] で、[**Amazon Linux 2**] を選択します。
     + [**ランタイム**] で、[**Standard (標準)**] を選択します。
     + [**イメージ**] で、[**aws/codebuild/amazonlinux-x86\$164-standard:4.0**] を選択します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。

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

1. [**ビルド設定**] でデフォルト値をそのまま使用して、[**ビルドの開始**] を選択します。

1. ビルドが完了したら、[**ビルドログ**] タブでビルド出力を表示します。次のような出力が表示されます。Go ランタイムおよび Node.js ランタイムからの出力が表示されます。また、Go アプリケーションおよび Node.js アプリケーションからの出力も表示されます。

   ```
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'golang' runtime version '1.13' based on manual selections...
   [Container] Date Time Selecting 'nodejs' runtime version '12' based on manual selections...
   [Container] Date Time Running command echo "Installing Go version 1.13 ..."
   Installing Go version 1.13 ... 
    
   [Container] Date Time Running command echo "Installing Node.js version 12 ..." 
   Installing Node.js version 12 ... 
    
   [Container] Date Time Running command n $NODE_12_VERSION
      installed : v12.20.1 (with npm 6.14.10)
   
   [Container] Date Time Moving to directory /codebuild/output/src819694850/src
   [Container] Date Time Registering with agent
   [Container] Date Time Phases found in YAML: 2
   [Container] Date Time  INSTALL: 0 commands
   [Container] Date Time  BUILD: 1 commands
   [Container] Date Time Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:
   [Container] Date Time Entering phase INSTALL
   [Container] Date Time Phase complete: INSTALL State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase PRE_BUILD 
   [Container] Date Time Phase complete: PRE_BUILD State: SUCCEEDED 
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase BUILD 
   [Container] Date Time Running command echo Building the Go code... 
   Building the Go code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/golang-app 
    
   [Container] Date Time Running command go build hello.go 
    
   [Container] Date Time Running command echo Building the Node code... 
   Building the Node code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/nodejs-app 
    
   [Container] Date Time Running command npm run test 
    
   > mycompany-app@1.0.0 test /codebuild/output/src924084119/src/nodejs-app 
   > echo "run some tests here" 
    
   run some tests here
   ```

# を使用したソースバージョンサンプル AWS CodeBuild
<a name="sample-source-version"></a>

 このサンプルでは、コミット ID (コミット SHA とも呼ばれます) 以外の形式を使用してソースのバージョンを指定する方法を示します。ソースのバージョンは、以下の方法で指定できます。
+  Amazon S3 ソースプロバイダーの場合は、ビルド入力 ZIP ファイルを表すオブジェクトのバージョン ID を使用します。
+  CodeCommit、Bitbucket、GitHub、GitHub Enterprise Server の場合は、以下のいずれかを使用します。
  +  プルリクエストの参照としてのプルリクエスト (例: `refs/pull/1/head`)。
  +  ブランチ名としてのブランチ。
  +  コミット ID。
  +  タグ。
  +  参照とコミット ID。参照は、次のいずれかになります。
    +  タグ (例 : `refs/tags/mytagv1.0^{full-commit-SHA}`)。
    +  ブランチ (例 : `refs/heads/mydevbranch^{full-commit-SHA}`)。
    +  プルリクエスト (例 : `refs/pull/1/head^{full-commit-SHA}`)。
+  GitLab と GitLab セルフマネージドの場合は、次のいずれかを使用します。
  +  ブランチ名としてブランチします。
  +  コミット ID。
  +  タグ。

**注記**  
 プルリクエストソースのバージョンを指定できるのは、リポジトリが GitHub または GitHub Enterprise Server である場合に限ります。

 参照とコミット ID を使用してバージョンを指定すると、バージョンのみを指定した場合よりもビルドの `DOWNLOAD_SOURCE` フェーズが高速になります。これは、参照を追加すると、CodeBuild はコミットを見つけるためにリポジトリ全体をダウンロードする必要がないためです。
+ ソースバージョンはコミット ID のみで指定できます (例: `12345678901234567890123467890123456789`)。これを行う場合、CodeBuild はバージョンを見つけるためにリポジトリ全体をダウンロードする必要があります。
+ ソースバージョンを指定するには、参照とコミット ID を次の形式で使用できます: `refs/heads/branchname^{full-commit-SHA}` (例 : `refs/heads/main^{12345678901234567890123467890123456789}`)。この場合、CodeBuild は指定されたブランチだけをダウンロードしてバージョンを検索します。

**注記**  
ビルドの `DOWNLOAD_SOURCE` フェーズを高速化するには、**[Git clone depth]** (Git のクローンの深さ) を低い数値に設定することもできます。CodeBuild がダウンロードするリポジトリのバージョン数が少なくなります。

**Topics**
+ [コミット ID で GitHub リポジトリバージョンを指定](sample-source-version-github.md)
+ [参照とコミット ID を使用して GitHub リポジトリバージョンを指定](sample-source-version-github-ref.md)

# コミット ID で GitHub リポジトリバージョンを指定
<a name="sample-source-version-github"></a>

ソースバージョンはコミット ID のみで指定できます (例: `12345678901234567890123467890123456789`)。これを行う場合、CodeBuild はバージョンを見つけるためにリポジトリ全体をダウンロードする必要があります。

**コミット ID で GitHub リポジトリバージョンを指定するには**

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

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。以下の設定を除いて、すべての設定をデフォルト値のままにします。
   +  [**Source (ソース)**] で、次のようにします。
     +  [**ソースプロバイダー**] で [**GitHub**] を選択します。GitHub に接続されていない場合は、手順に従って接続します。
     +  [**レポジトリ**] で、[**パブリックレポジトリ**] を選択します。
     +  [**リポジトリの URL**] に、「**https://github.com/aws/aws-sdk-ruby.git**」と入力します。
   + [**環境**] で以下の操作を行います。
     + [**環境イメージ**] で、[**Managed image (マネージド型イメージ)**] を選択します。
     + [**オペレーティングシステム**] で、[**Amazon Linux 2**] を選択します。
     + [**ランタイム**] で、[**Standard (標準)**] を選択します。
     + [**イメージ**] で、[**aws/codebuild/amazonlinux-x86\$164-standard:4.0**] を選択します。

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

1.  [**ビルドコマンド**] で、プレースホルダーテキストを次のように置き換えます。

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         ruby: 2.6
     build:
       commands:
          - echo $CODEBUILD_RESOLVED_SOURCE_VERSION
   ```

    Ubuntu 標準イメージ 2.0 を使用する場合、`runtime-versions` セクションは必須です。ここでは Ruby バージョン 2.6 ランタイムを指定していますが、任意のランタイムを使用できます。`echo` コマンドは、`CODEBUILD_RESOLVED_SOURCE_VERSION` 環境変数に保存されているソースコードのバージョンを表示します。

1.  [**ビルド設定**] でデフォルト値をそのまま使用して、[**ビルドの開始**] を選択します。

1.  [**ソースバージョン**] に「**046e8b67481d53bdc86c3f6affdd5d1afae6d369**」と入力します。これは、`https://github.com/aws/aws-sdk-ruby.git` リポジトリのコミットの SHA です。

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

1.  ビルドが完了すると、以下が表示されます。
   +  [**ビルドログ**] タブに、使用されたプロジェクトソースのバージョン。以下はその例です。

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  [**環境変数**] タブに、ビルドを作成するために使用されたコミット ID と一致する [ **Resolved source version (解決されたソースバージョン)**]。
   +  [**フェーズ詳細**] タブに、 `DOWNLOAD_SOURCE` フェーズの所要時間。

# 参照とコミット ID を使用して GitHub リポジトリバージョンを指定
<a name="sample-source-version-github-ref"></a>

ソースバージョンを指定するには、参照とコミット ID を次の形式で使用できます: `refs/heads/branchname^{full-commit-SHA}` (例 : `refs/heads/main^{12345678901234567890123467890123456789}`)。この場合、CodeBuild は指定されたブランチだけをダウンロードしてバージョンを検索します。

**参照とコミット ID を使用して GitHub リポジトリバージョンを指定するには**

1. 「[コミット ID で GitHub リポジトリバージョンを指定](sample-source-version-github.md)」のステップを完了します。

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

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

1.  [**ソースバージョン**] に「**refs/heads/main^\$1046e8b67481d53bdc86c3f6affdd5d1afae6d369\$1**」と入力します。これは、次の形式のブランチへのコミット ID および参照と同じです: `refs/heads/branchname^{full-commit-SHA}`。

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

1. ビルドが完了すると、以下が表示されます。
   +  [**ビルドログ**] タブに、使用されたプロジェクトソースのバージョン。以下はその例です。

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  [**環境変数**] タブに、ビルドを作成するために使用されたコミット ID と一致する [ **Resolved source version (解決されたソースバージョン)**]。
   +  [**フェーズ詳細**] タブに、`DOWNLOAD_SOURCE` フェーズの所要時間。これは、コミット ID のみを使用してソースのバージョンを指定する場合よりも短い時間であることが必要です。

# CodeBuild のサードパーティーソースリポジトリのサンプル
<a name="sample-third-party-source"></a>

このセクションでは、サードパーティーのソースリポジトリと CodeBuild 間のサンプル統合について説明します。


| サンプル | 説明 | 
| --- | --- | 
|  Bitbucket プルリクエストとウェブフックフィルタのサンプル - 「[CodeBuild の 'Bitbucket プルリクエストとウェブフックフィルタ' のサンプルを実行](sample-bitbucket-pull-request.md)」参照  |  このサンプルでは、Bitbucket リポジトリを使用してプルリクエストを作成する方法について説明します。また、Bitbucket ウェブフックを使用して CodeBuild をトリガーし、プロジェクトのビルドを作成する方法についても説明します。  | 
|  GitHub Enterprise Server サンプル - 「[CodeBuild の GitHub Enterprise Server サンプルを実行](sample-github-enterprise.md)」参照  |  このサンプルでは、GitHub Enterprise Server リポジトリに証明書がインストールされている場合に、CodeBuild を設定する方法を示します。また、Webhook を有効にして、GitHub Enterprise Server リポジトリにコード変更がプッシュされるたびに CodeBuild でソースコードを再ビルドする方法についても示します。  | 
|  GitHub プルリクエストとウェブフックフィルタのサンプル - 「[CodeBuild の GitHub プルリクエストとウェブフックフィルタのサンプルを実行](sample-github-pull-request.md)」参照  |  このサンプルでは、GitHub Enterprise Server リポジトリを使用してプルリクエストを作成する方法について説明します。また、Webhook を有効にして、GitHub Enterprise Server リポジトリにコード変更がプッシュされるたびに CodeBuild でソースコードを再ビルドする方法についても示します。  | 

# CodeBuild の 'Bitbucket プルリクエストとウェブフックフィルタ' のサンプルを実行
<a name="sample-bitbucket-pull-request"></a>

AWS CodeBuild は、ソースリポジトリが Bitbucket の場合にウェブフックをサポートします。つまり、ソースコードが Bitbucket リポジトリに保存されている CodeBuild ビルドプロジェクトでは、ウェブフックを使用することで、コード変更がリポジトリにプッシュされるたびにソースコードを再構築できます。詳細については、「[Bitbucket ウェブフックイベント](bitbucket-webhook.md)」を参照してください。

このサンプルでは、Bitbucket リポジトリを使用してプルリクエストを作成する方法について説明します。また、Bitbucket ウェブフックを使用して CodeBuild をトリガーし、プロジェクトのビルドを作成する方法についても説明します。

**注記**  
Webhook を使用する場合、ユーザーが予期しないビルドをトリガーする可能性があります。このリスクを軽減するには、「[ウェブフック使用のベストプラクティス。](webhooks.md#webhook-best-practices)」を参照してください。

**Topics**
+ [前提条件](#sample-bitbucket-pull-request-prerequisites)
+ [ステップ 1: Bitbucket を使用してビルドプロジェクトを作成し、ウェブフックを有効化](#sample-bitbucket-pull-request-create)
+ [ステップ 2: Bitbucket ウェブフックを使用してビルドをトリガー](#sample-bitbucket-pull-request-trigger)

## 前提条件
<a name="sample-bitbucket-pull-request-prerequisites"></a>

 このサンプルを実行するには、 AWS CodeBuild プロジェクトを Bitbucket アカウントに接続する必要があります。

**注記**  
 CodeBuild によって、Bitbucket を使用したアクセス許可が更新されています。以前にプロジェクトを Bitbucket に接続し、Bitbucket 接続エラーになったことがある場合は、再接続の上、CodeBuild アクセス許可を付与してウェブフックを管理する必要があります。

## ステップ 1: Bitbucket を使用してビルドプロジェクトを作成し、ウェブフックを有効化
<a name="sample-bitbucket-pull-request-create"></a>

 次の手順では、Bitbucket をソースリポジトリとして AWS CodeBuild プロジェクトを作成し、ウェブフックを有効にする方法について説明します。

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

1.  CodeBuild の情報ページが表示された場合、**ビルドプロジェクトを作成する**を選択します。それ以外の場合は、ナビゲーションペインで**ビルド**を展開し、**[ビルドプロジェクト] **を選択し、次に **[Create build project (ビルドプロジェクトの作成)] **を選択します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。

1. [**Project configuration (プロジェクトの設定)**] で、次のようにします。  
**[Project name]** (プロジェクト名)  
このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、 AWS アカウントごとに一意である必要があります。また、他のユーザーがこのプロジェクトの使用目的を理解できるように、ビルドプロジェクトの説明を任意で指定することもできます。

1. [**Source (ソース)**] で、次のようにします。  
**ソースプロバイダー**  
[**Bitbucket**] を選択します。手順に従って Bitbucket に接続 (または再接続) し、[**Authorize**] (承認) を選択します。  
**リポジトリ**  
[**Bitbucket アカウントのリポジトリ**] を選択します。  
まだ Bitbucket アカウントに接続していない場合は、Bitbucket のユーザーネームとパスワードを入力し、[**Bitbucket 認証情報の保存**] を選択します。  
**Bitbucket リポジトリ**  
Bitbucket リポジトリの URL を入力します。

1. [**プライマリソース Webhook イベント**] で、以下を選択します。
**注記**  
[**プライマリソース Webhook イベント**] セクションは、前のステップで [**Bitbucket アカウントのリポジトリ**] を選択した場合のみに表示されます。

   1. プロジェクトの作成時に [**コードの変更がこのレポジトリにプッシュされるたびに再構築する**] を選択します。

   1. [**イベントタイプ**] から、1 つ以上のイベントを選択します。

   1. イベントでビルドをトリガーされた時間をフィルタリングするには、[**これらの条件でビルドを開始する**] で、1 つ以上のオプションフィルタを追加します。

   1. イベントがトリガーされていない時間をフィルタリングするには、[**これらの条件でビルドを開始しない**] で、1 つ以上のオプションフィルタを追加します。

   1. 別のフィルタグループを追加する必要がある場合、[**フィルタグループの追加**] を選択します。

   Bitbucket ウェブフックイベントタイプとフィルターの詳細については、「[Bitbucket ウェブフックイベント](bitbucket-webhook.md)」を参照してください。

1. [**環境**] で以下の操作を行います。  
**環境イメージ**  
次のいずれかを選択します。    
によって管理される Docker イメージを使用するには AWS CodeBuild:  
**[Managed image (マネージドイメージ)]** を選択し、次に **[オペレーティングシステム]**、**[ランタイム]**、**[イメージ]**、および **[ランタイムバージョン] **で適切な選択を行います。利用可能な場合は、[**環境タイプ**] から選択します。  
別の Docker イメージを使用するには:  
[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Other registry (その他のレジストリ)**] を選択した場合は、[**External registry URL (外部のレジストリ URL)**] に `docker repository/docker image name` の形式に従って Docker Hub の Docker イメージの名前とタグを入力します。**Amazon ECR** を選択した場合は、**Amazon ECR リポジトリ**と **Amazon ECR イメージ**を使用して、 AWS アカウントの Docker イメージを選択します。  
プライベートDockerイメージを使用するには：  
[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Image registry (イメージレジストリ)**] に [**Other registry (その他のレジストリ)**] を選択して、その後プライベート Docker イメージの認証情報の ARN を入力します。認証情報は、Secrets Manager で作成する必要があります。詳細については、「 *AWS Secrets Manager ユーザーガイド*」の[「What is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。  
**サービスロール**  
次のいずれかを選択します。  
   + CodeBuild サービスロールがない場合は、[**新しいサービスロール**] を選択します。[**Role name**] に、新しいロールの名前を入力します。
   + CodeBuild サービスロールがある場合は、**[Existing service role (既存のサービスロール)]** を選択します。[**Role ARN**] で、サービスロールを選択します。
コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールは最大 10 個のビルドプロジェクトで使用できます。

1. [**Buildspec**] で、次のいずれかを行います。
   + [**Use a buildspec file**] (ビルド仕様ファイルの使用) を選択して、ソースコードのルートディレクトリの buildspec.yml を使用します。
   + [**ビルドコマンドの挿入**] を選択して、コンソールを使用してビルドコマンドを挿入します。

   詳細については、「[ビルド仕様 (buildspec) に関するリファレンス](build-spec-ref.md)」を参照してください。

1. [**アーティファクト**] で、次のようにします。  
**タイプ**  
次のいずれかを選択します。  
   + ビルド出力アーティファクトを作成しない場合は、[**No artifacts (アーティファクトなし)**] を選択します。
   + ビルド出力を S3 バケットに保存する場合は、[**Amazon S3**] を選択して次のいずれかの操作を行います。
     + ビルド出力 ZIP ファイルまたはフォルダにプロジェクト名を使用する場合は、[**Name (名前)**] を空白のままにします。それ以外の場合は、名前を入力します。デフォルトでは、アーティファクト名はプロジェクト名です。別の名前を使用する場合は、アーティファクト名ボックスに名前を入力します。ZIP ファイルを出力する場合は、zip 拡張子を含めます。
     + [**Bucket name (バケット名)**] で、出力バケットの名前を選択します。
     + この手順の前の方で [**ビルドコマンドの挿入**] を選択した場合は、[**出力ファイル**] に、ビルド出力 ZIP ファイルまたはフォルダに格納するビルドのファイルの場所を入力します。複数の場所の場合は、各場所をコンマで区切ります (例: `appspec.yml, target/my-app.jar`)。詳細については、「`files`」で [buildspec の構文](build-spec-ref.md#build-spec-ref-syntax) の説明を参照してください。  
**追加設定**  
[**Additional configuration (追加設定)**] オプションを展開し、必要に応じてオプションを設定します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。[**確認**] ページで、[**ビルドの開始**] を選択してビルドを実行します。

## ステップ 2: Bitbucket ウェブフックを使用してビルドをトリガー
<a name="sample-bitbucket-pull-request-trigger"></a>

Bitbucket ウェブフックを使用するプロジェクトの場合、Bitbucket リポジトリがソースコードの変更を検出すると、 はビルド AWS CodeBuild を作成します。

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

1. ナビゲーションペインで [**ビルドプロジェクト**] を選択後、ウェブフックを使用して Bitbucket リポジトリと関連付けられているプロジェクトを選択します。Bitbucket Webhook プロジェクトの作成の詳細については、「[ステップ 1: Bitbucket を使用してビルドプロジェクトを作成し、ウェブフックを有効化](#sample-bitbucket-pull-request-create)」を参照してください。

1. プロジェクトの Bitbucket リポジトリのコードに一部変更を加えます。

1. Bitbucket リポジトリにプルリクエストを作成します。詳細については、「[プルリクエストを行う](https://www.atlassian.com/git/tutorials/making-a-pull-request)」を参照してください。

1. Bitbucket ウェブフックページで、[**View request (リクエストの表示)**] を選択して最新イベントのリストを表示します。

1. [**View details**] (詳細の表示) を選択して、CodeBuild より返されるレスポンスに関する詳細を表示します。次のように表示されます。

   ```
   "response":"Webhook received and build started: https://us-east-1.console.aws.amazon.com/codebuild/home..."
   "statusCode":200
   ```

1. Bitbucket プルリクエストページに移動して、ビルドのステータスを表示します。

# CodeBuild の GitHub Enterprise Server サンプルを実行
<a name="sample-github-enterprise"></a>

AWS CodeBuild は、ソースリポジトリとして GitHub Enterprise Server をサポートしています。このサンプルでは、GitHub Enterprise Server リポジトリが証明書をインストールしている場合に、CodeBuild をセットアップする方法を示します。また、Webhook を有効にして、GitHub Enterprise Server リポジトリにコード変更がプッシュされるたびに CodeBuild でソースコードを再ビルドする方法についても示します。

**Topics**
+ [前提条件](#sample-github-enterprise-prerequisites)
+ [ステップ 1: GitHub Enterprise Server でビルドプロジェクトを作成し、ウェブフックを有効化](#sample-github-enterprise-running)

## 前提条件
<a name="sample-github-enterprise-prerequisites"></a>

1. CodeBuild プロジェクトの個人用アクセストークンを生成する。GitHub Enterprise ユーザーを作成して、このユーザーの個人用アクセストークンを生成することをお勧めします。CodeBuild プロジェクトを作成する際に使用できるように、クリップボードにこれをコピーします。詳細については、GitHub Help ウェブサイトの [Creating a personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) を参照してください。

   個人用アクセストークンを作成するときには、定義に**リポジトリ**スコープを含めてください。  
![\[定義内の [リポジトリ] スコープ。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/scopes.png)

1. GitHub Enterprise サーバーから証明書をダウンロードします。CodeBuild は、証明書を使用して信頼された SSL 接続をリポジトリに作成します。

   **Linux/macOS クライアント:**

   のターミナルウィンドウから、以下のコマンドを実行します。

   ```
   echo -n | openssl s_client -connect HOST:PORTNUMBER \
       | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /folder/filename.pem
   ```

   コマンドのプレースホルダを次の値で置き換えます。

   *HOST* GitHub Enterprise Server リポジトリの IP アドレス。

   *PORTNUMBER*。接続するときに使用するポート番号 (たとえば、443)。

   *folder* 証明書をダウンロードしたフォルダ。

   *filename* 証明書ファイルのファイル名。
**重要**  
証明書を .pem ファイルとして保存します。

   **Windows クライアント:**

   ブラウザを使用して GitHub Enterprise Server から証明書をダウンロードします。サイトの証明書の詳細を表示するには、南京錠アイコンを選択します。証明書をエクスポートする方法についての詳細は、ブラウザのドキュメントを参照してください。
**重要**  
証明書を .pem ファイルとして保存します。

1. 証明書ファイルを S3 バケットにアップロードします。S3 バケットを作成する方法については、「[S3 バケットを作成する方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)」を参照してください。S3 バケットにオブジェクトをアップロードする方法については、「[バケットにファイルとフォルダをアップロードする方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。
**注記**  
このバケットは、ビルドと同じ AWS リージョンにある必要があります。たとえば、米国東部 (オハイオ) リージョンでビルドを実行するように CodeBuild に指示している場合、バケットは米国東部 (オハイオ) リージョンにある必要があります。

## ステップ 1: GitHub Enterprise Server でビルドプロジェクトを作成し、ウェブフックを有効化
<a name="sample-github-enterprise-running"></a>

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

1.  CodeBuild の情報ページが表示された場合、**ビルドプロジェクトを作成する**を選択します。それ以外の場合は、ナビゲーションペインで**ビルド**を展開し、**[ビルドプロジェクト] **を選択し、次に **[Create build project (ビルドプロジェクトの作成)] **を選択します。

1. [**プロジェクト名**] に、このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、 AWS アカウントごとに一意である必要があります。また、他のユーザーがこのプロジェクトの使用目的を理解できるように、ビルドプロジェクトの説明を任意で指定することもできます。

1. [**ソース**] の [**ソースプロバイダ**] で、[**GitHub Enterprise Server**] を選択します。
   + [**アカウント認証情報の管理**] を選択し、[**個人用アクセストークン**] を選択します。[**サービス**] で、[**Secrets Manager (推奨)**] を選択し、シークレットを設定します。次に、[**GitHub Enterprise 個人用アクセストークン**] で、個人用アクセストークンを入力し、[**保存**] を選択します。
   + [**Repository URL**] に、リポジトリへのパス (例: リポジトリの名前) を入力します。
   + [**Additional configuration (追加設定)**] を展開します。
   + [**Rebuild every time a code change is pushed to this repository (コード変更がこのリポジトリにプッシュされるたび再構築)**] を選択して、コード変更がこのリポジトリにプッシュされるたびに再構築します。
   + GitHub Enterprise Server プロジェクトリポジトリに接続するときの SSL 警告を無視するには、[**Enable insecure SSL (安全でない SSL を有効にする)**] を選択します。
**注記**  
[**Enable insecure SSL (セキュアでない SSL を有効にする)**] はテストのみに使用することが推奨されます。本番環境では使用しないでください。  
![\[GitHub Enterprise Server プロジェクトリポジトリの設定。\]](http://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/images/github-enterprise.png)

1. [**環境**] で以下の操作を行います。

   [**Environment image (環境イメージ)**] で、次のいずれかの操作を行います。
   + によって管理される Docker イメージを使用するには AWS CodeBuild、**マネージドイメージ**を選択し、**オペレーティングシステム**、**ランタイム (複数可)**、**イメージ**、**イメージバージョン**から選択します。利用可能な場合は、[**環境タイプ**] から選択します。
   + 別の Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Other registry (その他のレジストリ)**] を選択した場合は、[**External registry URL (外部のレジストリ URL)**] に `docker repository/docker image name` の形式に従って Docker Hub の Docker イメージの名前とタグを入力します。**Amazon ECR** を選択した場合は、**Amazon ECR リポジトリ**と **Amazon ECR イメージ**を使用して、 AWS アカウントの Docker イメージを選択します。
   + プライベート Docker イメージを使用するには、[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Image registry (イメージレジストリ)**] に [**Other registry (その他のレジストリ)**] を選択して、その後プライベート Docker イメージの認証情報の ARN を入力します。認証情報は、Secrets Manager で作成する必要があります。詳細については、*AWS Secrets Manager ユーザーガイド*の「[AWS Secrets Managerとは](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。

1. [**Service role (サービスロール)**] で、次のいずれかの操作を行います。
   + CodeBuild サービスロールがない場合は、[**新しいサービスロール**] を選択します。[**Role name**] に、新しいロールの名前を入力します。
   + CodeBuild サービスロールがある場合は、**[Existing service role (既存のサービスロール)]** を選択します。[**Role ARN**] で、サービスロールを選択します。
**注記**  
コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールは最大 10 個のビルドプロジェクトで使用できます。

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

   CodeBuild を VPC と連携させたい場合:
   + **[VPC]** で、CodeBuild が使用する VPC ID を選択します。
   + [**VPC Subnets (サブネット)**] で、CodeBuild が使用するリソースを含むサブネットを選択します。
   + **[VPC Security groups (VPC セキュリティグループ)] **で、CodeBuild が VPC 内のリソースへのアクセスを許可するために使用するセキュリティグループを選択します。

   詳細については、「[Amazon Virtual Private Cloud AWS CodeBuild で を使用する](vpc-support.md)」を参照してください。

1. [**Buildspec**] で、次のいずれかを行います。
   + [**Use a buildspec file**] (ビルド仕様ファイルの使用) を選択して、ソースコードのルートディレクトリの buildspec.yml を使用します。
   + [**ビルドコマンドの挿入**] を選択して、コンソールを使用してビルドコマンドを挿入します。

   詳細については、「[ビルド仕様 (buildspec) に関するリファレンス](build-spec-ref.md)」を参照してください。

1. [**アーティファクト**] の [**タイプ**] で、次のいずれかの操作を行います。
   + ビルド出力アーティファクトを作成しない場合は、[**No artifacts (アーティファクトなし)**] を選択します。
   + ビルド出力を S3 バケットに保存する場合は、[**Amazon S3**] を選択して次のいずれかの操作を行います。
     + ビルド出力 ZIP ファイルまたはフォルダにプロジェクト名を使用する場合は、[**Name (名前)**] を空白のままにします。それ以外の場合は、名前を入力します。デフォルトでは、アーティファクト名はプロジェクト名です。別の名前を使用する場合は、アーティファクト名ボックスに名前を入力します。ZIP ファイルを出力する場合は、zip 拡張子を含めます。
     + [**Bucket name (バケット名)**] で、出力バケットの名前を選択します。
     + この手順の前の方で [**ビルドコマンドの挿入**] を選択した場合は、[**出力ファイル**] に、ビルド出力 ZIP ファイルまたはフォルダに格納するビルドのファイルの場所を入力します。複数の場所の場合は、各場所をコンマで区切ります (例: `appspec.yml, target/my-app.jar`)。詳細については、「`files`」で [buildspec の構文](build-spec-ref.md#build-spec-ref-syntax) の説明を参照してください。

1. [**キャッシュタイプ**] で、以下のいずれかを選択します。
   + キャッシュを使用しない場合は、[**No cache**] を選択します。
   + Amazon S3 キャッシュを使用するには、[**Amazon S3**] を選択して次の操作を行います。
     + [**バケット**] では、キャッシュが保存される S3 バケットの名前を選択します。
     + (オプション) **[Cache path prefix (キャッシュパスのプレフィックス)] **に、Amazon S3 パスのプレフィックスを入力します。[**キャッシュパスのプレフィックス**] 値はディレクトリ名に似ています。これにより、バケット内の同じディレクトリにキャッシュを保存できます。
**重要**  
パスのプレフィックスの末尾にスラッシュ (/) を付加しないでください。
   +  ローカルキャッシュを使用する場合は、[**ローカル**] を選択し、ローカルキャッシュモードを 1 つ以上選択します。
**注記**  
Docker レイヤーキャッシュモードは Linux でのみ利用可能です。このモードを選択する場合、プロジェクトは権限モードで実行する必要があります。

   キャッシュを使用すると、再利用可能なビルド環境がキャッシュに保存され、ビルド全体で使用されるため、かなりのビルド時間が節約されます。ビルド仕様ファイルのキャッシュの指定に関する詳細については、「[buildspec の構文](build-spec-ref.md#build-spec-ref-syntax)」を参照してください。キャッシングの詳細については、「[パフォーマンスを向上させるためのキャッシュビルド](build-caching.md)」を参照してください。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。ビルドプロジェクトページで、[**Start build (ビルドの開始)**] を選択します。

# CodeBuild の GitHub プルリクエストとウェブフックフィルタのサンプルを実行
<a name="sample-github-pull-request"></a>

AWS CodeBuild は、ソースリポジトリが GitHub の場合にウェブフックをサポートします。つまり、ソースコードが GitHub リポジトリに保存されている CodeBuild ビルドプロジェクトでは、ウェブフックを使用することで、コード変更がリポジトリにプッシュされるたびにソースコードを再構築できます。CodeBuild のサンプルについては、「[AWS CodeBuild のサンプル](https://github.com/aws-samples/aws-codebuild-samples)」を参照してください。

**注記**  
Webhook を使用する場合、ユーザーが予期しないビルドをトリガーする可能性があります。このリスクを軽減するには、「[ウェブフック使用のベストプラクティス。](webhooks.md#webhook-best-practices)」を参照してください。

**Topics**
+ [ステップ 1: GitHub でビルドプロジェクトを作成し、ウェブフックを有効化](#sample-github-pull-request-running)
+ [ステップ 2: ウェブフックが有効になっていることを確認](#verification-checks)

## ステップ 1: GitHub でビルドプロジェクトを作成し、ウェブフックを有効化
<a name="sample-github-pull-request-running"></a>

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

1.  CodeBuild の情報ページが表示された場合、**ビルドプロジェクトを作成する**を選択します。それ以外の場合は、ナビゲーションペインで**ビルド**を展開し、**[ビルドプロジェクト] **を選択し、次に **[Create build project (ビルドプロジェクトの作成)] **を選択します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。

1. [**Project configuration (プロジェクトの設定)**] で、次のようにします。  
**[Project name]** (プロジェクト名)  
このビルドプロジェクトの名前を入力します。ビルドプロジェクト名は、 AWS アカウントごとに一意である必要があります。また、他のユーザーがこのプロジェクトの使用目的を理解できるように、ビルドプロジェクトの説明を任意で指定することもできます。

1. [**Source (ソース)**] で、次のようにします。  
**ソースプロバイダー**  
[**GitHub**] を選択します。手順に従って GitHub に接続 (または再接続) し、[**Authorize (承認)**] を選択します。  
**リポジトリ**  
[**GitHub アカウントのリポジトリ**] を選択します。  
**GitHub リポジトリ**  
GitHub リポジトリの URL を入力します。

1. [**プライマリソース Webhook イベント**] で、以下を選択します。
**注記**  
[**プライマリソースの Webhook イベント**] セクションは、前のステップで [**GitHub アカウントのリポジトリ**] を選択した場合のみに表示されます。

   1. プロジェクトの作成時に [**コードの変更がこのレポジトリにプッシュされるたびに再構築する**] を選択します。

   1. [**イベントタイプ**] から、1 つ以上のイベントを選択します。

   1. イベントでビルドをトリガーされた時間をフィルタリングするには、[**これらの条件でビルドを開始する**] で、1 つ以上のオプションフィルタを追加します。

   1. イベントがトリガーされていない時間をフィルタリングするには、[**これらの条件でビルドを開始しない**] で、1 つ以上のオプションフィルタを追加します。

   1. 別のフィルタグループを追加する必要がある場合、[**フィルタグループの追加**] を選択します。

   GitHub Webhook イベントタイプとフィルターの詳細については、「[GitHub ウェブフックイベント](github-webhook.md)」を参照してください。

1. [**環境**] で以下の操作を行います。  
**環境イメージ**  
次のいずれかを選択します。    
によって管理される Docker イメージを使用するには AWS CodeBuild:  
**[Managed image (マネージドイメージ)]** を選択し、次に **[オペレーティングシステム]**、**[ランタイム]**、**[イメージ]**、および **[ランタイムバージョン] **で適切な選択を行います。利用可能な場合は、[**環境タイプ**] から選択します。  
別の Docker イメージを使用するには:  
[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Other registry (その他のレジストリ)**] を選択した場合は、[**External registry URL (外部のレジストリ URL)**] に `docker repository/docker image name` の形式に従って Docker Hub の Docker イメージの名前とタグを入力します。[**Amazon ECR**] を選択した場合は、[**Amazon ECR レポジトリ**] および [**Amazon ECR イメージ**] を使用して AWS アカウントの Docker イメージを選択します。  
プライベートDockerイメージを使用するには：  
[**カスタムイメージ**] を選択します。**[Environment type (環境タイプ)]** で、 [**ARM**]、[**Linux**]、[**Linux GPU**] または [**Windows**] を選択します。[**Image registry (イメージレジストリ)**] に [**Other registry (その他のレジストリ)**] を選択して、その後プライベート Docker イメージの認証情報の ARN を入力します。認証情報は、Secrets Manager で作成する必要があります。詳細については、「 *AWS Secrets Manager ユーザーガイド*」の[「What is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)」を参照してください。  
**サービスロール**  
次のいずれかを選択します。  
   + CodeBuild サービスロールがない場合は、[**新しいサービスロール**] を選択します。[**Role name**] に、新しいロールの名前を入力します。
   + CodeBuild サービスロールがある場合は、**[Existing service role (既存のサービスロール)]** を選択します。[**Role ARN**] で、サービスロールを選択します。
コンソールでは、ビルドプロジェクトの作成時や更新時に CodeBuild サービスロールも作成できます。デフォルトでは、ロールはそのビルドプロジェクトでのみ使用できます。コンソールでは、このサービスロールを別のビルドプロジェクトと関連付けると、この別のビルドプロジェクトで使用できるようにロールが更新されます。サービスロールは最大 10 個のビルドプロジェクトで使用できます。

1. [**Buildspec**] で、次のいずれかを行います。
   + [**Use a buildspec file**] (ビルド仕様ファイルの使用) を選択して、ソースコードのルートディレクトリの buildspec.yml を使用します。
   + [**ビルドコマンドの挿入**] を選択して、コンソールを使用してビルドコマンドを挿入します。

   詳細については、「[ビルド仕様 (buildspec) に関するリファレンス](build-spec-ref.md)」を参照してください。

1. [**アーティファクト**] で、次のようにします。  
**タイプ**  
次のいずれかを選択します。  
   + ビルド出力アーティファクトを作成しない場合は、[**No artifacts (アーティファクトなし)**] を選択します。
   + ビルド出力を S3 バケットに保存する場合は、[**Amazon S3**] を選択して次のいずれかの操作を行います。
     + ビルド出力 ZIP ファイルまたはフォルダにプロジェクト名を使用する場合は、[**Name (名前)**] を空白のままにします。それ以外の場合は、名前を入力します。デフォルトでは、アーティファクト名はプロジェクト名です。別の名前を使用する場合は、アーティファクト名ボックスに名前を入力します。ZIP ファイルを出力する場合は、zip 拡張子を含めます。
     + [**Bucket name (バケット名)**] で、出力バケットの名前を選択します。
     + この手順の前の方で [**ビルドコマンドの挿入**] を選択した場合は、[**出力ファイル**] に、ビルド出力 ZIP ファイルまたはフォルダに格納するビルドのファイルの場所を入力します。複数の場所の場合は、各場所をコンマで区切ります (例: `appspec.yml, target/my-app.jar`)。詳細については、「`files`」で [buildspec の構文](build-spec-ref.md#build-spec-ref-syntax) の説明を参照してください。  
**追加設定**  
[**Additional configuration (追加設定)**] オプションを展開し、必要に応じてオプションを設定します。

1. [**Create build project (ビルドプロジェクトの作成)**] を選択します。[**確認**] ページで、[**ビルドの開始**] を選択してビルドを実行します。

## ステップ 2: ウェブフックが有効になっていることを確認
<a name="verification-checks"></a>

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

1. ナビゲーションペインで、[**Build projects**] を選択します。

1. 次のいずれかを行ってください。
   + 確認する Webhook を持つビルドプロジェクトのリンクを選択し、[**ビルドの詳細**] を選択します。
   + 確認する Webhook を持つビルドプロジェクトの横にあるラジオボタンを選択して、[**View details**] (詳細を表示) を選択後、[**ビルドの詳細**] タブを選択します。

1. [**プライマリソース Webhook イベント**] で、[**Webhook**] の URL リンクを選択します。

1. GitHub リポジトリの [**設定**] ページの [**ウェブフック**] で、[**プルリクエスト**] と [**プッシュ**] が選択されていることを確認します。

1. GitHub プロファイル設定の**「個人設定**」、**「アプリケーション****」、「認可された OAuth アプリ**」で、アプリケーションが選択した AWS リージョンへのアクセスを許可されていることを確認できます。

# チュートリアル: 証明書ストレージに S3 を使用した CodeBuild での Fastlane による Apple コード署名
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) は、iOS および Android アプリのベータデプロイとリリースを自動化する際によく使用されているオープンソース自動化ツールです。スクリーンショットの生成、コード署名の処理、アプリケーションのリリースなど、面倒なタスクがすべて処理されます。

## 前提条件
<a name="sample-fastlane-prerequisites"></a>

このチュートリアルを完了するには、まず以下をセットアップする必要があります。
+  AWS アカウント
+ [Apple 開発者アカウント](https://developer.apple.com/)
+ 証明書を保存するための S3 バケット
+ プロジェクトにインストールされた fastlane - fastlane のインストールに関する[ガイド](https://docs.fastlane.tools/getting-started/ios/setup/)

## ステップ 1: ローカルマシンで S3 を使用して Fastlane Match を設定する
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) は [Fastlane ツール](https://fastlane.tools/)の 1 つであり、ローカル開発環境と CodeBuild の両方でコード署名をシームレスに設定できます。Fastlane Match は、すべてのコード署名証明書とプロビジョニングプロファイルを Git リポジトリ/S3 バケット/Google クラウドストレージに保存し、必要に応じて必要な証明書とプロファイルをダウンロードおよびインストールします。

この例では、ストレージに Amazon S3 バケットをセットアップして使用します。

****

1. プロジェクトで一致を初期化します。

   ```
   fastlane match init
   ```

1. プロンプトが表示されたら、ストレージモードとして S3 を選択します。

1. S3 を使用するよう `*Matchfile*` を更新します。

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## ステップ 2: Fastfile をセットアップする
<a name="sample-fastlane-S3-fastfile"></a>

次のレーンで `Fastfile` を作成または更新します。

CodeBuild では、アプリをビルドして署名するたびに Fastlane Match を実行する必要があります。これを行うには、アプリを構築するレーンに `match` アクションを追加するのが最も簡単です。

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**注記**  
一致アクションが正しく機能するよう、`Fastfile` の `before_all ` セクションに `setup_ci` を追加してください。これにより、適切なアクセス許可を持つ一時的な Fastlane キーチェーンが使用されます。これを使用しないと、ビルドが失敗したり、一貫性のない結果が表示されたりすることがあります。



## ステップ 3: `fastlane match` コマンドを実行して、それぞれの証明書とプロファイルを生成する
<a name="sample-fastlane-S3-certificates"></a>

指定されたタイプ (開発、アプリストア、アドホック、エンタープライズ) の fastlane match コマンドは、証明書とプロファイルを生成します (リモートストアにない場合)。証明書とプロファイルは、fastlane によって S3 に保存されます。

```
bundle exec fastlane match appstore
```

コマンドの実行がインタラクティブになり、証明書を復号するためのパスフレーズを設定するよう fastlane により求められます。

## ステップ 4: プロジェクトのアプリケーションファイルを作成する
<a name="sample-fastlane-S3-appfile"></a>

プロジェクトに応じてアプリケーションファイルを作成または追加します。

****

1. プロジェクトのビルド要件に基づいて、[Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile)、[Appfile](http://docs.fastlane.tools/advanced/Appfile/)、[Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile)、[Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) を作成または追加します。

1. 変更内容をリモートリポジトリにコミットする

## ステップ 5: Secrets Manager で環境変数を作成する
<a name="sample-fastlane-S3-secrets"></a>

fastlane セッション Cookie と一致するパスフレーズを保存するための 2 つのシークレットを作成します。Secrets Manager でシークレットを作成する方法の詳細については、「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。

****

1. 次のように fastlane セッション Cookie にアクセスします。

   1. シークレットキー - `FASTLANE_SESSION`

   1. シークレット値 - ローカルマシンで次のコマンドを実行して生成されたセッション Cookie。
**注記**  
この値は、ローカルファイル `~/.fastlane/spaceship/my_appleid_username/cookie` での認証後に使用できます。

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Fastlane Match パスフレーズ - Fastlane Match が S3 バケットに保存されている証明書とプロファイルを復号できるようにするには、Match セットアップのステップで設定した暗号化パスフレーズを CodeBuild プロジェクトの環境変数に追加する必要があります。

   1. シークレットキー - `MATCH_PASSWORD`

   1. シークレット値 - *<証明書を復号するためのパスフレーズと一致>*。パスフレーズは、ステップ 3 で証明書を生成するときに設定されます。

**注記**  
Secrets Manager で上記のシークレットを作成するときは、必ずシークレット名にプレフィックス `/CodeBuild/` を付けてください。

## ステップ 6: コンピューティングフリートを作成する
<a name="sample-fastlane-S3-fleet"></a>

プロジェクトのコンピューティングフリートを作成します。

****

1. コンソールで CodeBuild に移動し、新しいコンピューティングフリートを作成します。

1. オペレーティングシステムとして「macOS」を選択し、適切なコンピューティングタイプとイメージを選択します。

## ステップ 7: CodeBuild でプロジェクトを作成する
<a name="sample-fastlane-S3-project"></a>

CodeBuild でプロジェクトを作成します。



****

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

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。

1. ソースプロバイダー (GitHub、CodeCommit など) をセットアップします。これは、証明書リポジトリではなく iOS プロジェクトソースリポジトリです。

1.  [**環境**] で以下の操作を行います。
   + [**リザーブドキャパシティ**] を選択します。
   + [**フリート**] で、上記で作成したフリートを選択します。
   + CodeBuild で自動作成するサービスロールの名前を指定します。
   + 以下の環境変数を指定します。
     + 名前: `MATCH_PASSWORD`、値: *<secrets arn>*、タイプ: Secrets Manager (MATCH\$1PASSWORD のステップ 5 で作成されたシークレット ARN)
     + 名前: `FASTLANE_SESSION`、値: *<secrets arn>*、タイプ: Secrets Manager (FASTLANE\$1SESSION のステップ 5 で作成されたシークレット ARN)

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

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## ステップ 8: IAM ロールを設定する
<a name="sample-fastlane-S3-role"></a>

プロジェクトが作成されたら、CodeBuild プロジェクトのサービスロールに、証明書を含む S3 バケットにアクセスするアクセス許可があることを確認します。以下のポリシーをロールに追加します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## ステップ 9: ビルドを実行する
<a name="sample-fastlane-S3-run"></a>

ビルドを実行します。CodeBuild でビルドステータスとログを確認できます。

ジョブが完了すると、ジョブのログを表示できるようになります。

## トラブルシューティング
<a name="sample-fastlane-S3-troubleshooting"></a>
+ 証明書の取得で問題が発生した場合は、S3 にアクセスできるように IAM アクセス許可が正しく設定されていることを確認します。
+ 証明書の復号で問題が発生した場合は、MATCH\$1PASSWORD 環境変数で正しいパスフレーズを設定してください。
+ コード署名の問題については、Apple 開発者アカウントに必要な証明書とプロファイルがあり、Xcode プロジェクトのバンドル識別子がプロビジョニングプロファイルのものと一致していることを確認します。

## セキュリティに関する考慮事項
<a name="sample-fastlane-considerations"></a>

このチュートリアルのセキュリティに関する考慮事項を次に示します。
+ 保管データ暗号化など、適切なセキュリティ設定が S3 バケットにあることを確認します。特に、バケットにパブリックアクセスがないことを確認し、アクセスが必要な CodeBuild とシステムのみにアクセスを制限します。
+ MATCH\$1PASSWORD や FASTLANE\$1SESSION などの機密情報を保存 AWS Secrets Manager するために を使用することを検討してください。

このサンプルでは、証明書ストレージに Amazon S3 を使用して CodeBuild の Fastlane で iOS コード署名をセットアップします。場合によっては、具体的なプロジェクト要件と CodeBuild 環境に応じて、いくつかのステップを調整する必要があります。このアプローチでは、 AWS サービスを活用して、 AWS エコシステム内のセキュリティと統合を強化します。

# チュートリアル: 証明書ストレージに GitHub を使用した CodeBuild での Fastlane による Apple コード署名
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) は、iOS および Android アプリのベータデプロイとリリースを自動化する際によく使用されているオープンソース自動化ツールです。スクリーンショットの生成、コード署名の処理、アプリケーションのリリースなど、面倒なタスクがすべて処理されます。

このサンプルでは、証明書とプロビジョニングプロファイルのストレージとして GitHub を使用し、Mac フリートで実行されている CodeBuild プロジェクトで Fastlane を使用して Apple コード署名をセットアップする方法を示します。

## 前提条件
<a name="sample-fastlane-github-prerequisites"></a>

このチュートリアルを完了するには、まず以下をセットアップする必要があります。
+  AWS アカウント
+ [Apple 開発者アカウント](https://developer.apple.com/)
+ 証明書を保存するプライベート GitHub リポジトリ
+ プロジェクトにインストールされた fastlane - fastlane のインストールに関する[ガイド](https://docs.fastlane.tools/getting-started/ios/setup/)

## ステップ 1: ローカルマシンで GitHub を使用して Fastlane Match を設定する
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) は [Fastlane ツール](https://fastlane.tools/)の 1 つであり、ローカル開発環境と CodeBuild の両方でコード署名をシームレスに設定できます。Fastlane Match は、すべてのコード署名証明書とプロビジョニングプロファイルを Git リポジトリ/S3 バケット/Google クラウドストレージに保存し、必要に応じて必要な証明書とプロファイルをダウンロードおよびインストールします。

この例では、ストレージに Git リポジトリをセットアップして使用します。

****

1. プロジェクトで一致を初期化します。

   ```
   fastlane match init
   ```

1. プロンプトが表示されたら、ストレージモードとして GitHub を選択します。

1. GitHub を使用するよう `*Matchfile*` を更新します。

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**注記**  
fastlane が正常に認証とクローン作成を行えるよう、必ず Git リポジトリの HTTPS URL を入力してください。そうしない場合、一致を使用しようとすると認証エラーが表示されることがあります。

## ステップ 2: Fastfile をセットアップする
<a name="sample-fastlane-github-fastfile"></a>

次のレーンで `Fastfile` を作成または更新します。

CodeBuild では、アプリをビルドして署名するたびに Fastlane Match を実行する必要があります。これを行うには、アプリを構築するレーンに `match` アクションを追加するのが最も簡単です。

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**注記**  
一致アクションが正しく機能するよう、`Fastfile` の `before_all ` セクションに `setup_ci` を追加してください。これにより、適切なアクセス許可を持つ一時的な Fastlane キーチェーンが使用されます。これを使用しないと、ビルドが失敗したり、一貫性のない結果が表示されたりすることがあります。

## ステップ 3: `fastlane match` コマンドを実行して、それぞれの証明書とプロファイルを生成する
<a name="sample-fastlane-github-certificates"></a>

指定されたタイプ (開発、アプリストア、アドホック、エンタープライズ) の fastlane match コマンドは、証明書とプロファイルを生成します (リモートストアにない場合)。証明書とプロファイルは、fastlane によって GitHub に保存されます。

```
bundle exec fastlane match appstore
```

コマンドの実行がインタラクティブになり、証明書を復号するためのパスフレーズを設定するよう fastlane により求められます。

## ステップ 4: プロジェクトのアプリケーションファイルを作成する
<a name="sample-fastlane-github-appfile"></a>

プロジェクトに応じてアプリケーションファイルを作成または追加します。

****

1. プロジェクトのビルド要件に基づいて、[Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile)、[Appfile](http://docs.fastlane.tools/advanced/Appfile/)、[Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile)、[Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) を作成または追加します。

1. 変更内容をリモートリポジトリにコミットします。

## ステップ 5: Secrets Manager で環境変数を作成する
<a name="sample-fastlane-github-secrets"></a>

fastlane セッション Cookie と一致するパスフレーズを保存するための 3 つのシークレットを作成します。Secrets Manager でシークレットを作成する方法の詳細については、「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。

****

1. 次のように fastlane セッション Cookie にアクセスします。

   1. シークレットキー - `FASTLANE_SESSION`

   1. シークレット値 - ローカルマシンで次のコマンドを実行して生成されたセッション Cookie。
**注記**  
この値は、ローカルファイル `~/.fastlane/spaceship/my_appleid_username/cookie` での認証後に使用できます。

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Fastlane Match パスフレーズ - Fastlane Match が Git リポジトリに保存されている証明書とプロファイルを復号できるようにするには、Match セットアップのステップで設定した暗号化パスフレーズを CodeBuild プロジェクトの環境変数に追加する必要があります。

   1. シークレットキー - `MATCH_PASSWORD`

   1. シークレット値 - `<match passphrase to decrypt certificates>`。パスフレーズは、ステップ 3 で証明書を生成するときに設定されます。

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION` - *match* の基本認可を設定します。

   1. シークレットキー: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. シークレット値 - 値は、ユーザー名と個人用アクセストークン (PAT) の base64 でエンコードされた文字列を `username:password` 形式で指定する必要があります。次のコマンドを使用して生成できます。

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      GitHub コンソールの **[Your Proﬁle] > [Settings] > [Developers Settings] > [Personal Access Token]** で PAT を生成できます。詳細については、ガイド ([https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)) を参照してください。

**注記**  
Secrets Manager で上記のシークレットを作成するときは、必ずシークレット名にプレフィックス `/CodeBuild/` を付けてください。

## ステップ 6: コンピューティングフリートを作成する
<a name="sample-fastlane-github-fleet"></a>

プロジェクトのコンピューティングフリートを作成します。

****

1. コンソールで CodeBuild に移動し、新しいコンピューティングフリートを作成します。

1. オペレーティングシステムとして `macOS` を選択し、適切なコンピューティングタイプとイメージを選択します。

## ステップ 7: CodeBuild でプロジェクトを作成する
<a name="sample-fastlane-github-project"></a>

CodeBuild でプロジェクトを作成します。

****

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

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。

1. ソースプロバイダー (GitHub、CodeCommit など) をセットアップします。これは、証明書リポジトリではなく iOS プロジェクトソースリポジトリです。

1.  [**環境**] で以下の操作を行います。
   + [**リザーブドキャパシティ**] を選択します。
   + [**フリート**] で、上記で作成したフリートを選択します。
   + CodeBuild で自動作成するサービスロールの名前を指定します。
   + 以下の環境変数を指定します。
     + 名前: `MATCH_PASSWORD`、値: *<secrets arn>*、タイプ: Secrets Manager (MATCH\$1PASSWORD のステップ 5 で作成されたシークレット ARN)
     + 名前: `FASTLANE_SESSION`、値: *<secrets arn>*、タイプ: Secrets Manager (FASTLANE\$1SESSION のステップ 5 で作成されたシークレット ARN)
     + 名前: `MATCH_GIT_BASIC_AUTHORIZATION`、値: *<secrets ARN>*、タイプ: Secrets Manager のシークレット ARN (`MATCH_GIT_BASIC_AUTHORIZATION` のステップ 5 で作成)

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

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## ステップ 8: ビルドを実行する
<a name="sample-fastlane-github-run"></a>

ビルドを実行します。CodeBuild でビルドステータスとログを確認できます。

ジョブが完了すると、ジョブのログを表示できるようになります。

## トラブルシューティング
<a name="sample-fastlane-github-troubleshooting"></a>
+ GitHub リポジトリにアクセスする際に問題が発生した場合は、個人用アクセストークンと MATCH\$1GIT\$1BASIC\$1AUTHORIZATION 環境変数を再確認してください。
+ 証明書の復号で問題が発生した場合は、MATCH\$1PASSWORD 環境変数で正しいパスフレーズを設定してください。
+ コード署名の問題については、Apple 開発者アカウントに必要な証明書とプロファイルがあり、Xcode プロジェクトのバンドル識別子がプロビジョニングプロファイルのものと一致していることを確認します。

## セキュリティに関する考慮事項
<a name="sample-fastlane-github-considerations"></a>

このチュートリアルのセキュリティに関する考慮事項を次に示します。
+ 証明書の GitHub リポジトリを秘密に保ち、定期的にアクセスを監査します。
+ MATCH\$1PASSWORD や FASTLANE\$1SESSION などの機密情報を保存 AWS Secrets Manager するために を使用することを検討してください。

このサンプルでは、証明書ストレージに GitHub を使用して CodeBuild の Fastlane で iOS コード署名をセットアップします。場合によっては、具体的なプロジェクト要件と CodeBuild 環境に応じて、いくつかのステップを調整する必要があります。このアプローチでは、 AWS サービスを活用して、 AWS エコシステム内のセキュリティと統合を強化します。

# セマンティックバージョニングを使用してビルド時にアーティファクト名を設定
<a name="sample-buildspec-artifact-naming"></a>

 このサンプルには、ビルド時に作成するアーティファクト名の指定方法を示す buildspec ファイルのサンプルが含まれています。buildspec ファイルで指定される名前には、シェルコマンドと環境変数を組み込んで、一意の名前にすることができます。buildspec で指定した名前は、プロジェクトの作成時にコンソールに入力した名前よりも優先されます。

 複数回ビルドする場合、buildspec ファイルで指定されたアーティファクト名を使用すると、出力アーティファクトファイル名が一意であることが保証されます。たとえば、ビルド時にアーティファクト名に日付とタイムスタンプを挿入できます。

コンソールで入力したアーティファクト名を buildspec ファイルの名前で上書きする場合は、次のようにします。

1.  ビルドプロジェクトを設定して、アーティファクト名を buildspec ファイル内の名前で上書きします。
   +  コンソールを使用してビルドプロジェクトを作成する場合は、[**Enable semantic versioning (セマンティックバージョニングを有効にする)**] を選択します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」を参照してください。
   +  AWS CLI を使用する場合は、`overrideArtifactName` に渡された JSON 形式のファイルで `create-project` を true に設定します。詳細については、「[ビルドプロジェクトの作成 (AWS CLI)](create-project.md#create-project-cli)」を参照してください。
   +  AWS CodeBuild API を使用する場合は、プロジェクトが作成または更新されたとき、あるいはビルドが開始されたときに、`overrideArtifactName` オブジェクトに `ProjectArtifacts` フラグを設定します。

1.  buildspec ファイルに名前を指定します 次のサンプルの buildspec ファイルを参考として使用してください。

 この Linux の例は、ビルドが作成された日付を含むアーティファクト名を指定する方法を示しています。

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$(date +%Y-%m-%d)
```

 この Linux の例は、CodeBuild 環境変数を使用するアーティファクト名を指定する方法を示しています。詳細については、「[ビルド環境の環境変数](build-env-ref-env-vars.md)」を参照してください。

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$AWS_REGION
```

 この Windows の例は、ビルドが作成された日時を含むアーティファクト名を指定する方法を示しています。

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$(Get-Date -UFormat "%Y%m%d-%H%M%S")
```

 この Windows の例は、buildspec ファイルで宣言された変数と CodeBuild 環境変数を使用するアーティファクト名を指定する方法を示しています。詳細については、「[ビルド環境の環境変数](build-env-ref-env-vars.md)」を参照してください。

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$Env:AWS_REGION
```

 詳細については、「[CodeBuild のビルド仕様に関するリファレンス](build-spec-ref.md)」を参照してください。