目次

AWS CodePipeline 完全ガイド v2.0 (2026 年最新対応)

フルマネージド継続的デリバリーサービス入門・実務・最新機能


概要

AWS CodePipeline は 「ソースコード変更から本番デプロイまでの継続的デリバリー(CD)パイプラインを完全自動化・オーケストレーションするフルマネージドサービス」 です。GitHub・CodeCommit などのソースリポジトリから始まり、CodeBuild(ビルド)・CodeDeploy(デプロイ)・CloudFormation(IaC)・Lambda(カスタムロジック)・ECS(コンテナ)などを組み合わせて、ステージとアクションで CI/CD パイプラインを定義します。

特に V2 パイプラインタイプ(2023 GA) では、PR コメントトリガー・ブランチフィルター・パイプラインレベルの変数・実行単位課金など、大規模・マルチ環境デプロイに適した高度な機能が標準化されました。

このサービスを選ぶ理由(なぜ CodePipeline なのか)

観点 特徴 利点
AWS ネイティブ統合 IAM・CloudFormation・ECS と直結 認証情報管理不要・セキュアアクセス
手動承認ゲート 本番デプロイ前の承認ステップ内蔵 コンプライアンス対応・ヒューマンエラー防止
V2 柔軟トリガー PR・タグ・ブランチフィルター GitHub Actions 並みの使いやすさ
クロスアカウント/リージョン マルチアカウント CD エンタープライズ規模の運用対応
自動ロールバック デプロイ失敗時に自動復旧 本番障害の自動軽減

1. 課題と特徴

CodePipeline が解決する課題

❌ 課題:CI/CD パイプラインを手作業で管理
  → GitHub に push → Jenkins で手動トリガー → Slack で報告 → 誰かが CodeDeploy 実行
  → 自動化漏れ・ミス・属人化

✅ 解決:CodePipeline で完全自動化
  → Source (GitHub/CodeCommit) → Build (CodeBuild) → Test → Approval → Deploy
  → 全てコード化・バージョン管理・監査ログ・自動ロールバック

コアの特徴

特徴 説明
フルマネージド サーバー・インフラ管理不要。スケーリング自動
ステージ・アクション Source → Build → Test → Approval → Deploy をビジュアル定義
V1 vs V2 V2 は PR トリガー・変数・実行単位課金($0.002/実行)
手動承認 SNS 通知 + AWS コンソール/CLI で承認・却下
クロスサービス統合 CodeBuild・CodeDeploy・CloudFormation・Lambda・ECS・S3 との連携
アーティファクト ステージ間でファイル・成果物を自動受け渡し
失敗時ロールバック デプロイ失敗・CloudWatch アラームで自動復旧

2. アーキテクチャ(Mermaid 図 1)

graph LR
    A["Source<br/>(GitHub/CodeCommit)"] -->|Push/PR| B["Stage 1: Source<br/>CodeStarSourceConnection"]
    B -->|Artifact| C["Stage 2: Build<br/>CodeBuild Project"]
    C -->|Build成功| D["Stage 3: Test<br/>CodeBuild Test Suite"]
    D -->|合格| E["Stage 4: Staging Deploy<br/>CloudFormation/ECS"]
    E -->|完了| F["Stage 5: Manual Approval<br/>SNS通知 + 承認者確認"]
    F -->|承認| G["Stage 6: Prod Deploy<br/>CodeDeploy Blue/Green"]
    G -->|成功| H["EventBridge<br/>完了通知"]
    G -->|失敗| I["自動ロールバック<br/>前バージョン復旧"]
    
    style A fill:#e8f4f8
    style B fill:#fff3cd
    style C fill:#f8f9fa
    style D fill:#f8f9fa
    style E fill:#cfe2ff
    style F fill:#fff5e6
    style G fill:#d1ecf1
    style H fill:#d4edda
    style I fill:#f8d7da

3. コアコンポーネント

3.1 Pipeline Types(V1 vs V2)

V1 パイプライン(レガシー・段階的課金)

特徴:
  - ステージ単位の月額課金:$1/パイプライン/月
  - トリガー:CodeCommit push・S3 update・手動のみ
  - 変数:非対応
  - フルリリース時代の標準

