ECSで実現する「ネイティブBlue/Greenデプロイ」検証レポート

こんにちは、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 「ターゲットグループの作成」で作成したものを選択

 

 

動作確認

初期状態:Blue環境が稼働

まずはリビジョン1のタスクのみが動いている状態です。

 
ECSへcurlでアクセスすると、以下の結果「BLUE」が返ってきました。
#切替前
[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 側へ「本番トラフィック」ラベルが移動しています。 これは新タスクのヘルスチェックが成功した直後に、トラフィックが切り替わったことを示しています。

 

コマンドでも、このタイミングですでに応答が「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に関するおすすめ記事

【Amazon Bedrock】ナレッジベースを用いた社内資料管理ーめざせ生産性向上ー
社内資料の管理、効率的ですか?様々な形式の文書が散在し、必要な情報を探すのに時間を取られていませんか? ファイルサーバーの奥底に埋もれどこにあるか分からない、バージョン管理が混乱する、などといった課題を抱えていませんか?これらの非効率は、業務の生産性低下に直結します。 今こそ、社内資料の一元管理体制を見直しましょう!ということで、AWS Bedrockのナレッジベースを用いた資料の一括管理およびその検索方法をご紹介します!
AWS DataSync を用いて Amazon EC2 の共有フォルダを Amazon FSx に転送してみた
本記事では、ファイルサーバーのデータを Amazon FSx へ移行するシナリオを想定し、AWS DataSync を使った具体的な設定手順をスクリーンショットを交えながら、一つひとつ丁寧に解説していきます。
Gemini活用!フローチャートからチャットボット(Amazon Lex)を自動構築してみた
Geminiを活用しExcelからAWS LexのTerraformコードを自動生成する手法を解説。IAMロールや会話分岐の自律的な判断など、AIによる開発効率化の実例を紹介。インフラ構築の工数削減に役立つエンジニア必見の活用術です。
AWS FSx for Windowsで重複排除を試してみた!設定から検証まで徹底解説
Amazon FSx for Windowsの重複排除機能を徹底解説!マウントから有効化、スケジュール設定、動作確認までの手順を実機検証を交えて紹介します。ストレージコスト削減に不可欠なデータ重複除去の具体的な設定方法や削減指標を詳しくまとめました。
著者について

保有資格:健康マスター, FP3級
健康リテラシーと金融リテラシーの高さが強みのエンジニアです

坂木をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウドその他技術ナレッジ
シェアする
×
タイトルとURLをコピーしました