ECSのネイティブなカナリアデプロイをterraformで試した
ECSがリニアとカナリアに対応した
ECSがリニアデプロイとカナリアデプロイに対応しました。
Amazon Elastic Container Service (Amazon ECS) でリニアデプロイとカナリアデプロイがサポートされるようになりました。これにより、コンテナ化されたアプリケーションのデプロイ時に、より柔軟かつ細かな制御が可能になります。これらの新しいデプロイ戦略は、ECS に備わっているブルー/グリーンデプロイを補完するもので、お客様はアプリケーションのリスク許容度や検証要件に応じて、最適なトラフィックの切り替え方法を選べます。Amazon ECS でリニアデプロイとカナリアデプロイが標準機能としてサポート開始
これまではECSだけでBlue/Greenデプロイに対応していませんでした。Code Deployと連携しないと実現できなかったのです。
しかし、今年(2025年)夏にCode Deployと連携しなくてもBlue/Greenデプロイできるようになりました。とはいうものの、この時はGreenにデプロイして一定期間たったら、まとめてBlueに切り替えるということしかできませんでした。
それが、今回のAWSの対応により、振り分けるトラフィックの割合を定義して、徐々にBlueへの通信を増やしていくことができるようになりました。
試してみる
というわけで、試してみました。本番で使うのはカナリアなので、カナリアを試してます。
構築してもすぐに壊せるように、terraformで構築しました。
Blue/Greenデプロイをチョロっと変更でできる
Blue/Greenデプロイできるterraformの定義を少し変更するだけで、カナリアは実現できます。
Blue/Greenデプロイのterraformコード
Blue/Greenデプロイのterraform実装解説は以下の記事がとても詳しいです。そして、私はこのコードをほぼ使わせていただいています。
アップデートで追加されたECSのB/GデプロイをTerraformで実装してみました #AWS - Qiita
terraformコードの変更箇所
ECSの定義に以下のコードがあります。
deployment_configuration {
strategy = "BLUE_GREEN"
bake_time_in_minutes = 1
}
これを以下に変更します。
deployment_configuration {
strategy = "CANARY"
bake_time_in_minutes = 5
canary_configuration {
canary_percent = 50.0
canary_bake_time_in_minutes = 1
}
}
上記の定義はここのISSUEを参考にしました。
ECS - Linear and Canary deployments · Issue #44883 · hashicorp/terraform-provider-aws
変更すると、マネコンの表示は以下のように変化します。canary_bake_time_in_minutesの意味は以下の表示内容の変化から、推測しています。

canary_bake_time_in_minutesは「Canaryベイク時間」と表現されているので、カナリアの様子見時間的な位置付けと推測しました。(お試しなので、雰囲気の理解です。本番環境への適用時はちゃんと勉強しておかないと。)

この状態でデプロイして、50%でBlueとGreenに割り振られることを確認しました。(ブラウザのリロード連打)
戻すことも考えて、ロールバックもしてみました。ロールバックのボタンで速やかにロールバックできることも確認できました。

Discussion