kakakakakku blog

Weekly Tech Blog: Keep on Learning!

CodeDeploy いらず!ECS Blue/Green デプロイを試す

2025年7月17日に Amazon ECS の新機能「Amazon ECS Blue/Green Deployment(Blue/Green デプロイ)」がリリースされた🎉

AWS Lambda 関数を使ったライフサイクルフック・ベイク時間・テストトラフィック・Amazon ECS Service Connect サポートなどなど,便利な仕組みもあるけど,今回はシンプルに ALB (Application Load Balancer) を使って Blue/Green デプロイを試してみた.

aws.amazon.com

今までは AWS CodeDeploy を使った Blue/Green デプロイを使うことができたけど,ドキュメントを読むと既に We recommend that you use the Amazon ECS blue/green deployment. と書かれていて,リリース直後から Amazon ECS ネイティブの Blue/Green デプロイを使うことが推奨されていた💡

docs.aws.amazon.com

Amazon ECS Service 設定

Amazon ECS Service のデプロイ戦略で「ブルー/グリーン」を選ぶ.既存の Amazon ECS Service で「ローリングアップデート」から変更することもできるようだった.あくまでお試しだからベイク時間は短め.ちなみに「トラフィック移行」のところは すべてのトラフィックを更新済みの Amazon ECS コンテナに一度に移行 という選択肢しかなかった.よって,現時点では段階的にトラフィックを移すカナリアデプロイではなく「Red/Black デプロイ」になる.

さらにロードバランシング設定で IAM Role を指定する.IAM Role に関しては以下のドキュメントを参考にした.

docs.aws.amazon.com

そして「ターゲットグループ」「代替ターゲットグループ」bluegreen を指定する.ALB 関連のリソース(ターゲットグループ・リスナールール)に関しては以下のドキュメントを参考にした.ちなみに今回はドキュメントの例を参考に「本番リスナールール」「優先度: 1」を指定したけど,もちろん「優先度: default」でも OK👌

docs.aws.amazon.com

ちなみにドキュメントには Amazon ECS Service JSON 定義のサンプルも載っててこれも参考になる \( 'ω')/

{
    "loadBalancers": [
        {
            "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/primary-target-group/abcdef123456",
            "containerName": "container-name",
            "containerPort": 80,
            "advancedConfiguration": {
                "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:account-id:targetgroup/alternate-target-group/ghijkl789012",
                "productionListenerRule": "arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/abcdef123456/listener/ghijkl789012/rule/mnopqr345678",
                "roleArn": "arn:aws:iam::123456789012:role/ecs-elb-role"
            }
        }
    ],
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "maximumPercent": 200,
        "minimumHealthyPercent": 100,
        "bakeTimeInMinutes": 5
    }
}

Blue デプロイ

検証のために数回 Blue/Green を切り替えた後のキャプチャになるけど,Blue 状態のときは ALB (Application Load Balancer) のリスナールールで blue 100%green 0% という加重ターゲットグループ設定になっていた.

blue : 100 (100%)
green : 0 (0%)

サービスデプロイというデプロイ状況の詳細を確認する画面もあった👌

デプロイしたアプリケーション Amazon ECS Sample App はドキュメントに載っているサンプルを参考に背景色を青くした.

docs.aws.amazon.com

Green デプロイ

そしてもう一度 Amazon ECS Service をデプロイすると,今度は green 100%blue 0% という加重ターゲットグループ設定になっていた.ちゃんと切り替わってる❗️

green : 100 (100%)
blue : 0 (0%)

ちなみにデプロイ中に 現在のデプロイ段階 という表示を見ていたら,時間の経過で以下のように推移していた📝

  • スケールアップ前
  • スケールアップ
  • スケールアップ後
  • テストトラフィック移行
  • テストトラフィック移行後
  • 本番トラフィック移行
  • 本番トラフィック移行後
  • ベイク時間
  • クリーンアップ

詳しくはドキュメントの Deployment lifecycle stages に載っている(今回は RECONCILE_SERVICE のみ表示を確認できなかった).

docs.aws.amazon.com

同じくデプロイ状況の詳細を確認すると green に切り替わっていた👌

そして ALB (Application Load Balancer) にアクセスすると,ちゃんと背景色が緑になったアプリケーションに切り替わっていた.

まとめ

まずは Amazon ECS Blue/Green Deployment(Blue/Green デプロイ)の基本的な流れを試してみた❗️今後使う機会が増えそうな機能なので,もっと細かいところも試していくぞ〜 \( 'ω')/

関連記事

aws.amazon.com