課金:
  - 1 パイプライン(V1):$1.00/月
  - 無料枠:1 パイプライン

V2 パイプライン(推奨・実行単位課金)

# pipeline-definition-v2.json
{
  "pipeline": {
    "name": "my-app-pipeline",
    "pipelineType": "V2",
    "triggers": [
      {
        "providerType": "CodeStarSourceConnection",
        "gitConfiguration": {
          "push": [
            {
              "branches": {
                "includes": ["main", "develop"],
                "excludes": ["hotfix/*"]
              },
              "filePaths": {
                "includes": ["src/", "buildspec.yml"]
              }
            }
          ],
          "pullRequest": [
            {
              "branches": {"includes": ["main"]},
              "events": ["CREATED", "UPDATED"]
            }
          ]
        }
      },
      {
        "providerType": "PollForSourceChanges",
        "polling": {"interval": 60}  # 分単位で定期チェック
      }
    ],
    "variables": [
      {
        "name": "ENV",
        "defaultValue": "dev"
      },
      {
        "name": "DOCKER_TAG",
        "defaultValue": "${CODEPIPELINE_EXECUTION_ID}"
      }
    ],
    "stages": [...]
  }
}

特徴:
  - 実行単位課金:$0.002/アクション実行
  - トリガー柔軟性:PR・タグ・スケジュール・フィルター
  - パイプラインレベル変数
  - V2 は現在推奨選択肢
  
課金例:
  - 200 回/月 x 6 アクション = 1,200 アクション実行
  - 1,200 x $0.002 = $2.40/月
  - 無料枠:100 アクション/月

3.2 ステージ & アクション

stages:
  - name: Source
    actions:
      - name: FetchCode
        actionTypeId:
          category: Source
          owner: AWS
          provider: CodeStarSourceConnection  # GitHub v2接続
        configuration:
          FullRepositoryId: "org/my-repo"
          BranchName: "main"
          ConnectionArn: "arn:aws:codestar-connections:..."
        outputArtifacts:
          - name: SourceOutput

  - name: Build
    actions:
      - name: CompileAndTest
        actionTypeId:
          category: Build
          owner: AWS
          provider: CodeBuild
        configuration:
          ProjectName: "my-app-build"
          EnvironmentVariables: |
            [{"name":"ENV","value":"${CODEPIPELINE_VARIABLES.ENV}"}]
        inputArtifacts:
          - name: SourceOutput
        outputArtifacts:
          - name: BuildOutput
      
      - name: SecurityScan
        actionTypeId:
          category: Test
          owner: AWS
          provider: CodeBuild
        configuration:
          ProjectName: "sast-scan"
        inputArtifacts:
          - name: SourceOutput

  - name: ApprovalForProd
    actions:
      - name: ManualApprovalProd
        actionTypeId:
          category: Approval
          owner: AWS
          provider: Manual
        configuration:
          NotificationArn: "arn:aws:sns:us-east-1:111122223333:prod-approval"
          ExternalEntityLink: "https://dashboard.example.com/review"
          CustomData: "Review test results and deployment plan"

  - name: ProdDeploy
    actions:
      - name: DeployToProduction
        actionTypeId:
          category: Deploy
          owner: AWS
          provider: CodeDeploy
        configuration:
          ApplicationName: "my-app"
          DeploymentGroupName: "prod-group"
        inputArtifacts:
          - name: BuildOutput
        runOrder: 1

      - name: SmokeTests
        actionTypeId:
          category: Invoke
          owner: AWS
          provider: Lambda
        configuration:
          FunctionName: "smoke-test-lambda"
        runOrder: 2

3.3 アーティファクト(ステージ間の受け渡し)

Source Stage
  ↓ (SourceOutput: git clone したコード)
Build Stage
  ↓ (BuildOutput: ビルド成果物 dist/、docker image URI)
Deploy Stage
  ↓ (デプロイ実行)

# 内部実装:S3 バケットに自動保管
- codepipeline-artifacts-123456789012-us-east-1/
  └── my-app-pipeline/
      └── SourceOutput/
      └── BuildOutput/
      └── TestOutput/

4. 主要ユースケース(12+)

4.1 GitHub → CodeBuild → CodeDeploy CI/CD パイプライン

