目次

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+)

  1. AWS CodeBuild User Guide
  2. buildspec.yml Reference
  3. Build Environment Reference
  4. Reserved Capacity Fleet
  5. VPC in CodeBuild
  6. Custom Image Support
  7. CodeBuild Pricing
  8. Test Reports and Metrics

オープンソース・参考実装(5+)

  1. aws-samples/aws-codebuild-samples - buildspec.yml サンプル集
  2. aws-cdk-examples - codebuild - CDK で Project 定義
  3. BuildKit - High-performance container image builder
  4. GitHub Actions Runners vs CodeBuild - セルフホストランナー比較
  5. CircleCI vs AWS CodeBuild - 機能比較

参考記事(2025-2026)


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