こんにちは、SCSKの坂木です!
ECSのBlue/Greenデプロイといえば、これまではAWS CodeDeployを利用するのが一般的でした。しかし、現在はECSサービスの標準機能だけで、2つのターゲットグループを切り替えるBlue/Greenデプロイが可能です。
今回はこの「CodeDeployいらず」なECSネイティブBlue/Green機能を、全設定工程のキャプチャとともに徹底解説します。
ターゲットグループの作成
まずはトラフィックを流し込むターゲットとなる、ターゲットグループを作成します。
起動タイプにFargateを使用するため、ターゲットの種類は IP を選択します。
今回は、test-tg-blue と test-tg-green の2つを用意しました。デプロイごとにECSがこれらの宛先を自動で入れ替えてくれます。
ロードバランサー(ALB)の作成
次に、入り口となるALBを作成します。検証のため内部(Internal)向けとして構成しています。
デフォルトアクションとして、test-tg-blue に「100%」、test-tg-green に「0%」の重みを設定しました。この重みの比率をECSが直接操作してBlue/Greenデプロイを行います。
タスク定義の設定
コンテナの動作仕様を定義するタスク定義を作成します。
リソース割り当てやイメージ指定など、基本的な設定を行います。
ECSクラスターの作成
サービスをデプロイするための箱である、クラスターを作成します。
今回は、test-cluster を作成しました。ここからサービスを追加して、実際のアプリケーションを稼働させていきます。
ECSサービスの作成
ここが今回の肝となる、ECSサービスの設定です。以下の設定値でサービスを作成しました。
ロードバランシング設定で、既存の2つのターゲットグループを指定します。これにより、ECSが「どの2つのTGを交互に使うか」を認識します。
| 項目 | 設定値 | 備考 |
|---|---|---|
| サービス名 | test-taskdef-service01 | 任意の名称 |
| 起動タイプ | FARGATE | |
| デプロイコントローラー | ECS (ブルー/グリーン) | ここが重要。 CodeDeployなしでBGデプロイ実現する設定 |
| デプロイベイク時間 | 15分 | 切り替え後に旧タスクを維持する時間 |
| ロードバランサー | test-alb-ecs | 「ロードバランサー(ALB)の作成」で作成したものを選択 |
| ターゲットグループ1 | test-tg-blue | 「ターゲットグループの作成」で作成したものを選択 |
| ターゲットグループ2 | test-tg-green | 「ターゲットグループの作成」で作成したものを選択 |
#切替前 [root@ip-10-1-4-25 bin]# curl http://[ALB-DNS-Name] <h1>This is the Blue environment (v3)</h1>
切り替えの瞬間:新旧タスクの並走
新しいリビジョンをデプロイすると、Green環境(リビジョン2)が起動します。
画像を確認すると、リビジョン1と2が並走していることを確認できました。
また、test-tg-green 側へ「本番トラフィック」ラベルが移動しています。 これは新タスクのヘルスチェックが成功した直後に、トラフィックが切り替わったことを示しています。

# 2つ稼働中 [root@ip-10-1-4-25 bin]# curl http://[ALB-DNS-Name] <h1>This is the GREEN environment (v3)</h1>
完了:旧環境の削除
切り替え完了後、設定した「ベイク時間」のカウントが始まります。この間は旧環境が維持されているため、新環境で予期せぬエラーが出た場合でも、ロールバックする余地が残されています。
ベイク時間が経過すると、旧タスクは役目を終えて自動的に削除され、最終的にはリビジョン2のタスクだけが残ります。
コマンドで確認すると、もちろん「GREEN」となっております。
# 2→1台稼働になった後 [root@ip-10-1-4-25 bin]# curl http://[ALB-DNS-Name] <h1>This is the GREEN environment (v3)</h1>
まとめ
本ブログでは、AWS CodeDeployを使わない ECSネイティブなBlue/Greenデプロイ を紹介しました。
今回の検証を通じて得られたポイントをまとめます。
- デプロイ管理の集約
CodeDeploy等の外部サービスを介さず、ECSサービスの設定のみでデプロイ戦略を完結できる。 - シンプルな構成
通常のCodeDeploy方式で必要となるAppSpecファイルや、専用のIAMロールの管理が不要。 - 自動化されたライフサイクル
新環境の起動、ALBの重み変更、そしてベイク時間を経た旧環境の自動削除までの一連の流れを、ECSが自律的に制御してくれる。
ECS Fargateを運用しており、「Blue/Greenは導入したいけれど構成はシンプルに保ちたい」という方には、間違いなくこのネイティブ機能が第一選択肢になるはずです。
▼ AWSに関するおすすめ記事
