pipeline:
  Source:
    - GitHub (v2 connection)
  Build:
    - CodeBuild (npm run build && npm run test)
  Deploy:
    - CodeDeploy Blue/Green to EC2 fleet
    
トリガー:
  - main branch push  自動パイプライン実行
  - PR created  CodeBuild  lint・test(結果を GitHub PR に表示)

4.2 マルチ環境デプロイ(dev → staging → prod)

Stage 1: Source (GitHub main)
Stage 2: Build (shared)
Stage 3: DevDeploy (自動)
Stage 4: StagingDeploy (自動)
Stage 5: ApprovalForProd (SNS notification)
Stage 6: ProdDeploy (自動)

各ステージで異なる CloudFormation パラメーター・デプロイグループを指定

4.3 CloudFormation スタック自動更新(IaC CD)

pipeline:
  stages:
    - name: Source
    - name: Build (CFN テンプレート検証)
      - CodeBuild: cfn-lint
    - name: StagingDeploy
      - CloudFormation CreateStack/UpdateStack (staging)
    - name: ApprovalForProd
    - name: ProdDeploy
      - CloudFormation CreateStack/UpdateStack (prod)

4.4 ECS Blue/Green デプロイ自動化

CodePipeline → CodeBuild (Docker image push to ECR)
            → CodeDeploy Blue/Green
              └── ALB listener rule switch
              └── Health check → auto rollback

4.5 Lambda カナリアリリース

stages:
  - Deploy
    actions:
      - Lambda Version 10% traffic shift
        - Post-traffic validation lambda
      - Lambda Version 100% traffic shift
      - Trigger CloudWatch alarm  auto rollback

4.6 マルチリージョンデプロイ

Pipeline (us-east-1)
  ├── Source
  ├── Build
  └── Cross-Region Deploy Actions
      ├── Deploy to us-west-2
      ├── Deploy to eu-west-1
      └── Deploy to ap-northeast-1

4.7 クロスアカウントデプロイ

Account A (Pipeline account)
  ├── Pipeline definition
  └── Assume Role in Account B
      └── Deploy to Account B resources

4.8 Infrastructure as Code Pipeline

  • Source: Terraform/CDK code in GitHub
  • Build: terraform validate/plan
  • Approval: Review plan output
  • Deploy: terraform apply in prod account

4.9 カスタムアクション(Lambda invoke)

action:
  category: Invoke
  provider: Lambda
  configuration:
    FunctionName: custom-pipeline-step
    # 入力:前ステージのアーティファクト
    # 出力:カスタムロジック結果を次ステージに受け渡し

4.10 セキュリティゲート統合

  • Build
  • → SAST (CodeBuild SONARQUBE)
  • → Approval (セキュリティチーム確認)
  • → Deploy only if security approved

4.11 コンプライアンス監査パイプライン

  • Source: Infrastructure changes
  • Build: Policy validation (CFN Guard)
  • Approval: Compliance team review
  • Deploy: Only compliant configs

4.12 Blue/Green with Automatic Smoke Tests

CodeDeploy Blue/Green
  ├── Green environment created
  ├── Post-deployment validation (Lambda)
  └── If pass → traffic switched
     If fail → auto rollback to Blue

5. 設定・操作の具体例

5.1 CLI で V2 パイプライン作成

# 1. GitHub v2 接続を作成(初回のみ)
aws codestar-connections create-connection \
  --provider-type GitHub \
  --connection-name my-github-connection

# 2. 接続を確認して ARN を取得
aws codestar-connections list-connections
# Output: ConnectionArn: arn:aws:codestar-connections:...

