🚀 CodePipeline Deploy Stage
& DeploymentGroup

宅配ピザで理解する!2つの関係と役割の完全ガイド

🍕 宅配ピザ店の配達システムで例えると超わかりやすい!

CodePipelineの「Deploy Stage」と「DeploymentGroup」の関係は、
宅配ピザ店の「配達指示」と「配達エリア」の関係と同じ!


「配達して!」という指示(Deploy Stage)と、
「どこに届けるか」というエリア定義(DeploymentGroup)

この2つがあって初めて、ピザ(アプリ)がお客様(サーバー)に届きます🍕✨

🍕 宅配ピザ店で理解するCI/CDパイプライン

📝
注文受付

お客様からの注文を受ける

Source Stage
👨‍🍳
ピザ作り

生地をこねて焼き上げる

Build Stage
🛵
配達指示

「このピザを配達して!」

Deploy Stage
🏘️
配達エリア

「〇〇地区の5軒に届ける」

DeploymentGroup

🎯 ポイント:
Deploy Stage = 「配達して!」という 指示・命令
DeploymentGroup = 「どこに届けるか」という 届け先の定義

指示だけあっても届け先がないとピザは届かない!
両方セットで初めて配達(デプロイ)が完了します✨

🔗 全体構成と関係性の図解

🔄 CodePipeline(注文〜配達までの全工程)
📦
Source Stage

コード取得

🔨
Build Stage

ビルド・テスト

🚀
Deploy Stage

デプロイ指示

🎯 Deploy Stage の中身
Deploy Stageは「どのサービスでデプロイするか」を指定
⚙️
CodeDeploy(デプロイ実行サービス)

CodeDeployが「DeploymentGroup」を見て、
どのサーバーに配置するかを決定 します

⬇️
🏢
本番環境グループ
EC2: prod-web-1, prod-web-2
タグ: Environment=Production
🧪
ステージング環境
EC2: stg-web-1
タグ: Environment=Staging
💻
開発環境グループ
EC2: dev-web-1
タグ: Environment=Development
🔄
CodePipeline

🍕 ピザ店で例えると

注文受付から配達完了までの 全工程を管理するシステム 。店長のように全体を見渡す。

💻 AWS での役割

CI/CDの オーケストレーター 。ソースコード取得→ビルド→デプロイの流れを自動化・管理する。

📋 主な設定項目

• パイプライン名
• 各ステージの定義
• ステージ間の接続
• 実行トリガー(プッシュ時など)

🚀
Deploy Stage

🍕 ピザ店で例えると

「このピザを配達して!」という 配達指示 。何を使って配達するか(バイク?車?)を決める。

💻 AWS での役割

パイプラインの中の1ステージ。 どのデプロイサービスを使うか (CodeDeploy, ECS, S3など)を指定する。

📋 主な設定項目

• デプロイプロバイダー選択
• アプリケーション名
DeploymentGroup名
• 入力アーティファクト

🏘️
DeploymentGroup

🍕 ピザ店で例えると

「〇〇地区の5軒」という 配達エリア・届け先リスト 。どこに届けるかの定義。

💻 AWS での役割

CodeDeployの設定 の一部。デプロイ先のEC2インスタンスやLambda関数を定義する。

📋 主な設定項目

• ターゲットEC2のタグ条件
• Auto Scaling グループ
• デプロイ設定(方式)
• ロードバランサー設定

📋 デプロイ実行の流れ(Step by Step)

