🍕 宅配ピザ店の配達システムで例えると超わかりやすい!
CodePipelineの「Deploy Stage」と「DeploymentGroup」の関係は、
宅配ピザ店の「配達指示」と「配達エリア」の関係と同じ!
「配達して!」という指示(Deploy Stage)と、
「どこに届けるか」というエリア定義(DeploymentGroup)
この2つがあって初めて、ピザ(アプリ)がお客様(サーバー)に届きます🍕✨
🍕 宅配ピザ店で理解するCI/CDパイプライン
お客様からの注文を受ける
生地をこねて焼き上げる
「このピザを配達して!」
「〇〇地区の5軒に届ける」
🎯 ポイント:
Deploy Stage
= 「配達して!」という
指示・命令
DeploymentGroup
= 「どこに届けるか」という
届け先の定義
指示だけあっても届け先がないとピザは届かない!
両方セットで初めて配達(デプロイ)が完了します✨
🔗 全体構成と関係性の図解
コード取得
ビルド・テスト
デプロイ指示
CodeDeployが「DeploymentGroup」を見て、
どのサーバーに配置するかを決定
します
タグ: Environment=Production
タグ: Environment=Staging
タグ: Environment=Development
🍕 ピザ店で例えると
注文受付から配達完了までの 全工程を管理するシステム 。店長のように全体を見渡す。
💻 AWS での役割
CI/CDの オーケストレーター 。ソースコード取得→ビルド→デプロイの流れを自動化・管理する。
📋 主な設定項目
• パイプライン名
• 各ステージの定義
• ステージ間の接続
• 実行トリガー(プッシュ時など)
🍕 ピザ店で例えると
「このピザを配達して!」という 配達指示 。何を使って配達するか(バイク?車?)を決める。
💻 AWS での役割
パイプラインの中の1ステージ。 どのデプロイサービスを使うか (CodeDeploy, ECS, S3など)を指定する。
📋 主な設定項目
• デプロイプロバイダー選択
• アプリケーション名
•
DeploymentGroup名
• 入力アーティファクト
🍕 ピザ店で例えると
「〇〇地区の5軒」という 配達エリア・届け先リスト 。どこに届けるかの定義。
💻 AWS での役割
CodeDeployの設定 の一部。デプロイ先のEC2インスタンスやLambda関数を定義する。
📋 主な設定項目
• ターゲットEC2のタグ条件
• Auto Scaling グループ
• デプロイ設定(方式)
• ロードバランサー設定
📋 デプロイ実行の流れ(Step by Step)
ビルドされたアーティファクト(ピザ)が準備完了。
設定されたアプリケーション名とDeploymentGroup名を参照。
「どのEC2インスタンスにデプロイするか」を特定。
実際のデプロイ先インスタンスを特定。
appspec.ymlに従ってデプロイを実行。
結果をCodePipelineに報告。成功/失敗がパイプライン上に表示。
⚙️ 設定例(CodePipeline + CodeDeploy)
# CodePipeline の定義 Resources: MyPipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: my-application-pipeline Stages: # ... Source Stage, Build Stage の設定 ... # Deploy Stage の設定 - Name: Deploy Actions: - Name: DeployToProduction ActionTypeId: Category: Deploy Provider: CodeDeploy # ← デプロイサービスの指定 Configuration: ApplicationName: MyApplication # ← CodeDeployアプリ名 DeploymentGroupName: ProductionGroup # ← ★DeploymentGroup名! InputArtifacts: - Name: BuildOutput
# DeploymentGroup の定義(CodeDeployの設定) Resources: ProductionDeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: DeploymentGroupName: ProductionGroup # ← Pipeline側と名前を一致! ApplicationName: MyApplication ServiceRoleArn: !GetAtt CodeDeployServiceRole.Arn # ★ デプロイ先の定義(タグでフィルタリング) Ec2TagFilters: - Key: Environment Value: Production Type: KEY_AND_VALUE - Key: Application Value: MyApp Type: KEY_AND_VALUE # デプロイ設定(Blue/Green or In-Place) DeploymentConfigName: CodeDeployDefault.OneAtATime # ロードバランサー設定(オプション) LoadBalancerInfo: TargetGroupInfoList: - Name: my-target-group
🔑 重要なポイント
1. 名前の一致が必須:
Deploy Stageの
DeploymentGroupName
と
DeploymentGroupの
DeploymentGroupName
が一致していないとエラー!
2. タグ条件でターゲットを絞る:
Ec2TagFilters
で「どのEC2に配置するか」を定義
3. 複数のDeploymentGroupで環境を分ける:
本番用、ステージング用など、用途別にグループを作成可能
💼 実践ユースケース
環境別デプロイ
各環境ごとにDeploymentGroupを作成して管理。
DevelopmentGroup
StagingGroup
ProductionGroup
Blue/Greenデプロイ
DeploymentGroupでBlue/Green設定を定義。
DeploymentStyle: BLUE_GREEN
ロードバランサー連携必須
カナリアデプロイ
問題なければ残りにも展開。
CodeDeployDefault.LambdaCanary10Percent5Minutes
マルチリージョン展開
リージョンごとにDeploymentGroupを作成。
TokyoProductionGroup
OsakaProductionGroup
📊 Deploy Stage vs DeploymentGroup 比較表
| 項目 | 🚀 Deploy Stage | 🏘️ DeploymentGroup |
|---|---|---|
| 所属サービス | CodePipeline | CodeDeploy |
| 役割 | 「デプロイを実行せよ」という 指示 | 「どこにデプロイするか」という 定義 |
| 🍕 ピザで例えると | 「このピザを配達して!」という命令 | 「〇〇地区の5軒」という届け先リスト |
| 設定する内容 |
• デプロイプロバイダー(CodeDeploy等)
• アプリケーション名 • DeploymentGroup名の指定 |
• ターゲットEC2のタグ条件
• デプロイ方式(Blue/Green等) • ロードバランサー設定 |
| 複数作成 | パイプラインに複数のDeploy Stageを定義可能 | 1アプリに複数のDeploymentGroup作成可能 |
| 作成タイミング | パイプライン作成時 | CodeDeployアプリケーション作成後 |
開発・ステージング・本番で別々のDeploymentGroupを作成。タグで明確に区別しよう。
2. 命名規則を統一する:
{アプリ名}-{環境名}-deployment-group
のような命名規則で管理を楽に。
例:
myapp-production-deployment-group
3. パイプラインは1本で複数環境に展開:
1つのパイプラインに複数のDeploy Stageを設置し、
ステージング→承認→本番のように段階的デプロイが実現できる。
4. タグ設計は慎重に:
DeploymentGroupのタグフィルターが間違っていると、
意図しないサーバーにデプロイされる危険あり!本番前に必ず確認。
5. ロールバック設定を忘れずに:
DeploymentGroupの設定で自動ロールバックを有効化しておくと安心。
デプロイ失敗時に自動で前のバージョンに戻せる。
❓ よくある質問(FAQ)
• CodeDeploy :EC2/オンプレミス/Lambda向け
• ECS :コンテナ向け(Fargate含む)
• S3 :静的ファイルのデプロイ
• Elastic Beanstalk :マネージド環境向け
• CloudFormation :インフラのデプロイ
用途に応じて選択しましょう!
複数のDeploymentGroupを作成可能です。
典型的な使い方:
• 環境別:Development / Staging / Production
• リージョン別:Tokyo / Osaka / Singapore
• 用途別:WebServers / BatchServers / APIServers
Deploy Stageで指定したDeploymentGroup名が存在しない場合、
「DeploymentGroup not found」エラーで失敗します。
対策:
• CloudFormationで両方を一緒に管理する
• 命名規則を統一して間違いを防ぐ
• デプロイ前にAWSコンソールで存在確認
対象が0台でも「デプロイ完了」となる場合があるので注意。
対策:
• デプロイ前にターゲット台数を確認するステップを追加
• CloudWatchでデプロイ対象台数を監視
• Auto Scalingグループを使用している場合は最小台数を設定
🎓 まとめ
🍕 宅配ピザ = CI/CDパイプライン
Deploy StageとDeploymentGroupは
「配達指示」と「届け先リスト」
の関係!
両方揃って初めてデプロイが完了します
全体の流れを
管理する
オーケストレーター
「デプロイして!」
という
指示・命令
「どこに届けるか」
という
届け先の定義
🎯
覚えておくべきこと:
① Deploy StageはCodePipelineの一部
② DeploymentGroupはCodeDeployの一部
③ Deploy StageがDeploymentGroupを
参照
して連携
④ 名前の一致が超重要!🔑