# 3. パイプライン定義ファイルを作成
cat > pipeline-definition.json << 'EOF'
{
  "pipeline": {
    "name": "my-app-v2-pipeline",
    "roleArn": "arn:aws:iam::123456789012:role/CodePipelineRole",
    "artifactStore": {
      "type": "S3",
      "location": "my-pipeline-artifacts-bucket"
    },
    "pipelineType": "V2",
    "triggers": [
      {
        "providerType": "CodeStarSourceConnection",
        "gitConfiguration": {
          "push": [
            {
              "branches": {
                "includes": ["main"],
                "excludes": ["release/*"]
              }
            }
          ],
          "pullRequest": [
            {
              "branches": {"includes": ["main"]}
            }
          ]
        }
      }
    ],
    "variables": [
      {
        "name": "ENVIRONMENT",
        "defaultValue": "dev"
      }
    ],
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "name": "SourceAction",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "provider": "CodeStarSourceConnection"
            },
            "configuration": {
              "FullRepositoryId": "myorg/my-repo",
              "BranchName": "main",
              "ConnectionArn": "arn:aws:codestar-connections:us-east-1:123456789012:connection/xxx"
            },
            "outputArtifacts": [{"name": "SourceOutput"}]
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "name": "BuildAction",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "provider": "CodeBuild"
            },
            "configuration": {
              "ProjectName": "my-app-build"
            },
            "inputArtifacts": [{"name": "SourceOutput"}],
            "outputArtifacts": [{"name": "BuildOutput"}]
          }
        ]
      },
      {
        "name": "ApprovalForProd",
        "actions": [
          {
            "name": "ManualApproval",
            "actionTypeId": {
              "category": "Approval",
              "owner": "AWS",
              "provider": "Manual"
            },
            "configuration": {
              "NotificationArn": "arn:aws:sns:us-east-1:123456789012:approval-topic"
            }
          }
        ]
      },
      {
        "name": "Deploy",
        "actions": [
          {
            "name": "DeployAction",
            "actionTypeId": {
              "category": "Deploy",
              "owner": "AWS",
              "provider": "CodeDeploy"
            },
            "configuration": {
              "ApplicationName": "my-app",
              "DeploymentGroupName": "prod-group"
            },
            "inputArtifacts": [{"name": "BuildOutput"}]
          }
        ]
      }
    ]
  }
}
EOF

# 4. パイプラインを作成
aws codepipeline create-pipeline \
  --cli-input-json file://pipeline-definition.json

# 5. パイプライン実行開始
aws codepipeline start-pipeline-execution \
  --name my-app-v2-pipeline

# 6. 実行状態確認
aws codepipeline describe-pipeline-execution \
  --pipeline-name my-app-v2-pipeline \
  --pipeline-execution-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

5.2 IAM ロール・ポリシー設定

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::my-pipeline-artifacts-bucket/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "codebuild:StartBuild",
        "codebuild:BatchGetBuilds"
      ],
      "Resource": "arn:aws:codebuild:*:*:project/my-app-build"
    },
    {
      "Effect": "Allow",
      "Action": [
        "codedeploy:CreateDeployment",
        "codedeploy:GetDeploymentStatus"
      ],
      "Resource": "arn:aws:codedeploy:*:*:deploymentgroup/my-app/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::*:role/*"
    }
  ]
}

5.3 EventBridge 統合(失敗通知・Slack 連携)

# EventBridge Rule: Pipeline Failure Notification
{
  "Name": "codepipeline-failure-notification",
  "Description": "Notify Slack when CodePipeline fails",
  "EventBusName": "default",
  "EventPattern": {
    "source": ["aws.codepipeline"],
    "detail-type": ["CodePipeline Pipeline Execution State Change"],
    "detail": {
      "state": ["FAILED"],
      "pipeline": ["my-app-v2-pipeline"]
    }
  },
  "State": "ENABLED",
  "Targets": [
    {
      "Arn": "arn:aws:lambda:us-east-1:123456789012:function:slack-notifier",
      "RoleArn": "arn:aws:iam::123456789012:role/EventBridgeRole"
    }
  ]
}

5.4 CloudFormation を使った Pipeline 定義

