AWS ECSがBlue/Greenデプロイをネイティブサポート!CodeDeployとの違いと注意点
2025年7月にリリースされた Amazon ECS 組み込みの Blue Greenデプロイ(新機能)について、従来のCodeDeploy版との違いや注意点について共有します。
-
今までCodeDeployのB/Gデプロイで対応していたが、ECSネイティブでB/Gデプロイが実装された
-
Amazon ECS で組み込みのブルー/グリーンデプロイが利用可能に (2025年7月17日)
https://aws.amazon.com/jp/about-aws/whats-new/2025/07/amazon-ecs-built-in-blue-green-deployments/ -
Amazon ECS の新しい組み込みブルー/グリーンデプロイを使用して、安全なソフトウェアリリースを加速
https://aws.amazon.com/jp/blogs/news/accelerate-safe-software-releases-with-new-built-in-blue-green-deployments-in-amazon-ecs/
-
ポイント
- 事前にIAMロール作成が必要。ECSサービスの作成でロールを選択する
- 参考) AmazonECSInfrastructureRolePolicyForLoadBalancers AWS 管理ポリシー
https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForLoadBalancers.html - 権限がないとECSサービス作成時にCloudFormationスタックが失敗する
- 参考) AmazonECSInfrastructureRolePolicyForLoadBalancers AWS 管理ポリシー
- ELB(ALB/NLB)のターゲットグループが2つ必要となる
- ELBのリスナーは1つでよい。リスナールールは2つ設定しておく
- 例)1つはデフォルト、もう1つは別条件(送信元IP等)でターゲットグループを2つ設定
- CodeDeployのB/Gデプロイではリスナーが2つ必要だった (テストポート)
- CodeDeployを使ったECSサービスはAWSコンソールからは作成できなくなった(CLI/CDKで対応)
AWSマネジメントコンソール操作の留意事項
-
ECSサービス作成時に、既存ELB(ALB/NLB) を選択する際に、ターゲットが表示されない場合は、リスナールールを追加して2つのターゲットグループをELBリスナーに設定しておくとよい
-
ECSサービス作成時にELBを作成するとインターネット公開になる
- HTTPSリスナーの場合、セキュリティポリシーが
ELBSecurityPolicy-2016-08
に設定されるため注意(脆弱なTLS1.0/1.1含む)→ 最新ポリシーに変更推奨 - 内部向けALB/NLBに未対応なため、あらかじめ作成しておくとよい
- HTTPSリスナーの場合、セキュリティポリシーが
-
ECSサービス作成時に、デフォルトで
パブリックIP
がオン
になっている。ELBを使う場合はオフ
にしよう(デフォルトセキュアならオフにすべきと思う) -
AWSコンソールからはCodeDeployのB/GデプロイでECSサービスは作成できなくなった (CLIなどで作成が必要)
簡単に作成できるようになった反面、未だにデフォルトでは脆弱な設定になりやすい(以前からデフォルトセキュアではない部分は改善されていない)
ECSによるデプロイが推奨となったため、ECSサービスの新規作成にCodeDeployは選択肢から外されている。
使ってみた感想
-
:リスナーが1つでよいため、シンプルなのは良い
- CodeDeploy版は2つのリスナーが必須だった。さらにCodeDeployトリガーを使って、Lambdaで動的にリスナールールを変えて、プロキシ経由の場合に事前動作確認できるように工夫していたが、ECS版ではリスナールールだけで対応できそう
-
:CodeDeployの「トラフィックを再ルーティングするタイミングを指定」相当の機能がコンソールにはない
- すぐにトラフィックが再ルーティングされるため、切り替え前に事前検証したくても、すでに本番トラフィックへ切り替わった状態になる
- 切り替え前に待機するには、デプロイライフサイクルフックでLambdaを設定し、一時待機させるなど対応が必要(CodeDeployから単純に移行できない)
- CodeDeployのようにコンソールからは設定や操作はできないため、別途作り込めば手動承認プロセスにも対応できるかも?
-
:CodeDeployの「元タスクセットの終了」相当ができない(デプロイ完了するには、ベイク時間を待つ必要がある)
- 大きな問題でないが、ロールバック時間をどうしようか悩む
ECS版B/GデプロイではLambdaが不要になると思ったら、さらに作り込みが必要そう...
CodeDeploy版のほうがコンソールの操作画面がわかりやすいく、ECS版はまだ機能が不十分と感じた。今後のエンハンスを期待する。
- 参考)AWS コンテナロードマップ: aws / containers-roadmap
- [ECS] [request]: Gradual Traffic Shifting for Blue/Green Deployments #2651
https://github.com/aws/containers-roadmap/issues/2651
- [ECS] [request]: Gradual Traffic Shifting for Blue/Green Deployments #2651
参考:まだCodeDeploy版B/GデプロイでECSサービスを作成したい
AWSマネジメントコンソールからはCodeDeployを使ったECSサービスは作成できなくなっているため、CLI/CDKなどで作成が必要となる。
AWS CloudShell から CLI で ECSサービス を作成することで、従来のCodeDeployを使用できる。まだ CodeDeploy版のB/Gデプロイを使いたい場合はご参考ください。
- 前提:ALB、ターゲットグループ、ECSタスク定義など事前に作成
- 環境変数でリソースを指定する
- 例)環境に合わせて設定してください
export REGION=ap-northeast-1 export ACCOUNT_ID=123456789012 export CLUSTER_NAME=cloud-example export SERVICE_NAME=service-example export TASKDEF_ARN=arn:aws:ecs:ap-northeast-1:123456789012:task-definition/example-task:1 export SUBNET_IDS=subnet-xxxxxxxxxxxx,subnet-xxxxxxxxxxxx,subnet-xxxxxxxxxxxx export SECURITY_GROUP_ID=sg-xxxxxxxxxxxx export TG_BLUE_ARN=arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/alb-example-tg-1/xxxxxxxxxxxxxxxx export CONTAINER_NAME=example-container export CONTAINER_PORT=80
- CLIでECSサービス作成を実行(CODE_DEPLOYを指定)
aws ecs create-service \ --cluster $CLUSTER_NAME \ --service-name $SERVICE_NAME \ --task-definition $TASKDEF_ARN \ --desired-count 0 \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[$SUBNET_IDS],securityGroups=[$SECURITY_GROUP_ID],assignPublicIp=DISABLED}" \ --load-balancers "targetGroupArn=$TG_BLUE_ARN,containerName=$CONTAINER_NAME,containerPort=$CONTAINER_PORT" \ --deployment-controller type=CODE_DEPLOY \ --health-check-grace-period-seconds 60 \ --enable-execute-command \ --region $REGION
- コマンドの詳細: AWS CLI Command Reference / aws ecs create-service
- CodeDeployはAWSコンソールから作成することができる
- BlueGreenデプロイの場合、ALB、リスナー2つ、ターゲットグループ2つを選択
参考
-
CodeDeploy いらず!ECS Blue/Green デプロイを試す
https://kakakakakku.hatenablog.com/entry/2025/07/19/082038 -
【AWS】Amazon ECSがBlue/Green Deploymentをネイティブサポートしたので簡単に調査してみる
https://techblog.ap-com.co.jp/entry/2025/07/28/161546
その他
- CodeDeployからECS のブルー/グリーン デプロイメントへの移行も用意されている
- Migrate CodeDeploy blue/green deployments to Amazon ECS blue/green deployments
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/migrate-codedeploy-to-ecs-bluegreen.html - 移行後、CodeDeployへのロールバックはできないらしい
- Migrate CodeDeploy blue/green deployments to Amazon ECS blue/green deployments