[アップデート] デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました

デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました。これにより Desired Count (希望するタスク数) が 19 より小さい ECS サービスのロールバックがより迅速に行われることが期待できます!
2024.01.31

こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

Amazon ECS のローリングアップデートで利用される、デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました。

何が変わった

これまで、デプロイサーキットブレーカーの失敗しきい値の最小数は 10 でした。今回のアップデートにより、最小しきい値が 3 に変更されました。

Failure threshold

何が嬉しいか

ECS サービスにおける Desired Count (希望するタスク) が 19 より小さい場合に、デプロイ失敗時のロールバックがより迅速に行われます。また、デプロイにコケたタスクに対するコスト(時間とコンピューティング)削減が見込めます。

失敗しきい値について

デプロイサーキットブレーカーでは、「起動に失敗したタスク数」をトリガーに、以前のタスク定義リビジョンへロールバック仕組みです。しきい値は、ユーザー側で設定するのではなく、以下の計算式で決定されます。

Minimum threshold <= 0.5 * Desired Count => Maximum threshold

計算例

  • Desired Count が 1 のケース
    • 計算式:3 <= 0.5 * 1 => 200
    • しきい値:Minimum threshold (3) が適用される
  • Desired Count が 25 のケース
    • 計算式:3 <= 25 * 0.5 => 200
    • しきい値: 12.5 の切り上げで 13 が適用される
  • Desired Count が 400 のケース
    • 計算式:3 <= 400 * 0.5 => 200
    • しきい値: 200 が適用される
  • Desired Count が 800 のケース
    • 計算式:3 <= 800 * 0.5 => 200
    • しきい値: Maximum threshold (200) が適用される

Failure threshold

アップデート内容

今回のアップデートで、計算式に記載していた Minimum threshold が 10 から 3 に変更されました。

これにより、 Desired Count が 19 より小さい場合に、より迅速にロールバックが行われるようになりました。

Desired Count しきい値(アップデート前) しきい値(アップデート後) 差分(コスト浮いた)
1 10 3 7
2 10 3 7
3 10 3 7
4 10 3 7
5 10 3 7
6 10 3 7
7 10 4 6
8 10 4 6
9 10 5 5
10 10 5 5
11 10 6 4
12 10 6 4
13 10 7 3
14 10 7 3
15 10 8 2
16 10 8 2
17 10 9 1
18 10 9 1
19 10 10 0
20 10 10 0
21 11 11 0
22 11 11 0

やってみた

実際に、デプロイサーキットブレーカーを使って、今回のアップデートを体験してみようと思います。

以下のように、 Desired Count が 1 の ECS サービスを用意しました。(3つの新しいタスクが起動失敗したら、ロールバックする想定です。)

ローリングアップデートで置き換えするコンテナに exit 2 で、異常終了するよう設定します。

無事、デプロイに進んでいますね。

ECS サービス側でもデプロイが進行中であることが確認できます。ただし、新しいリビジョンのタスクはコケていることがわかります。

失敗したタスク数が 3 に到達すると、古いリビジョンのデプロイメントのステータスがロールバックされ、「プライマリ」に切り替わりました。想定通りですね。

まとめ

以上、「デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました」でした。今回のアップデートで、失敗した不毛なタスクが少なくなるのは、とても嬉しいですね。ぜひ、デプロイサーキットブレーカーこれからも使っていきたいです。このブログがどなたかの参考になれば幸いです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!