🦅

ECSの組み込み機能でB/Gデプロイが可能になったので、試したみた

に公開

はじめに

いつもの朝の日課でXを眺めていたら、AWS界隈の方々が「ECSの組み込み機能で、B/Gデプロイが可能になったぞ!うおおおおお」っと盛り上がっていました

https://aws.amazon.com/jp/about-aws/whats-new/2025/07/amazon-ecs-built-in-blue-green-deployments/

はじめは「ふーん。CodeDeployが不要になるんやー、便利やなー」位にしか感じてなかったのですが、少し深堀りしていくと、この組み込みのB/Gデプロイ機能

なんと!ServiceConnectを使っているECSサービスでのB/Gデプロイが可能 & ネイティブなサーキットブレーカーも使えるとのことじゃあ〜ないですか!

前者は、ECSサービス間通信手法でServiceConnectを選定するのに、ネガティブ要素になっていた「ServiceConnectを使っているECSサービスはローリングアップデートのみ」を解決してくれる

後者は、「GreenのECSタスクが何回も再起動する状態で、どんだけ頑張っても正常に立ち上がらない状況なのに、即時にデプロイ失敗させてロールバックしてくれない問題」を解決してくれる

これは嬉しい!

ただ、従来のB/Gデプロイは、ターゲットグループ(BlueとGreenで2つ)に対するターゲット登録/解除、ALBのリスナーの更新を自動で行うことで実現されていたので、組み込みのB/Gデプロイだと、どうなるか気になってので、試してみました!

試した内容

検証用のリソースは、アマQに適当に作成して貰う
作成して貰ったリソースの構成はこんな感じ

ロードバランサーと接続が有る、フロントエンドのECSサービスで、デプロイ戦略をローリングアップデートからB/Gに変更してみる

そうすると、ロードバランサーセクションに、従来のB/GデプロイでCodeDeploy側に設定が必要だったものと、ほぼ同じような設定が追加で必要になるので、ロードバランサーと接続が有るECSサービスに関しては、デプロイコントローラーがCodeDeployなのかECSかの違いなだけで、従来のB/Gデプロイと同様の動きになると思われる(Green用のリソースを用意するのが面倒だったので、実際には試してない笑)

ただ、冒頭でも述べたように、ネイティブなサーキットブレーカーが組み込みのB/Gデプロイでは使えるのと、今回の構成のような、ロードバランサーとServiceConnectの両方に接続があるECSサービスだと、従来のB/Gデプロイが使えないので、ロードバランサーと接続が有るECSサービスであっても、従来のB/Gデプロイを選択する必要はないと思われる

次に、ロードバランサーと接続が無い(ServiceConnectと接続のみ)、バックエンドのECSサービスで、デプロイ戦略をローリングアップデートからB/Gに変更してみる

こちらに関しては、デプロイオプション以外で必須の追加設定は不要な模様

この状態で、新しいデプロイを強制して、B/Gデプロイを試してみる

そうすると、ECSサービスのデプロイタブにサービスリビションなる表示が(デプロイタブの表示、他にも色々と変わってる)
ソースがBlue(旧バージョン)、ターゲットがGreen(新バージョン)

暫く待機すると、「現在のデプロイ段階」がベイク時間(Greenのタスクが起動して、トラフィック切り替えを待機している状態)に変化

ロードバランサーと接続が有るECSサービスの場合、このベイク時間でテストトラフィックリスナーを使って、Greenの動作確認を外部からWebアクセスして行なうことができるが、ロードバランサーと接続が無いECSサービスの場合は、これができない

その代わり、ServiceConnect間通信で、HTTPヘッダーを使用した、テストトラフィック用ルールを設けることができるようなので、ネイティブなサーキットブレーカー以外で、Greenの正常性を確認してから、安全にトラフィックを切り替えたい場合は、これが活用できそう

今回は、特にテストトラフィック用ルールは設定してないので、ベイク時間終了で自動でGreenにトラフィックが切り替わってデプロイ完了

具体的に、どのような仕組みでB/Gデプロイが実現されているのかは、ロードバランサーを使ったB/Gデプロイのように、コンソールからは確認することは難しいが、ServiceConnectは内部的にEnvoyを使っているので、EnvoyのB/Gデプロイ機能を使ってるのだろうと妄想

さいごに

B/Gデプロイは、安全なリリースを行うという観点において、非常に有用なデプロイ戦略でしたが、CodeDeployが必要だったり、ServiceConnectが使えないなどなど、若干な導入ハードルがありました

今回のアップデートで、特に問題(コスト問題とか)がなければ、ECSのデプロイ戦略はB/Gデプロイを選択するのが、標準になるかもしれませんね

Discussion