# cloudformation-pipeline.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyPipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      Name: my-app-cfn-pipeline
      RoleArn: !GetAtt PipelineRole.Arn
      ArtifactStore:
        Type: S3
        Location: !Ref ArtifactBucket
      PipelineType: V2
      Triggers:
        - ProviderType: CodeStarSourceConnection
          GitConfiguration:
            SourceActionConfiguration:
              Owner: !Ref GitHubOwner
              Repo: !Ref GitHubRepo
              Branch: main
              ConnectionArn: !Ref GitHubConnection
      Stages:
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: AWS
                Provider: CodeStarSourceConnection
              Configuration:
                FullRepositoryId: !Sub '${GitHubOwner}/${GitHubRepo}'
                BranchName: main
              OutputArtifacts:
                - Name: SourceOutput
        - Name: Build
          Actions:
            - Name: BuildAction
              ActionTypeId:
                Category: Build
                Owner: AWS
                Provider: CodeBuild
              Configuration:
                ProjectName: !Ref BuildProject
              InputArtifacts:
                - Name: SourceOutput
              OutputArtifacts:
                - Name: BuildOutput

  PipelineRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: codepipeline.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess  # 本番環境では最小権限に

  ArtifactBucket:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled

6. 類似サービス比較表

機能 CodePipeline V2 GitHub Actions GitLab CI Jenkins Spinnaker Argo CD
AWS 統合 ✅ ネイティブ △ 設定必要 △ プラグイン △ プラグイン △ プラグイン ✅(Argo Rollouts 併用)
手動承認 ✅ 組み込み △ Environment △ 可能
マルチリージョン ✅ 標準対応 △ セルフホスト △ セルフホスト △ セルフホスト
Blue/Green ✅ CodeDeploy △ 手実装 △ 手実装 △ 手実装 ✅ Argo Rollouts
Canary ✅ Lambda/ECS △ 手実装 △ 手実装 △ 手実装
Cost $0.002/実行 無料+従量課金 無料+セルフホスト セルフホスト セルフホスト 無料(Argo)
学習曲線 低(AWS 知識要) 低(GitHub 中心) 中(YAML) 高(複雑) 高(専門的) 高(K8s 必須)
推奨対象 AWS ネイティブ企業 GitHub 中心 OSS GitLab 導入社 大規模レガシー マルチクラウド Kubernetes

比較ポイント

CodePipeline vs GitHub Actions

  • CodePipeline:AWS サービス深い統合・手動承認・クロスアカウント
  • GitHub Actions:GitHub リポジトリ標準・プラグイン豊富・コミュニティ活発

CodePipeline vs Spinnaker

  • CodePipeline:AWS 専用・シンプル・マネージド
  • Spinnaker:マルチクラウド・複雑なデプロイ戦略・自社運用必要

7. ベストプラクティス(✅/❌)

✅ すべき設定

項目 実装例
V2 パイプラインを使用 "pipelineType": "V2" で PR トリガー・変数活用
手動承認を本番前に Approval Stage で SNS 通知 → 承認者確認
アーティファクト暗号化 S3 バケット KMS 暗号化 + VPC endpoint
IAM 最小権限 特定リソースのみアクセス許可・PassRole 制限
CloudWatch アラーム連携 デプロイ失敗時の自動ロールバック
VPC 内パイプライン実行 CodeBuild VPC subnet 指定
アーティファクト保持期限 S3 lifecycle で古いアーティファクト削除
Pipeline 定義を IaC 化 CloudFormation・CDK で Pipeline 定義

❌ アンチパターン

項目 問題 改善案
認証情報をコードに埋め込み セキュリティ漏洞 Secrets Manager・Parameter Store 使用
本番デプロイの手動承認なし 誤デプロイ・障害 Manual Approval Stage 追加
アーティファクト保持無制限 S3 ストレージコスト増加 Lifecycle 設定で 30 日後削除
全ステージで同じロール 過度な権限付与 ステージ毎のロール分離
失敗時ロールバック手動 障害復旧が遅い CloudWatch アラーム + 自動ロールバック
パイプライン定義をコンソール手作業 属人化・再現性喪失 CloudFormation・CDK で IaC 化

8. トラブルシューティング表

症状 原因 解決方法
パイプライン実行が stuck CodeBuild timeout / リソース不足 CloudWatch Logs 確認・timeout 延長・コンピュート型増強
手動承認タイムアウト 7 日以上承認なし SNS 通知再送・タイムアウト設定変更
アーティファクト取得失敗 S3 バケット権限不足 IAM ロール権限確認・バケットポリシー確認
GitHub webhook 失敗 CodeStarConnection 無効 AWS console で connection 再認証
Cross-account deploy 失敗 信頼できるロール設定不足 対象アカウントで AssumeRole ポリシー追加
デプロイ自動ロールバック発火 CloudWatch アラーム条件トリガー アラーム閾値調整・false positive 確認
古いアーティファクトが残る S3 lifecycle policy 未設定 S3 lifecycle rule で自動削除設定

