概要
【初心者向け】AWS Code シリーズ徹底入門 - ③ AWS CodeBuild 編 です。
本記事では、AWS CodeBuild の機能について、マネジメントコンソールを実際に触りながら整理していきます。
機能一覧
ビルドプロジェクト
実行基盤の設定や定義ファイルなど、ソースコードの ビルド(コンパイル)/テスト実行/ソフトウェアパッケージの作成に必要な情報を定義するものです。
※設定項目については後述します。

レポートグループ
ビルドプロジェクトにてレポートを作成した場合に、そのレポートを解析しレビューを提供してくれる機能です。

解析するレポートの形式は以下に対応しています。
- Cucumber JSON (.json)
- JUnit XML (.xml)
- NUnit XML (.xml)
- NUnit3 XML (.xml)
- TestNG XML (.xml)
- Visual Studio TRX (.trx)
- Visual Studio TRX XML (.xml)
レポートグループの使用方法は以下 2 つのどちらでも可能です。
- レポートグループは事前に作成した上で、後述する定義ファイル(
buildspec.yml) で指定する - レポートグループは事前に作成せず、後述する定義ファイル(
buildspec.yml) で指定する
※この場合は自動でレポートグループが作成されます
ちなみに、レポートは テスト と コードカバレッジ に対応しています。

- レポートを作成する場合は、CodeBuildのサービスリンクロールに権限を付与する必要があります
コンピュートフリート
CodeBuildにおいて、ビルドが開始されたときのフローは以下のとおりです。
- ビルドプロジェクトで設定した構成に従いコンピュートリソースがプロビジョニングされる
- そこで定義ファイル(
buildspec.yml)に従ってビルド処理が実行さる - ビルドが終了するとプロビジョニングされたコンピュートリソースは破棄される
つまり、ビルド実行にコンピュートリソースの起動時間がかかります。
ビルド実行時間を少しでも削減したいといったときに本機能が役に立ちます。
本機能は、ビルド実行コンピュートリソースを常時起動させるものです。
コンピュートフリートを作成した時点から、ビルド実行コンピュートリソースが起動され続けることになります。
後述しますが、作成後はビルドプロジェクトの設定項目にて指定し、利用することになります。


- コンピュートリソースが常時起動しっぱなしになるので、その分コストが発生します
ビルドプロジェクト設定項目
Project configuration
Project type
プロジェクトタイプには以下 2 つから選択可能です。
- Default project
- Runner project
特出すべきは Runner project で、こちらは、サポートされている CI/CD ツール (e.g. GitHub Actions 等) の runner が動作するためのコンピューティングリソースのみを提供するタイプとなります。
-
runnerとは、実際にビルドやテストを実行するエージェントのことです - GitLab に内容は絞られていますが、わかりやすい 参考記事 を掲載します
Additional configuration
それぞれの設定項目の内容は以下の通りです。
- Public build acess: ビルドプロジェクトの結果やログ等を外部公開する項目
- Build budge: ビルドプロジェクトのステータスをバッジで確認できるようになる
- Enable concurrent build limit: ビルドプロジェクトでのビルド同時実行制限する項目
Source
-
Project configuration の
Project typeにてDefault projectと指定した場合のみ有効
実際に「ビルドするソースコード」や「テストコード」、「定義ファイル(buildspec.yml)」が格納されている場所を定義します。
ビルドプロジェクトは、本項目で指定した Source からコードを取得し、定義ファイルに従い処理を実行します。
- 定義ファイル(
buildspec.yml) に関しては、Sourceになくても Buildspec セクションで直接定義することは可能です
現在、Source としてサポートされているものは以下の通りです。

- 指定する
Sourceに応じて設定項目が若干異なりますので、本記事では割愛します
Additional configuration
- こちらも、指定する
Sourceに応じて設定項目が若干異なりますので、本記事では割愛します
Runner
-
Project configuration の
Project typeにてRunner projectと指定した場合のみ有効
ビルドプロジェクトのコンピューティングリソースを利用する側の CI/CD プロバイダを設定します。

- 指定する
Runner providerに応じて設定項目が若干異なりますので、本記事では割愛します
現在、Provider としてサポートされているのは以下の通りです。

