【DOP-C02】図解でわかるECSデプロイ手法まとめ:ローリングとブルー/グリーン(Canary・Linear・All-at-once)

はじめに

Amazon Elastic Container Service (Amazon ECS) でコンテナアプリケーションを運用する際、新しいバージョンのアプリケーションをどのように無停止・安全にリリース(デプロイ)するかは非常に重要な設計ポイントです。

この記事では、デプロイ方法の分類と概要、シナリオを説明していきます。

デプロイ方法の体系

ECSのデプロイ方法は以下のように分類ができます。

  1. ローリングデプロイ(ECSの標準デプロイ)
  2. ブルーグリーンデプロイ(AWS CodeDeployを使用する方法)
    • 2-1. 一括デプロイ(All-at-once)
    • 2-2. カナリアデプロイ(canary)
    • 2-3. 線形デプロイ(Linear)

    以下の章で、それぞれのデプロイ方法について解説をしていきます。

    デプロイ方法の詳細

    ローリングデプロイ(ECSの標準デプロイ)

    概要

    ローリングデプロイは、AWS CodeDeploy を使用せず ECS 単体の機能として実行される標準的なデプロイ方式です。

    同じ環境内で、新しいバージョンのタスク(コンテナ)を順次立ち上げ、正常起動(ヘルスチェック通過)を確認しながら古いバージョンのタスクを段階的に停止・入れ替えていきます。

    メリットとデメリット

    メリット

    • 追加リソースコストが最小限: サービスの「最小ヘルシー率」「最大率」パラメータの設定に基づき、最小限の追加タスク数で安全に入れ替えを行うため、コスト効率に優れています。
    • 構成がシンプル: ロードバランサーの複雑な設定や CodeDeploy 用の設定ファイル(AppSpec 等)を別途用意する必要がなく、手軽に導入可能です。

    デメリット

    • 新旧バージョンが一時的に混在する: デプロイ実行中の数分間は、旧バージョンのタスクと新バージョンのタスクが同時にトラフィックを受け付けるため、新旧アプリの混在が発生します。
    • ロールバックに時間がかかる: 途中でエラーが発生した場合、再度ローリング処理を通して古いタスクを順次起動し直すため、切り戻し完了までに時間がかかります。

    2. ブルーグリーンデプロイ

    概要

    ブルー/グリーンデプロイは、旧バージョン(ブルー環境)と新バージョン(グリーン環境)の 2 つのタスクセットを一時的に並行稼働させ、Application Load Balancer (ALB) や Network Load Balancer (NLB) のルーティングを切り替えることで安全に移行する方式の総称です。

    トラフィックのシフト(移行)方法に応じて、以下の 3 つの戦略を選択できます。

    2-1. 一括デプロイ(All-at-once)

    概要

    新環境(グリーン)のタスクセットを 100% 立ち上げて準備を完了させた後、すべてのトラフィック(100%)を一瞬で新しいタスクセットへ一括切り替えします。

    メリットとデメリット

    メリット
    • 新旧バージョンが混在しない: トラフィックが切り替わった瞬間に全員が新環境へ移行するため、新旧混在による不具合が起きません。
    • 超高速ロールバック: 万が一不具合が発生しても、ロードバランサーの参照先を旧環境へ戻すだけで即座に復旧できます。
    デメリット
    • コスト増: 一時的に旧環境と新環境の両方で 100% のタスクを起動するため、2 倍のリソースコストがかかります。
    • 影響範囲の大きさ: また、バグがあった場合に全ユーザーへ一括で影響が及びます。

    2-2. カナリアデプロイ(canary)

    概要

    最初に少量のトラフィック(例: 10%)だけを新環境に切り替えて一定時間(例: 5分や15分)様子見(検証)し、問題がなければ残りのトラフィック(90%)を一気に移行します

    メリットとデメリット

    メリット
    • 問題があった場合の被害の最小化: 万が一新バージョンに致命的なバグがあっても、影響を受けるユーザーを最初の少量(10% 等)のユーザーだけに限定可能。
    デメリット
    • デプロイ時間増: 移行完了までに一定の観察時間(待機時間)が必要です。

    2-3. 線形デプロイ(Linear)

    概要

    指定した時間間隔ごとに、均等な割合(例: 1分ごとに 10% ずつ、または 5分ごとに 25% ずつ)で段階的に新環境へのトラフィックを増やしていく方式です。

    メリットとデメリット

    メリット
    • 負荷のウォッチが可能: トラフィックをなだらかにシフトさせるため、新環境への急激な負荷増大を防ぎつつ、各段階でエラー(CloudWatch アラーム等)を検知した際に自動ロールバックを実行できます
    デメリット
    • デプロイ時間増: 0% から 100% までの完全移行完了までに最も時間がかかります。

    むすび

    今回の記事では、ECSにおけるデプロイ方法の比較を行いました。
    適切なデプロイ方法を選ぶことで大きな障害を避ける(あるいは障害における影響を最小限に抑える)ことが可能になります。

    それぞれのデプロイ方法のメリット・デメリットや、イメージについて整理を行い、実際の現場でも役立ていきます。