1
パイプラインがDeploy Stageに到達
Source Stage、Build Stageを経て、いよいよデプロイの番。
ビルドされたアーティファクト(ピザ)が準備完了。
🍕 ピザが焼き上がって、配達の準備OK!
2
Deploy StageがCodeDeployを呼び出す
Deploy Stageに設定された「CodeDeploy」プロバイダーが起動。
設定されたアプリケーション名とDeploymentGroup名を参照。
🛵 「〇〇配達員さん、この注文お願い!」と配達を依頼
3
CodeDeployがDeploymentGroupを参照
CodeDeployは指定されたDeploymentGroupの設定を確認。
「どのEC2インスタンスにデプロイするか」を特定。
📋 配達員が配達先リストを確認!「今日は〇〇地区の3軒だな」
4
ターゲットインスタンスを特定
DeploymentGroupのタグ条件やAuto Scalingグループに基づいて、
実際のデプロイ先インスタンスを特定。
🏠 「Environment=Production のタグがついたサーバーは...この3台!」
5
CodeDeploy Agentがデプロイ実行
各EC2上のCodeDeploy Agentがアーティファクトをダウンロードし、
appspec.ymlに従ってデプロイを実行。
🍕 ピザを各家庭に配達!「お届け物でーす!」
6
デプロイ完了・結果をPipelineに報告
全インスタンスへのデプロイが完了したら、
結果をCodePipelineに報告。成功/失敗がパイプライン上に表示。
✅ 「配達完了しました!」と本部に報告

⚙️ 設定例(CodePipeline + CodeDeploy)

📄 CodePipeline の Deploy Stage 設定(YAML)
# 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 の設定(CloudFormation)
# 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アプリケーション作成後
💡 設計のベストプラクティス
1. 環境ごとにDeploymentGroupを分ける:
開発・ステージング・本番で別々のDeploymentGroupを作成。タグで明確に区別しよう。

2. 命名規則を統一する:
{アプリ名}-{環境名}-deployment-group のような命名規則で管理を楽に。
例: myapp-production-deployment-group

3. パイプラインは1本で複数環境に展開:
1つのパイプラインに複数のDeploy Stageを設置し、
ステージング→承認→本番のように段階的デプロイが実現できる。

4. タグ設計は慎重に:
DeploymentGroupのタグフィルターが間違っていると、
意図しないサーバーにデプロイされる危険あり!本番前に必ず確認。

5. ロールバック設定を忘れずに:
DeploymentGroupの設定で自動ロールバックを有効化しておくと安心。
デプロイ失敗時に自動で前のバージョンに戻せる。

❓ よくある質問(FAQ)

Q. Deploy StageでCodeDeploy以外も使える?
はい! Deploy Stageのプロバイダーには以下が選べます:
CodeDeploy :EC2/オンプレミス/Lambda向け
ECS :コンテナ向け(Fargate含む)
S3 :静的ファイルのデプロイ
Elastic Beanstalk :マネージド環境向け
CloudFormation :インフラのデプロイ
用途に応じて選択しましょう!
Q. DeploymentGroupは複数作れる?
作れます! 1つのCodeDeployアプリケーションに対して、
複数のDeploymentGroupを作成可能です。

典型的な使い方:
• 環境別:Development / Staging / Production
• リージョン別:Tokyo / Osaka / Singapore
• 用途別:WebServers / BatchServers / APIServers
Q. DeploymentGroupの名前を間違えたらどうなる?
パイプラインがエラーになります!
Deploy Stageで指定したDeploymentGroup名が存在しない場合、
「DeploymentGroup not found」エラーで失敗します。

対策:
• CloudFormationで両方を一緒に管理する
• 命名規則を統一して間違いを防ぐ
• デプロイ前にAWSコンソールで存在確認
Q. タグ条件に一致するEC2が0台の場合は?
デプロイは成功扱いになることも!
対象が0台でも「デプロイ完了」となる場合があるので注意。

対策:
• デプロイ前にターゲット台数を確認するステップを追加
• CloudWatchでデプロイ対象台数を監視
• Auto Scalingグループを使用している場合は最小台数を設定

🎓 まとめ

🍕 宅配ピザ = CI/CDパイプライン

Deploy StageとDeploymentGroupは
「配達指示」と「届け先リスト」 の関係!
両方揃って初めてデプロイが完了します

🔄
CodePipeline

全体の流れを
管理する
オーケストレーター
🚀
Deploy Stage

「デプロイして!」
という
指示・命令
🏘️
DeploymentGroup

「どこに届けるか」
という
届け先の定義

🎯 覚えておくべきこと:

① Deploy StageはCodePipelineの一部
② DeploymentGroupはCodeDeployの一部
③ Deploy StageがDeploymentGroupを 参照 して連携
④ 名前の一致が超重要!🔑

Created by SSuzuki1063

AWS SAP Learning Resources