今回はスポットインスタンスの入門記事を書きますが、「永続的」スポットインスタンスに対する焦点が少し強めの内容です。

2022年8月時点の情報を元に記載しています。
スポットインスタンス?
Amazon EC2 スポットインスタンスを使うと、AWS クラウド内の使用されていない EC2 キャパシティーを活用できます。スポットインスタンスは、オンデマンド料金に比べ最大 90% の割引料金でご利用いただけます。

スポットインスタンスだからといって、性能に違いはありません。オンデマンド等の需要が発生した場合、スポットインスタンスは「中断」される可能性があります。現在はオンデマンドインスタンスの価格安定化が図られており、中断される可能性はかなり減ったようです(数ヶ月以上、中断無しで連続利用できることもある)。

*2017年11月より価格は安定化しました。それ以前は入札制という制度があり、1日に何回も価格が変動して、オンデマンド価格を超えることもあったようです。

インスタンススポットとして起動させるには?
スポットインスタンスとして起動させるには、起動ステップ3「インスタンスの詳細の設定」でスポットインスタンスのリクエストにチェックを入れます。さらに永続的リクエストのチェックを入れると、停止・再開が可能になります(詳細は後半に書きます)。


既存のオンデマンドEC2をスポット化は出来ないため、AMI化してから起動させましょう。
適用しやすい環境とアンチパターン
EC2の中断が発生しても問題ない環境には適用しやすいです。例えば、テスト環境であったり、ステートレスな構成で組まれている環境です。
一方でスポットインスタンスに適さないアンチパータンは次の通りです。
中断通知のチェック
需要発生時にいきなりスポットインスタンスが中断されることはありません。中断の2分前に次の方法で知ることが出来ます。
- インスタンスメタデータ
→ http://169.254.169.254/latest/meta-data/spot/instance-action - CloudWatch Events
→ Spot Instance Interruption Warning
なお、インスタンスメタデータの場合、中断通知のパスがあるため、「5秒毎」にチェックするのが推奨となっています。中断通知を確認した後は、必要であれば安全停止に向けて処理を組む必要があります。

中断通知から2分経過すると・・・?

OSレベルのシャットダウン処理が動きます。いきなり停止(電源OFF相当)ではないため安心ですね。なお、OSレベルのシャットダウン処理に時間がかかる場合は、強制停止が動作するとのことです。
スポットフリートでEC2群を組んで、スポット数を後から3→2等に変更すれば、中断を任意タイミングで発動させることが出来ます。
2021年10月頃より、AWS Fault Injection Simulator (FIS)でスポットインスタンスの中断テストが行えるようです。こちらのほうがテストしやすいかもしれません。
<リバランス通知>
中断通知よりも早く通知してくれる「リバランス通知」というものもあります。これはAWS側で需要トレンドを判断して中断可能性が高まったときに通知してくれるものです。(ただ、何分前に通知してくれるかは不明ですし、もしかすると状態によっては通知はされないかもしれません)。
永続的・非永続的の違い
従来(~2020年)スポットインスタンスは停止させると「終了」してしまいましたが、「永続的」なスポットインスタンスとして起動させると「終了」することは無くなりました。
ー | 非永続 | 永続的 |
---|---|---|
停止操作 | 終了する | 停止する |
終了操作 | 終了する | 終了する(*1) |
中断 | 終了する | 停止する(*2) |
再起動 | ○ | ○ |
イメージ作成 | ○ | ○ |
終了保護 | × | × |
インスタンスタイプ変更 | × | × |
(*1) 永続的な場合、EC2を終了しても暫くした後に、同じAMIをベースとしたEC2が復活します。永続的スポットインスタンスの終了はEC2のスポットリクエストメニューから解除する必要があります。
(*2) 需要発生によりEC2は自動停止しますが、キャパシティが復活した後、自動的に開始されます。(一方でユーザが停止した場合は手動で開始する必要がある。)この辺りは公式サイトにも記述があります(https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-requests.html)。
停止頻度など備忘録
~価格が安定したとは言ったが、供給が安定したとは言っていない~
つまり、価格が安定していても、瞬間的な変動はありえるため、残念ながら1日に数回停止することは普通にある。もちろん運が良ければ、数日間連続で無停止で使えることもある。この特性を改めて理解した上でスポットインスタンスは使う必要がある。
まとめ
スポットインスタンスに関する概要、永続的を選択した場合の違いなどをご紹介しました。スポットインスタンスは現在では利用しやすくなっているため、計画的に利用してコストを抑えていきたいと思います。

最後までご覧いただき、ありがとうございました。
コメント