目次
AWS CodeBuild 完全ガイド v2.0 (2026 年最新対応)
フルマネージドサーバーレス CI ビルドサービス実装・最適化・高度な活用
概要
AWS CodeBuild は 「フルマネージドのサーバーレス CI(継続的インテグレーション)ビルドサービス。ソースコードのコンパイル・テスト実行・Docker イメージ作成・アーティファクト生成を専用のマネージドビルド環境で実行し、インフラ管理不要・使った分だけ課金」 という特徴をもちます。buildspec.yml でビルド手順を定義し、CodePipeline・GitHub Actions・CodeStar と統合して CI/CD の自動化を加速させます。
2025-2026 の最新機能:
- Reserved Capacity Fleet:事前に容量確保して待機時間ゼロ・コスト最適化
- Lambda Compute:低レイテンシースタートアップ(秒単位)
- Batch Builds:複数プロジェクトを効率的に実行
- Custom Image with Layer Caching:ビルド高速化
このサービスを選ぶ理由(なぜ CodeBuild なのか)
| 観点 | 特徴 | 利点 |
|---|---|---|
| Jenkins 運用排除 | サーバーレス・スケール自動 | 管理コスト・パッチ・可用性ゼロ |
| AWS ネイティブ統合 | IAM・ECR・S3・Secrets Manager 直結 | 認証情報不要・セキュア |
| VPC 内ビルド | RDS・ElastiCache へ接続可能 | 統合テスト・プライベートリソース対応 |
| 並列ビルド自動スケール | 使った分だけ課金 | 予測可能なコスト |
| テストレポート標準化 | JUnit・Coverage XML 可視化 | CodePipeline で自動フェイル |
| Reserved Capacity | 待機時間ゼロ・コスト固定 | 高頻度ビルドで ROI 最大化 |
1. 課題と特徴
CodeBuild が解決する課題
❌ 課題:Jenkins サーバー管理の継続的コスト
→ EC2 instance 立ち上げ → パッチ・OS update → スケーリング設定
→ 障害対応・バックアップ・ストレージ管理
→ 月額$500~$5,000 運用コスト
✅ 解決:CodeBuild のサーバーレス実行
→ buildspec.yml 定義 → 自動スケール → 使った時間分課金
→ インフラ管理ゼロ → 月額$20~$100 に低減
コアの特徴
| 特徴 | 説明 |
|---|---|
| フルマネージド | サーバー・インフラ管理不要。AWS が自動スケール |
| buildspec.yml | YAML 形式でビルド手順を定義(git で版管理可能) |
| 複数ランタイム | Python 3.11・Node.js 20・Java 21 等、AWS 提供イメージ |
| カスタム Docker | ECR の任意イメージをビルド環境として利用 |
| VPC 統合 | プライベートサブネット内でプライベートリソース接続 |
| Reserved Capacity | 事前容量確保で待機時間ゼロ・コスト固定化 |
| Lambda Compute | 秒単位スタートアップ(小規模ビルド向け) |
| テストレポート | JUnit・Coverage XML を CodePipeline に統合 |
| キャッシング | node_modules・Maven cache で再ビルド高速化 |
| 並列実行 | Build Batch で複数プロジェクト同時実行 |
2. アーキテクチャ(Mermaid 図 1)
graph LR
A["Developer<br/>Push to GitHub"] -->|Trigger| B["CodeBuild<br/>Project Definition"]
B -->|Load buildspec.yml| C["Build Environment<br/>Docker Container"]
subgraph BuildEnv["Build Environment (EC2/Lambda)"]
C1["Runtime<br/>(Python/Node/Java)"]
C2["Dependencies<br/>(npm/pip/maven)"]
C3["Secrets<br/>(Secrets Manager)"]
C -->|Execute phases| C1
C1 -->|Install| C2
C2 -->|Use| C3
end
C -->|Compile/Test| D["Output Artifacts"]
D -->|Push| E["ECR"]
D -->|Upload| F["S3"]
D -->|Report| G["CloudWatch Logs"]
H["CodePipeline"] -->|Invoke| B
I["VPC (RDS/ElastiCache)"] -->|Network| C
style B fill:#fff3cd
style C fill:#cfe2ff
style D fill:#d1ecf1
style E fill:#d4edda
style F fill:#d4edda
style G fill:#f8f9fa
style H fill:#e8e8ff
3. コアコンポーネント
3.1 buildspec.yml(ビルド定義)
version: 0.2
# グローバル環境変数
env:
# AWS Secrets Manager・Parameter Store から取得
secrets-manager:
DB_PASSWORD: prod/db:password
API_KEY: prod/api:key
# コンソール環境変数・CloudFormation パラメーター
parameter-store:
DOCKER_REGISTRY: /codebuild/docker-registry
# ハードコードされた変数(git に commit しない)
variables:
NODEJS_VERSION: "20"
PYTHON_VERSION: "3.11"
# フェーズ(順序実行)
phases:
# フェーズ 1:依存関係インストール
install:
runtime-versions:
nodejs: 20
python: 3.11
commands:
- echo "Installing dependencies..."
- npm ci # npm install の代わり(package-lock.json 使用・キャッシュ最適)
- pip install -r requirements.txt
# フェーズ 2:ビルド前処理(Lint・単体テスト)
pre_build:
commands:
- echo "Running ESLint..."
- npm run lint
- echo "Running unit tests..."
- npm run test:unit -- --coverage
- echo "Build started on `date`"
# フェーズ 3:ビルド(コンパイル・Docker image 作成)
build:
commands:
- echo "Building application..."
- npm run build
- echo "Building Docker image..."
- 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
- REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/my-app
- IMAGE_TAG=$CODEBUILD_BUILD_NUMBER # ビルド番号でタグ付け
- docker build -t $REPOSITORY_URI:$IMAGE_TAG -t $REPOSITORY_URI:latest .
- docker push $REPOSITORY_URI:$IMAGE_TAG
- docker push $REPOSITORY_URI:latest
- echo "Image pushed to $REPOSITORY_URI:$IMAGE_TAG"
- printf '[{"name":"my-app","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
# フェーズ 4:ビルド後処理(統合テスト・スモークテスト)
post_build:
commands:
- echo "Running integration tests..."
- npm run test:integration || true # 失敗しても continue
- echo "Build completed on `date`"
# テストレポート(CodePipeline・コンソール表示)
reports:
# Jest テストレポート
jest-unit-test:
files:
- test-results/junit-*.xml
file-format: JUNITXML
name: UnitTestReport
# コードカバレッジ
code-coverage:
files:
- coverage/cobertura-coverage.xml
file-format: COBERTURAXML
name: CoverageReport
# セキュリティスキャン(SAST)
sonarqube-scan:
files:
- sonar-report.json
file-format: JSON
name: SASTPReport
# アーティファクト(出力ファイル)
artifacts:
# 成功ビルドのみアーティファクト化
files:
- dist/**/*
- node_modules/**/*
- imagedefinitions.json # ECS デプロイ用
# ディレクトリ構造を保持
discard-paths: no
# ベースディレクトリ指定
base-directory: .
# アーティファクト名
name: BuildArtifacts-$(date +%Y%m%d-%H%M%S)
# セカンダリアーティファクト(複数出力)
secondary-artifacts:
DockerImageDefinitions:
files:
- imagedefinitions.json
name: docker-image-definitions
# ビルド中間生成物のキャッシング(再ビルド高速化)
cache:
paths:
- 'node_modules/**/*' # npm modules
- 'vendor/**/*' # PHP Composer
- '.m2/**/*' # Maven cache
- '.gradle/**/*' # Gradle cache
- 'pip-cache/**/*' # Python pip
# ビルド環境変数(buildspec.yml 内で参照)
variables:
AWS_ACCOUNT_ID: "123456789012"
AWS_DEFAULT_REGION: "us-east-1"
3.2 ビルド環境とコンピュートタイプ
# CodeBuild Project 定義(CloudFormation/CDK)
# EC2 Compute(柔軟・スケール自動)
ComputeType: BUILD_GENERAL1_MEDIUM
OS: AMAZON_LINUX_2
RuntimeVersion: corretto21
Architecture: X86_64 # または ARM_64
# Compute Type 選択肢
BUILD_GENERAL1_SMALL: # $0.005/min → 3GB RAM / 2 vCPU(軽量 Lint/Unit test)
BUILD_GENERAL1_MEDIUM: # $0.01/min → 7GB RAM / 4 vCPU(標準 npm build)
BUILD_GENERAL1_LARGE: # $0.02/min → 15GB RAM / 8 vCPU(Docker build)
BUILD_GENERAL1_XLARGE: # $0.04/min → 70GB RAM / 36 vCPU(大規模マルチアーキテクチャ)
BUILD_GENERAL2_LARGE: # $0.04/min → 16GB RAM / 8 vCPU(GPU option)
BUILD_LAMBDA_1GB: # $0.00002/s → Lambda compute(秒単位・低遅延)
BUILD_LAMBDA_3GB: # $0.00006/s → Lambda compute(より多いメモリ)
# Reserved Capacity Fleet(事前容量確保)
FleetType: PROVISIONED
InstanceProfile:
- ComputeType: BUILD_GENERAL1_MEDIUM
DesiredCapacity: 5 # 5 インスタンス常時待機
MaxCapacity: 10
MinCapacity: 1
OverflowBehavior: ON_DEMAND # 超過時は on-demand 追加
# AWS 提供イメージ(buildspec.yml の runtime-versions で指定)
Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0 # Python 3.11, Node 20, Java 21 等
Image: aws/codebuild/windows-base:2022 # Windows Builder
Image: aws/codebuild/ubuntu-base:22.04 # Ubuntu
3.3 VPC ビルド環境
# プライベート RDS・ElastiCache へアクセス可能にする設定
VpcConfig:
VpcId: vpc-12345678
Subnets:
- subnet-private-1a
- subnet-private-1c
SecurityGroupIds:
- sg-codebuild-rds # RDS に接続許可
# buildspec.yml で RDS に接続
phases:
pre_build:
commands:
# RDS に接続してスキーマ検証
- mysql -h $RDS_ENDPOINT -u $DB_USER -p$DB_PASSWORD -e "SELECT VERSION();"
# ElastiCache に接続してデータ取得
- redis-cli -h $ELASTICACHE_ENDPOINT -p 6379 PING
# 統合テスト実行(DB データ操作)
- npm run test:integration:db
# 注意:NAT Gateway が必要な場合
# → CodeBuild がインターネット上の npm registry へアクセスする場合は
# プライベートサブネット内に NAT Gateway が必須
3.4 カスタム Docker イメージ
# Dockerfile - カスタムビルド環境
FROM amazonlinux:2
RUN yum update -y && \
yum install -y nodejs npm python3 python3-pip git && \
yum install -y mysql-client redis-tools
# カスタムツール
RUN npm install -g @aws-amplify/cli
# ビルドユーザー
RUN useradd -m -u 1000 codebuild
WORKDIR /app
USER codebuild
# ECR に push
aws ecr create-repository --repository-name codebuild-custom-image
aws ecr get-login-password | docker login --username AWS --password-stdin $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com
docker build -t $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/codebuild-custom-image:latest .
docker push $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/codebuild-custom-image:latest
# CodeBuild Project で指定
Image: $ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/codebuild-custom-image:latest
ImagePullCredentialsType: CODEBUILD # IAM で ECR access
4. 主要ユースケース(12+)
4.1 Node.js アプリケーション CI
stages:
- npm ci → npm run lint → npm run test:unit → npm run build
- Docker image push to ECR
- CodePipeline に成功を report
4.2 Python データパイプライン検証
phases:
install:
commands:
- pip install -r requirements-dev.txt
build:
commands:
- pytest tests/ --cov=src --junitxml=test-results.xml
- black --check src/
- pylint src/ || true
4.3 Java Maven プロジェクト
phases:
build:
commands:
- mvn clean verify -DskipITs=false
- mvn site
post_build:
commands:
- 'mvn deploy -DskipTests -s settings.xml'
artifacts:
files:
- 'target/*.jar'
- 'target/site/**/*'
4.4 マルチアーキテクチャ Docker イメージ(ARM64 + x86_64)
# buildspec.yml
phases:
build:
commands:
- docker buildx build --platform linux/amd64,linux/arm64 -t myrepo/myapp:latest --push .
4.5 VPC 内 RDS 統合テスト
phases:
build:
commands:
- mysql -h $RDS_HOST -u $DB_USER -p$DB_PASSWORD < schema.sql
- npm run test:integration
4.6 セキュリティスキャン(SAST + SCA)
phases:
build:
commands:
- sonarqube-scanner -Dsonar.host.url=$SONAR_HOST -Dsonar.login=$SONAR_TOKEN
- npm audit --audit-level=high
- safety check # Python dependency check
4.7 Reserved Capacity Fleet での高頻度ビルド
1 日 500 ビルド、平均 2 分/ビルド
→ Reserved Capacity Fleet: 5 インスタンス MEDIUM
→ コスト:5 x 24h x $0.01/min x 60 = $72/日 (固定)
→ vs On-demand: 500 x 2min x $0.01 = $100/日 + 待機時間ロス
→ 年間 $10,000 削減 + 待機時間ゼロ
4.8 Lambda Compute で小規模 Lint
秒単位課金:Lint のみ = 30 秒
→ Lambdaコンピュート 1GB: 30s x $0.00002/s = $0.0006
→ vs EC2 SMALL: 1 min x $0.005/min = $0.005(8 倍高い)
4.9 キャッシング最適化
cache:
paths:
- 'node_modules/**/*'
# 初回ビルド:依存関係ダウンロード (2 分)
# 2 回目以降:キャッシュから復元 (30 秒)
# → ビルド時間 93% 削減
4.10 Batch Builds(複数プロジェクト並列実行)
Trigger:1 個の codepipeline push
→ CodeBuild Batch
├── Backend unit test (2 min)
├── Frontend unit test (2 min)
├── SAST scan (1 min)
└── Docker build (5 min)
→ すべて並列実行(全体 5 分)
→ vs 順序実行(10 分)
4.11 CloudFormation テンプレート検証
phases:
build:
commands:
- cfn-lint templates/*.yaml
- aws cloudformation validate-template --template-body file://template.yaml
4.12 デプロイ前チェックゲート
phases:
build:
commands:
- npm run build
- npm run test
- 'if [ $? -ne 0 ]; then exit 1; fi' # テスト失敗で stop
# CodePipeline は ビルド失敗を検知 → Deploy ステージをスキップ
5. 設定・操作の具体例
5.1 CLI で CodeBuild Project 作成
# 1. IAM role 作成
aws iam create-role --role-name CodeBuildRole \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "codebuild.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}'
# 2. Policy attach
aws iam put-role-policy --role-name CodeBuildRole \
--policy-name CodeBuildPolicy \
--policy-document file://codebuild-policy.json
# 3. CodeBuild Project 作成
aws codebuild create-project \
--name my-app-build \
--source type=GITHUB,location=https://github.com/myorg/my-repo.git \
--artifacts type=S3,location=my-build-artifacts \
--service-role arn:aws:iam::123456789012:role/CodeBuildRole \
--environment type=LINUX_CONTAINER,image=aws/codebuild/amazonlinux2-x86_64-standard:5.0,computeType=BUILD_GENERAL1_MEDIUM \
--logs-config cloudWatchLogs={status=ENABLED,groupName=/aws/codebuild/my-app-build}
# 4. ビルド開始
aws codebuild start-build --project-name my-app-build
# 5. ビルド状態確認
aws codebuild batch-get-builds --ids xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
5.2 CloudFormation で Project 定義
# codebuild-project.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
CodeBuildRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: codebuild.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser
- arn:aws:iam::aws:policy/AmazonS3FullAccess
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
MyBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Name: my-app-build
Source:
Type: GITHUB
Location: https://github.com/myorg/my-repo.git
BuildSpec: buildspec.yml
Environment:
ComputeType: BUILD_GENERAL1_MEDIUM
Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0
Type: LINUX_CONTAINER
PrivilegedMode: true # Docker build 用
RegistryCredential:
CredentialsProvider: CODEBUILD
CredentialsArn: arn:aws:codeartifact:...
ServiceRole: !GetAtt CodeBuildRole.Arn
LogsConfig:
CloudWatchLogs:
Status: ENABLED
GroupName: /aws/codebuild/my-app-build
Artifacts:
Type: S3
Location: my-build-artifacts
Name: build-output
5.3 CDK で Project 定義
import * as cdk from 'aws-cdk-lib';
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
import * as iam from 'aws-cdk-lib/aws-iam';
export class MyBuildStack extends cdk.Stack {
constructor(scope: cdk.App, id: string) {
super(scope, id);
// IAM Role
const buildRole = new iam.Role(this, 'BuildRole', {
assumedBy: new iam.ServicePrincipal('codebuild.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonEC2ContainerRegistryPowerUser'),
iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonS3FullAccess'),
],
});
// CodeBuild Project
const project = new codebuild.Project(this, 'MyBuildProject', {
projectName: 'my-app-build',
source: codebuild.Source.github({
owner: 'myorg',
repo: 'my-repo',
webhook: true,
}),
environment: {
buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2_5,
computeType: codebuild.ComputeType.MEDIUM,
privileged: true, // Docker build 用
},
buildSpec: codebuild.BuildSpec.fromSourceFilename('buildspec.yml'),
role: buildRole,
});
// Reserved Capacity Fleet
const fleet = new codebuild.Fleet(this, 'MyFleet', {
computeType: codebuild.ComputeType.MEDIUM,
desiredCapacity: 5,
maxCapacity: 20,
minCapacity: 1,
});
// Fleet を project に関連付け
project.fleet = fleet;
}
}
5.4 テストレポート統合
# buildspec.yml で JUnit 形式レポート生成
phases:
build:
commands:
- npm run test -- --reporters=default --reporters=jest-junit
reports:
jest-test:
files:
- 'junit.xml'
file-format: JUNITXML
name: TestResults
6. 類似サービス比較表
| 機能 | CodeBuild | GitHub Actions | GitLab Runner | CircleCI | Drone |
|---|---|---|---|---|---|
| AWS 統合 | ✅ ネイティブ | △ 別途設定 | △ プラグイン | △ Orb | △ Plugin |
| VPC 対応 | ✅ 標準 | △ セルフホスト | ✅ 可能 | △ Premium | ✅ 可能 |
| Docker support | ✅ privileged mode | ✅ Docker-in-Docker | ✅ Docker executor | ✅ Docker executor | ✅ Docker |
| キャッシング | ✅ S3 cache | ✅ GHA cache | ✅ GitLab cache | ✅ cache | ✅ Volume mount |
| Reserved Capacity | ✅ Fleet (2025 新) | ❌ | △ Runner scaling | △ Scale tier | △ |
| Lambda Compute | ✅ (2025 新) | △ N/A | ❌ | △ Serverless | ❌ |
| Cost | `0.005-0.04/min | 無料 + `0.008/min | Free + self-host | $0.006/min | Free + self-host |
| 推奨対象 | AWS 中心 | GitHub リポジトリ | GitLab users | マルチクラウド | Kubernetes |
7. ベストプラクティス(✅/❌)
✅ すべき設定
| 項目 | 実装例 | 利点 |
|---|---|---|
| キャッシュ活用 | cache: { paths: [node_modules/**/*] } |
90% ビルド時間削減 |
| Secrets Manager 使用 | env: { secrets-manager: { API_KEY: ... } } |
認証情報セキュア |
| テストレポート統合 | reports: { jest: { file-format: JUNITXML } } |
CodePipeline 自動フェイル |
| Reserved Capacity | 高頻度ビルド環境 | 待機時間ゼロ・コスト固定 |
| VPC 設定 | RDS/ElastiCache 接続用 | 統合テスト可能化 |
| ログ保持ポリシー | CloudWatch Logs 30 日保持 | コスト最適化・監査対応 |
| IAM 最小権限 | 特定 ECR・S3 のみ | セキュリティ強化 |
| マルチアーキテクチャ | docker buildx ARM64 + x86 |
マルチプラットフォーム対応 |
❌ アンチパターン
| 項目 | 問題 | 改善案 |
|---|---|---|
| buildspec.yml に認証情報 | コード漏洩・セキュリティ | Secrets Manager reference |
| キャッシュなし毎回インストール | ビルド 5 分 → 無駄 | S3 cache paths 設定 |
| テストなしビルド | 品質低下・後流テスト | pre_build フェーズ で test |
| On-demand 高頻度ビルド | 待機時間・コスト増加 | Reserved Capacity Fleet |
| ログ無制限保持 | CloudWatch ストレージコスト爆増 | Lifecycle policy 設定 |
| EC2 Compute 常に XLARGE | 不要な高コスト | 必要に応じて MEDIUM/LARGE |
| VPC なし + RDS 接続試行 | ネットワーク接続失敗 | VPC config 設定 |
8. トラブルシューティング表
| 症状 | 原因 | 解決方法 |
|---|---|---|
| ビルドがタイムアウト | 依存関係インストール遅い / リソース不足 | キャッシュ追加 / コンピュート型アップ |
| Docker push 失敗 | ECR 権限不足 | IAM Role に AmazonEC2ContainerRegistryPowerUser 追加 |
| RDS 接続失敗 | VPC/SG 設定漏れ | VpcConfig + SecurityGroupIds 設定 |
| npm install 遅い | キャッシュなし毎回ダウンロード | cache paths 設定・npm ci 使用 |
| テストレポート表示されない | レポート ファイル形式 / パス不正 | file-format: JUNITXML + files パス確認 |
| GitHub webhook 失敗 | GitHub 認証トークン期限切れ | GitHub personal access token 再生成 |
| 秘密情報ログ出力 | buildspec.yml で echo $SECRET | Secrets Manager reference で automatic mask |
9. 2025-2026 最新動向
9.1 Reserved Capacity Fleet 実装拡大
2025 年初、AWS は Reserved Capacity Fleet を全リージョン・全コンピュートタイプに拡大。高頻度ビルド環境(500+ builds/day)では年間 $20,000+ 削減の事例報告。
新機能:
- Overflow behavior:キャパシティ超過時に on-demand へ自動スケール
- Scaling policies:時間帯別の容量調整(朝 5 台 → 昼 20 台)
- Cost allocation tags:プロジェクト毎のコスト追跡
9.2 Lambda Compute の実用化
Lambda compute mode(秒単位課金)が 2025 年に大幅改善。秒単位スタートアップで、Lint・小規模テストに最適化。
使い分け:
- EC2 Compute:Docker build・長時間ビルド(2+ 分)
- Lambda Compute:Lint・Unit test・スモークテスト(30 秒以下)
9.3 AI ベースビルド最適化
AWS Q Developer との統合検討中。buildspec.yml の自動生成・最適化提案機能が試験段階。
9.4 セキュリティ強化
- Image scanning at build time:push 時に自動脆弱性スキャン
- Build log encryption:CloudWatch Logs KMS 暗号化標準化
- Secrets Manager integration:自動マスキング・ローテーション対応
10. 学習リソース・参考文献
公式ドキュメント(8+)
- AWS CodeBuild User Guide
- buildspec.yml Reference
- Build Environment Reference
- Reserved Capacity Fleet
- VPC in CodeBuild
- Custom Image Support
- CodeBuild Pricing
- Test Reports and Metrics
オープンソース・参考実装(5+)
- aws-samples/aws-codebuild-samples - buildspec.yml サンプル集
- aws-cdk-examples - codebuild - CDK で Project 定義
- BuildKit - High-performance container image builder
- GitHub Actions Runners vs CodeBuild - セルフホストランナー比較
- CircleCI vs AWS CodeBuild - 機能比較
参考記事(2025-2026)
- AWS CodeBuild Batch Builds with Reserved Capacity - AWS Jan 2025
- CodeBuild Reserved Capacity Fleet Cost Analysis
11. 実装例:フルスタック CI パイプライン
# buildspec.yml - Node.js + Docker + Integration Tests
version: 0.2
env:
secrets-manager:
DATABASE_URL: prod/rds:url
API_KEY: prod/api:key
phases:
install:
runtime-versions:
nodejs: 20
commands:
- echo "Installing dependencies..."
- npm ci
pre_build:
commands:
- echo "Linting and unit tests..."
- npm run lint
- npm run test:unit -- --coverage
- echo "Code quality gates passed"
build:
commands:
- echo "Building application..."
- npm run build
- echo "Building Docker image..."
- aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
- REPO_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/my-app
- docker build -t $REPO_URI:$CODEBUILD_BUILD_NUMBER .
- docker push $REPO_URI:$CODEBUILD_BUILD_NUMBER
- printf '[{"name":"my-app","imageUri":"%s"}]' $REPO_URI:$CODEBUILD_BUILD_NUMBER > imagedefinitions.json
post_build:
commands:
- echo "Running integration tests..."
- npm run test:integration || echo "Integration test warnings (non-blocking)"
reports:
unit-test:
files:
- junit.xml
file-format: JUNITXML
coverage:
files:
- coverage/cobertura-coverage.xml
file-format: COBERTURAXML
artifacts:
files:
- dist/**/*
- imagedefinitions.json
name: BuildOutput
cache:
paths:
- node_modules/**/*
12. 導入ロードマップ
Week 1: 環境準備
├── IAM Role 作成・権限設定
├── S3 artifact bucket 作成
├── CloudWatch Logs group 設定
└── ECR repository 作成
Week 2: 基本 Project 構築
├── buildspec.yml 作成
├── ローカルテスト (aws codebuild local)
├── CodeBuild Project 作成
└── 手動テスト
Week 3: CI integration
├── CodePipeline Stage 追加
├── GitHub webhook 設定
├── テストレポート統合
└── E2E テスト
Week 4: 最適化・スケール
├── キャッシング有効化
├── Reserved Capacity Fleet 検討
├── VPC integration(必要に応じ)
└── Cost analysis
Week 5+: 本番運用
├── Monitoring・alerting
├── インシデント対応 playbook
├── チーム トレーニング
└── 月次レビュー
13. チェックリスト
機能チェックリスト
- [ ] buildspec.yml を git repo に commit
- [ ] CodeBuild Project を CloudFormation/CDK で定義
- [ ] キャッシング(node_modules・Maven)を有効化
- [ ] テストレポート(JUnit・Coverage)統合
- [ ] ECR push(Docker build 環境)
- [ ] CloudWatch Logs 有効化・保持ポリシー設定
- [ ] Secrets Manager reference(API key・DB password)
- [ ] CodePipeline Build Stage 連携
セキュリティチェックリスト
- [ ] IAM Role:最小権限原則
- [ ] buildspec.yml:認証情報ハードコードなし
- [ ] ECR image:脆弱性スキャン enabled
- [ ] CloudWatch Logs:KMS 暗号化
- [ ] VPC(該当時):RDS/ElastiCache アクセス確認
パフォーマンスチェックリスト
- [ ] キャッシュ有効化(ビルド時間計測)
- [ ] Reserved Capacity Fleet(高頻度環境)
- [ ] Docker layer caching(Docker build)
- [ ] npm ci vs npm install(reproducibility)
- [ ] 月次 cost review・optimization
まとめ
AWS CodeBuild は 「フルマネージドのサーバーレス CI ビルドサービス」 です。buildspec.yml でビルド・テスト・Docker イメージ作成を定義し、使った分だけ課金。Reserved Capacity Fleet・Lambda Compute・VPC integration などの先進機能で、Jenkins 管理の運用コストを大幅削減しながら、AWS ネイティブな高速 CI パイプラインを実現できます。
CodePipeline と組み合わせれば、「ソースコード push → 自動ビルド・テスト → 自動デプロイ」 という完全自動化 CI/CD が実現でき、開発速度・品質・信頼性を大幅に向上させられます。
最終更新:2026-04-26 バージョン:v2.0