EC2 スポットインスタンスの起動確率を予測する - スポットプレースメントスコアの使い方と注意点
はじめに
検証用途で EC2 を起動する際、私はスポットインスタンスを単体でよく利用しています。最近、東京リージョンの T 系シリーズが頻繁に中断し、キャパシティ不足で起動できない状況が続きました。そこで「スポットプレースメントスコア」という機能の存在を知り、実際に使えるか検証してみました。
確認結果早見
- スコアは 1〜10 の数値で表され、10 が最も起動成功確率が高い
- 3 種類以上のインスタンスタイプを指定した場合のみ有効な結果を返す
- 単一インスタンスタイプでは正確なスコアが得られない(多くの場合スコア 3)
- スコアは現時点の情報を反映しており、取得直後の起動判断に有効
スポットプレースメントスコアとは
スポットプレースメントスコアは、指定した条件でスポットインスタンスが起動できる可能性を 1〜10 のスコアで示す機能です。スコア 10 は成功確率が高いことを意味しますが、スポットインスタンスの起動を保証するものではありません。
If you specify instance types, you must specify at least three different instance types, otherwise Amazon EC2 will return a low Spot placement score.
引用: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-sps-works.html
この機能は EC2 フリートや EC2 AutoScaling での複数インスタンス起動を想定しているようです。単一 EC2 インスタンスの起動用途では活用が難しいことがわかりました。
画像引用: AWS-Black-Belt_2023_Amazon-EC2-Spot-Basics_0430_v1.pdf
スポットインスタンスアドバイザーとの違いは
似たような機能に「スポットインスタンスアドバイザー」がありますが、これは何でしょうか?
スポットインスタンスアドバイザーは、過去30日間のスポット価格の履歴を表示する機能です。
下のキャプチャは東京リージョンの t3.micro の価格履歴です。スポット価格が上昇傾向にあることがわかります。私が最近頻繁に中断を経験したのは、オンデマンド需要の増加によりスポット向けキャパシティが減少したためでしょう。
つまり
スポットインスタンスアドバイザーは過去の傾向を示すもので、将来の中断率を予測するものではありません。
一方、スポットプレースメントスコアは現時点の情報を反映し、直近の起動確率を把握できます。ただし、複数インスタンスタイプを指定する場合にのみ正確なスコアが得られます。
スポットプレースメントスコアの確認手順
スポットプレースメントスコアは簡単に確認できます。手順は以下の通りです。
-
EC2 コンソールから「スポットフリートリクエストの作成」を選び、「スポットプレースメントスコアを計算する」をクリックします。
-
インスタンスタイプや必要条件を入力し、「プレースメントスコアの計算」をクリックすると結果が表示されます。
以上です。存在を知らない方も多いのではないでしょうか。私は知りませんでした。
単一インスタンスタイプでスコアを確認してみた
単一インスタンスタイプでスコアが低くなるとドキュメントに書いてありました。本当か確認するため、実際に検証してみました。
結果は次の通りです。
- 一般的な最新インスタンスタイプでは、多くの場合スコアは 3 となりました
- 古いインスタンスタイプ(例:m2.xlarge)ではスコア 1 と表示されました
- 単一インスタンスタイプでのスコア取得は、実用的な判断材料にはなりにくいことが分かりました
以下は検証時のスクリーンショットです。様々なインスタンスタイプでテストした結果、3 種類以上のインスタンスタイプを指定しない限り、有用なスコアは得られないことが確認できました。
単一インスタンスタイプのスコア表示例
古いインスタンスタイプのスコア表示例
まとめ
スポットプレースメントスコアは現時点の起動確率を確認できる機能です。
ただし、3 種類以上のインスタンスタイプ指定をしないと有用なスコアは得られません。
おわりに
Auto Scaling Group でスポットインスタンスを使用する場合、複数のインスタンスタイプを指定するのが一般的です。このとき「配分戦略」を設定でき、スポット価格と中断率を考慮して最適なインスタンスタイプを自動選択してくれます。ユーザーが手動でスポットプレースメントスコアを確認する機会は少ないかもしれませんが、こうした配分戦略の裏側でこのスコアが活用されているのではないかと思いました。