目次
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+)
- AWS CodePipeline User Guide
- CodePipeline Pipeline Types
- V2 Pipeline Triggers Documentation
- CodePipeline Pricing
- CodeStarSourceConnection for GitHub
- Cross-Account Pipeline Setup
- CodePipeline CloudFormation Reference
- AWS DevOps Blog - CodePipeline
オープンソース・参考実装(5+)
- aws-samples/aws-cdk-examples - codepipeline - CDK で Pipeline 定義
- aws-samples/aws-codepipeline-nested-cfn - Nested CloudFormation Pipeline
- aws-samples/aws-codepipeline-webhook - Custom Webhook 統合
- AWS CodePipeline Best Practices
- GitHub Actions vs CodePipeline Comparison
参考記事(2025-2026)
- CodePipeline V2 Advanced Features 2026
- GitHub Actions vs AWS CodePipeline Which One Should You Choose in 2025
- AWS CodePipeline vs Spinnaker
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