CodeDeploy不要でECSのBlue/Green Deploymentの設定ができるようになったので早速検証
事前準備
Blue/Green切り替えようのTargetGroupを作成し、ALBのリスナールールを設定
b, gのTargetGroupを用意し、bの方の重み付を100にしておく
ECS Service設定
ECSのServiceの設定画面からブルー/グリーンを設定
ベイク時間やデプロイライフサイクルフックは一旦無視
補足
ベイク時間
-> その時間内であればロールバック可能
デプロイライフサイクルフック
-> Lambdaの実行結果によってBlue -> Greenへの切り替えが可能になり、切り替えのタイミングをコントロールできる
ロールはLBを操作するためのロールが必要で以下を設定した
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeRules"
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets"
"elasticloadbalancing:ModifyRule",
リスナーに本番用のトラフィックを受けるルールを設定し、ターゲットグループに事前準備で作成したb, 代替の方にgを設定
テストリスナーは切り替え前にトラフィックを送るためのリスナーで、今回はデプロイライフサイクルフックを設定しておらず即時切り替えなので不要
注意点
terraformで設定する場合はproviderのバージョンに注意
テストリスナー設定に関するバグがあるのでバージョンを6.6.0以上にする必要あり
https://github.com/hashicorp/terraform-provider-aws/issues/43552
デプロイ実施
新しいバージョンのタスクをデプロイする前はbの方に1つタスクが起動している状態
新しいバージョンのタスクをデプロイするとステータスが進行中になり、
gの方に新しいタスクが起動
その後、bの方に接続されていた古いタスクは自動で削除され、削除完了後デプロイステータスが更新され完了
切り替えのタイミングを制御したい場合はデプロイライフサイクルフックの設定が必要だがLambdaの管理が発生してしまう
ただし、設定すればテストを実行して問題なければ切り替え、などより安全にデプロイができる
今後の機能追加に期待!