ASG(Auto Scaling Group)配下のインスタンスが複数同時に ALB ヘルスチェックに失敗した場合、ASG はそれらを同時にリプレイスするのではなく、段階的に置き換える。この挙動には「10% ルール」と「スロットリング」という2つの仕組みが関係している。

10% ルール

ASG は Unhealthy インスタンスを desired capacity の 10% ずつ しか置き換えない。

desired_capacity=2 の場合、10% = 0.2 → 切り上げで 1台ずつ になる。

AWS公式ドキュメント より:

Amazon EC2 Auto Scaling only replaces up to 10 percent of the group’s desired capacity at a time. It does this until all of the unhealthy instances are replaced.

If the size of an Auto Scaling group is small enough that the resulting value of 10 percent is less than one, Amazon EC2 Auto Scaling instead replaces the unhealthy instances one at a time. This might result in some downtime for the group.

置き換えの流れ

1台目を終了・代替起動 → 代替がヘルスチェックに合格するまで待つ → 2台目を終了・代替起動。

Instance A 終了 → 代替 A' 起動
                   ↓
              A' がヘルスチェック合格(数分)
                   ↓
              Instance B 終了 → 代替 B' 起動

変更方法

instance maintenance policy の MinHealthyPercentage で変更可能(0〜100%)。0 に設定すれば、容量が 0% まで落ちることを許容し、複数台の同時置き換えが可能になる。

スロットリング(10% ルールとは別の仕組み)

10% ルールは「一度に置き換える台数の上限」だが、スロットリングは「Unhealthy として認定する速度の制限」。

ALB が2台とも Unhealthy と報告済みでも、ASG 側が一度に何台を Unhealthy と認定するかを制限する。

同ドキュメントより:

Auto Scaling might still throttle the rate it marks instances as unhealthy. For example, if all instances in an Auto Scaling group are reported unhealthy by Elastic Load Balancing health checks and the load balancer is in the InService state, Amazon EC2 Auto Scaling might mark fewer instances unhealthy at a time. This provides you with time to fix the problem without Amazon EC2 Auto Scaling automatically terminating the entire group.

ALB とASG の Unhealthy の違い

ALB:  「Instance A = Unhealthy」「Instance B = Unhealthy」 ← 両方報告済み
  ↓
ASG:  報告を受け取る
  ↓
スロットリング: 「まず A だけ Unhealthy として処理する」 ← ここで絞る
  ↓
A を終了 → 代替起動
  ↓
スロットリング: 「次に B を Unhealthy として処理する」
  ↓
B を終了 → 代替起動

ALB レベルの Unhealthy(ヘルスチェック失敗の報告)と、ASG レベルの Unhealthy(終了・置き換えのトリガー)は別物。スロットリングは後者を制御する。

まとめ

仕組み 制御対象 ユーザーによる変更
10% ルール 一度に置き換える台数の上限 MinHealthyPercentage で変更可能
スロットリング Unhealthy として認定する速度 変更不可(AWS 側の制御)

10% ルールを無効にしても、スロットリングは残るため、複数台が完全に同時リプレイスされるかは AWS の内部判断次第となる。

いずれも グループ全滅を防ぐための保護機構 であり、AWS の意図的な設計。