9. 2025-2026 最新動向

9.1 V2 パイプラインへの統合加速

CodePipeline V2 は 2023 GA 以来、企業採用が急速に拡大。V1 の段階的課金モデルは段階的に廃止予定。

新機能(2025-2026):

  • Pipeline-level variables:環境変数をステージ全体で共有
  • PR コメント trigger:/deploy-prod コメントでパイプライン実行
  • Rollback improvements:自動ロールバックの精度向上
  • GitOps integration:Argo CD との連携強化

9.2 CodeDeploy との Blue/Green 深化

ECS・Lambda でのカナリアデプロイが標準化。リアルタイム traffic shifting validation が高度化。

9.3 セキュリティ機能強化

  • CloudFormation Guard との連携:IaC 検証
  • Policy As Code:デプロイ前のポリシー自動チェック
  • VPC endpoint for CodePipeline:インターネット不要

9.4 AI 活用

AWS Q Developer との統合検討中(自然言語 → Pipeline 定義自動生成)


10. 学習リソース・参考文献

公式ドキュメント(8+)

  1. AWS CodePipeline User Guide
  2. CodePipeline Pipeline Types
  3. V2 Pipeline Triggers Documentation
  4. CodePipeline Pricing
  5. CodeStarSourceConnection for GitHub
  6. Cross-Account Pipeline Setup
  7. CodePipeline CloudFormation Reference
  8. AWS DevOps Blog - CodePipeline

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

  1. aws-samples/aws-cdk-examples - codepipeline - CDK で Pipeline 定義
  2. aws-samples/aws-codepipeline-nested-cfn - Nested CloudFormation Pipeline
  3. aws-samples/aws-codepipeline-webhook - Custom Webhook 統合
  4. AWS CodePipeline Best Practices
  5. GitHub Actions vs CodePipeline Comparison

参考記事(2025-2026)


11. 実装例:エンタープライズ 3 環境パイプライン

# 3-environment-pipeline-cdk.ts
import * as cdk from 'aws-cdk-lib';
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
import * as codebuild from 'aws-cdk-lib/aws-codebuild';

export class MultiEnvPipeline extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const sourceOutput = new codepipeline.Artifact('SourceOutput');
    const buildOutput = new codepipeline.Artifact('BuildOutput');

    const pipeline = new codepipeline.Pipeline(this, 'MultiEnvPipeline', {
      pipelineName: 'my-app-3env',
    });

    // Stage 1: Source
    pipeline.addStage({
      stageName: 'Source',
      actions: [
        new codepipeline_actions.CodeStarConnectionsSourceAction({
          actionName: 'GitHub',
          owner: 'myorg',
          repo: 'my-app',
          branch: 'main',
          output: sourceOutput,
          connectionArn: 'arn:aws:codestar-connections:...',
        }),
      ],
    });

    // Stage 2: Build
    pipeline.addStage({
      stageName: 'Build',
      actions: [
        new codepipeline_actions.CodeBuildAction({
          actionName: 'CompileAndTest',
          project: new codebuild.PipelineProject(
            this,
            'BuildProject',
            {
              buildSpec: codebuild.BuildSpec.fromSourceFilename(
                'buildspec.yml'
              ),
            }
          ),
          input: sourceOutput,
          outputs: [buildOutput],
        }),
      ],
    });

    // Stage 3: Dev Deploy (自動)
    pipeline.addStage({
      stageName: 'DevDeploy',
      actions: [
        new codepipeline_actions.CloudFormationCreateUpdateStackAction({
          actionName: 'CreateUpdateStack',
          stackName: 'my-app-dev',
          templatePath: buildOutput.atPath('cfn-template.yaml'),
          adminPermissions: true,
          environmentVariables: {
            ENVIRONMENT: codepipeline.Variable.atLaunchTime('dev'),
          },
        }),
      ],
    });

    // Stage 4: Staging Deploy (自動)
    pipeline.addStage({
      stageName: 'StagingDeploy',
      actions: [
        new codepipeline_actions.CloudFormationCreateUpdateStackAction({
          actionName: 'CreateUpdateStack',
          stackName: 'my-app-staging',
          templatePath: buildOutput.atPath('cfn-template.yaml'),
          adminPermissions: true,
          environmentVariables: {
            ENVIRONMENT: codepipeline.Variable.atLaunchTime('staging'),
          },
        }),
      ],
    });

    // Stage 5: Approval
    pipeline.addStage({
      stageName: 'ApprovalForProd',
      actions: [
        new codepipeline_actions.ManualApprovalAction({
          actionName: 'ApproveDeployToProd',
          notificationTopic: new cdk.aws_sns.Topic(
            this,
            'ApprovalTopic'
          ),
        }),
      ],
    });

    // Stage 6: Prod Deploy
    pipeline.addStage({
      stageName: 'ProdDeploy',
      actions: [
        new codepipeline_actions.CloudFormationCreateUpdateStackAction({
          actionName: 'CreateUpdateStack',
          stackName: 'my-app-prod',
          templatePath: buildOutput.atPath('cfn-template.yaml'),
          adminPermissions: true,
          environmentVariables: {
            ENVIRONMENT: codepipeline.Variable.atLaunchTime('prod'),
          },
        }),
      ],
    });
  }
}