ちなみに、Provider と接続するための認証情報は、Connections というところから作成する必要があります。

Environment
こちら で触れた通り、コンピュートフリートを利用する際は Reserved capacity とします。

ビルドを実行する環境の基盤としては、EC2 もしくは Lambda から選択が可能です。
image の選択がありますが、実際の処理は選択した基盤 (EC2 or Lambda) 上のコンテナで実行されます。その際のコンテナイメージを設定する箇所となります。
image は、AWS が CodeBuild 用に用意したイメージからか、ECR やその他外部リポジトリ で管理しているカスタムイメージから選択が可能です。

-
EC2の場合は、コンテナではなくインスタンス上で直接実行する設定も可能です
サービスリンクロールは、ビルドプロジェクト(つまり CodeBuild) が他のAWSサービスへのAPIコールを実施する際に利用する IAMロールです。

Additional configuration
実行基盤(EC2 or Lambda)によって設定項目が変わるため割愛しますが、ここでは実行基盤のスペックや、EC2 の場合は タイムアウトや EFS 連携に関して設定することが可能です。
デフォルトでは、実行基盤は VPC 外で実行されますが、EC2 (On-demanad) の場合、指定すれば VPC 内で起動することが可能となります。ビルド処理等で VPC 内リソースと通信する必要がある場合に利用します。
Buildspec
Source から取得したコードに対して、どういった処理を実施するかを定義する項目になります。
定義ファイル(buildspec.yml) の構文は決まっています。詳細は以下リンクを参考にしてください。
Project type が Default project の場合
指定方法は以下 2 つのどちらかとなります。
Insert build commandsUse a buildspec file
Insert build commands の場合は、ビルドプロジェクトに直接処理内容を記述する方法です。

Use a buildspec file の場合は、Source のルートディレクトリに格納されている 定義ファイル(buildspec.yml) を読み込み実行します。
Buildspec name を省略すると、上述した通り、Source のルートディレクトリに格納されている 定義ファイル(buildspec.yml) を読み込み実行します。そのため、Source 側で buildspec.yml というファイル名でルートディレクトリに格納しておく必要があります。
- もちろん、
Sourceに合わせる形で、Buildspec nameを指定することは可能です
Project type が Runner project の場合
Runner project はあくまで runner の実行環境を提供するだけであり、デフォルトでは、Provider 側の定義を使用するようになっています。

ただし、定義ファイル(buildspec.yml) 構文の insert / pre_build / post_build に関しては上書くことが可能です。

Batch configuration
-
Project configuration の
Project typeにてDefault projectと指定した場合のみ有効
- マネジメントコンソールで設定する場合は、ビルドプロジェクトで実行する全てのビルド処理が対象となります
- ビルドプロジェクト全体で有効にしたくない場合は、
定義ファイル(buildspec.yml)で指定します
Artifacts
ビルド処理を実行した際に生成された成果物 (ソースコードの実行ファイル等) の格納先を指定します。
S3 のみ指定可能です。

- マネジメントコンソールで設定する場合は、ビルドプロジェクトで実行する全てのビルド処理で生成される成果物が対象となります
- ビルドプロジェクト全体で設定したくない場合は、
定義ファイル(buildspec.yml)で指定します - ちなみに
定義ファイル(buildspec.yml)にて docker イメージを生成し、ECR等のリポジトリ に push することも可能です
Logs
ビルドプロジェクトのビルド実行ログを出力するための設定項目です。
CloudWatch Logs と s3 への出力が可能です。

トリガー
ただしこの設定は、以下の画像の通り、定期実行しか設定できません。

-
Sourceの変更をトリガーにしてビルドプロジェクトを実行するには別途設定が必要です
※厳密には、Sourceが GitHub 等のサードパーティツールの場合は、ビルドプロジェクト内のWebhook設定があるので別途設定は不要となります -
Webhookを使用しない場合は、原則CodePipelineの設定が必要となります -
Sourceが AWS サービスの場合は、EventBridgeでも可能です
通知設定
ビルドプロジェクトに対する特定のイベントが発生した際に、以下 3 つのターゲットへ通知を送信することができます。
まとめ(全体像)
おわりに
次回は AWS CodeDeploy 編 です!
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。












