AWS CodeBuild
ソースコードのコンパイル、テスト実行、デプロイパッケージの作成を完全マネージドで行うクラウドベースの CI ビルドサービス
概要
AWS CodeBuild は、ソースコードのビルド、テスト、パッケージングを実行するフルマネージドの継続的インテグレーション (CI) サービスです。ビルドサーバーの管理が不要で、ビルドごとに独立したコンテナ環境が起動し、並列ビルドも自動的にスケールします。buildspec.yml でビルド手順を定義し、CodeCommit、GitHub、Bitbucket、S3 からソースを取得できます。Docker イメージのビルド、Lambda 関数のパッケージング、静的サイトの生成など、あらゆるビルドタスクに対応します。
buildspec.yml のフェーズ設計とキャッシュ戦略
CodeBuild のビルドプロセスは buildspec.yml の 4 つのフェーズで構成されます。install フェーズでランタイムやツールをセットアップし、pre_build でテスト準備や認証処理 (ECR へのログインなど)、build でコンパイルやテスト実行、post_build でアーティファクトの生成やデプロイ通知を行います。ビルド時間の短縮にはキャッシュ戦略が重要で、S3 キャッシュは依存パッケージ (node_modules、.m2 など) をビルド間で再利用し、ローカルキャッシュは Docker レイヤーキャッシュを保持します。実務では S3 キャッシュとローカルキャッシュを併用し、初回ビルドは S3 から復元、同一ビルドホストでの連続ビルドはローカルキャッシュで高速化する構成が効果的です。GitHub Actions がリポジトリ密結合でマーケットプレイスのアクションが豊富なのに対し、CodeBuild は VPC 内のリソース (RDS、ElastiCache) にビルド環境から直接アクセスでき、IAM ロールによる細かいアクセス制御が可能な点で AWS ネイティブの CI に強みがあります。
ビルド環境とインスタンスサイズの選択
CodeBuild はビルドごとに独立したコンテナ環境を起動し、並列ビルドも自動的にスケールします。ビルド環境のイメージは AWS が提供するマネージドイメージ (Ubuntu、Amazon Linux 2) と、ECR に登録したカスタムイメージから選択できます。マネージドイメージには主要な言語ランタイム (Node.js、Python、Java、Go、.NET) がプリインストールされており、install フェーズでのセットアップ時間を短縮できます。インスタンスサイズは small (3 GB メモリ)、medium (7 GB)、large (15 GB)、xlarge (70 GB)、2xlarge (145 GB) の 5 段階で、ビルドの負荷に応じて選択します。料金は分単位の従量課金で、small が 1 分あたり約 0.005 ドル、large が約 0.02 ドルです。Docker イメージのビルドでは特権モード (privileged mode) を有効にして Docker-in-Docker で実行し、ECR に push する構成が一般的です。CI/CD の関連書籍 (Amazon) で体系的に学べます。
CodePipeline 連携とモノレポ対応
CodeBuild の代表的な活用は、CodePipeline と組み合わせた AWS ネイティブの CI/CD パイプラインです。GitHub への push をトリガーに CodeBuild でビルド・テストを実行し、成功したら CodeDeploy で ECS や Lambda にデプロイする構成が典型的です。モノレポ構成では、buildspec.yml の batch ビルド機能を使って複数のビルドを並列実行できます。build-list や build-graph で依存関係を定義し、共通ライブラリのビルド完了後にアプリケーションのビルドを開始するといった制御が可能です。注意点として、CodeBuild のデフォルトタイムアウトは 60 分で、大規模なモノレポのビルドやインテグレーションテストでは不足する場合があります。最大 8 時間まで延長可能ですが、ビルド時間が長い場合はビルドの並列化やキャッシュの最適化を先に検討すべきです。レポート機能を有効にすると、テスト結果やコードカバレッジを CodeBuild コンソールで可視化でき、品質の推移を追跡できます。