12. 導入ロードマップ

Week 1-2: 環境準備
  ├── CodeStarConnection (GitHub 接続)
  ├── S3 artifact bucket 作成
  ├── IAM roles 設定
  └── パイプライン用 SNS topic 作成

Week 3: 基本パイプライン構築
  ├── V2 パイプライン定義
  ├── Source Stage (GitHub)
  ├── Build Stage (CodeBuild)
  └── Dev Deploy Stage

Week 4-5: 承認・デプロイロジック
  ├── Manual Approval Stage
  ├── CodeDeploy 統合
  ├── Blue/Green 設定
  └── 自動ロールバック設定

Week 6: テスト・最適化
  ├── エンドツーエンド テスト
  ├── failover/rollback test
  ├── 負荷テスト
  └── 権限の最小化

Week 7+: 本番運用
  ├── Monitoring・alerting
  ├── ドキュメント整備
  ├── チーム トレーニング
  └── incident response plan

13. チェックリスト

機能チェックリスト

  • [ ] V2 パイプラインを選択(V1 ではない)
  • [ ] GitHub v2 接続(CodeStarSourceConnection)で認証
  • [ ] Build Stage で自動テスト実行
  • [ ] 本番前に Manual Approval Stage
  • [ ] Deploy Stage で Blue/Green または Canary
  • [ ] CloudWatch アラーム連携で自動ロールバック
  • [ ] EventBridge で失敗通知(Slack/SNS)
  • [ ] Pipeline 定義を CloudFormation/CDK で IaC 化

セキュリティチェックリスト

  • [ ] IAM role:最小権限原則
  • [ ] S3 artifact bucket:暗号化・KMS
  • [ ] secrets:Secrets Manager / Parameter Store
  • [ ] VPC endpoint:インターネットアクセス制限
  • [ ] CloudTrail:パイプライン操作監査
  • [ ] Cross-account:信頼できるロール設定確認

運用チェックリスト

  • [ ] On-call procedure 文書化
  • [ ] Rollback procedure テスト済み
  • [ ] Artifact retention policy 設定
  • [ ] Pipeline failure アラート設定
  • [ ] 月次レビュー(cost・performance)
  • [ ] チーム トレーニング完了

まとめ

AWS CodePipeline は 「AWS ネイティブの完全自動化 CI/CD オーケストレーションプラットフォーム」 です。V2 パイプラインで PR トリガー・変数・実行単位課金が利用でき、GitHub・CodeBuild・CodeDeploy・CloudFormation・Lambda・ECS を組み合わせて、dev → staging → prod への段階的・安全なリリース自動化が実現できます。

手動承認ゲート・Blue/Green デプロイ・自動ロールバック・クロスアカウント対応など、エンタープライズグレードの機能が標準装備されており、AWS を中心とした環境での 「標準的な CD パイプライン選択肢」 として位置付けられます。


最終更新:2026-04-26 バージョン:v2.0