継続的なサービス提供が可能なスポットプール数を教えてください

2023.05.18

困っていること

弊社では、コスト削減の一環として様々なワークロードへスポットインスタンスの活用を検討しています。 現在 EC2 Auto Scaling を利用して Web サーバーを運用中です。
こちらは、全てオンデマンドインスタンスで起動中のため RI や Savings Plans と合わせてスポットインスタンスを活用してコスト削減する予定です。
一方、スポットインスタンスの懸念点として、対象インスタンスタイプの EC2 サービスに空きキャパシティがなければ「起動できない」「中断される」などがございます。
Auto Scaling の属性ベースタイプ選択を利用して、幅広いインスタンスタイプからスポットインスタンスを選択して起動する予定なのですが、どのくらいのスポットプール数が良いのか教えてください。
※スポットプール数 = インスタンスタイプの数 x AZ の数

参考情報

どう対応すればいいの?

参考情報に記載の通り、スポットインスタンスを活用する際のベストプラクティスを紹介してます。

  1. 多様なインスタンスタイプを混ぜる
  2. 複数のアベイラビリティゾーンを使う
    *Auto Scaling グループの作成時には、特別な理由がない限りそのリージョンで使⽤可能なすべての AZ が含まれるようご検討ください。
  3. スポットインスタンスの中断に備える
  4. Auto Scaling グループやフリート機能を使う
  5. price-capacity-optimized 配分戦略を使う
  6. キャパシティリバランシングを使う

参考情報(P8)

上記 1.2. の利用を前提に、AWS ではスポットプール数について最低 20、可能なら 30 を⽬指すことをお勧めしてます。
※スポットプール数 = インスタンスタイプの数 x AZ の数

他社様の事例紹介 でも、スポットプール数を 20 にしたところサービス提供を継続できるようになったとあることからも、ご検討ください。

ステートレスなサーバー群をすべてスポットインスタンスで構成するために、DeNA様では最終的に使用するスポットプールを20プールまで引き上げました。これは例えばある時点で、北バージニアリージョンの5つのアベイラビリティゾーンに対して、c5.2xlarge, c5.4xlarge, c5d.4xlarge, c5.9xlargeの4種類のインスタンスタイプを定義している状態を指し、このときのプール数は 5 x 4 = 20プールと計算されます。
次の図の横軸は時間、縦軸は起動したインスタンス台数を示し、それぞれのインスタンスがどのスポットプールから起動されたかが色分けされて示されています。20個ものスポットプールを拡充しておくことで、一部のスポットプールのキャパシティが十分にスポットインスタンスを供給できなかった場合にも、他のスポットプールで起動されたスポットインスタンスにより、サービス提供を継続できるようになっています。

参考情報(P12,13)

参考資料