💭

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に割り振られることを確認しました。(ブラウザのリロード連打)

戻すことも考えて、ロールバックもしてみました。ロールバックのボタンで速やかにロールバックできることも確認できました。

GitHubで編集を提案

Discussion