[アップデート] デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
Amazon ECS のローリングアップデートで利用される、デプロイサーキットブレーカーの失敗しきい値の最小数が 3 に変更されました。
何が変わった
これまで、デプロイサーキットブレーカーの失敗しきい値の最小数は 10 でした。今回のアップデートにより、最小しきい値が 3 に変更されました。
何が嬉しいか
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) が適用される
アップデート内容
今回のアップデートで、計算式に記載していた 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_)でした!