COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

AWSコスト削減のためのスポットインスタンス活用術

スポットインスタンスって何?

スポットインスタンスは、AWSが用意している余剰リソースの一部(「スポットプール」としてある程度のリソースを割り当て)を、非常に安価で利用できるようにした購入オプションの1つです。Amazon EC2における他の購入オプションには、起動したいときに起動し不要な時にやめる「オンデマンドインスタンス=割引はありません」、1年あるいは3年といった単位で購入をコミットすることで割引が得られる「リザーブドインスタンス」、複数のインスタンスタイプやサイズにまたがるコミットで、リザーブドインスタンスをより柔軟にしたものともいえる「Savings Plans」がありますが、これらについては他のコラムに記載していますのでそちらをご覧下さい。

スポットインスタンスはオンデマンドインスタンスに比べて最大9割引と、圧倒的に安価なのが特徴ですが、一方、AWS側のキャパシティーの都合により、停止となる可能性があるため、これらに対応できる方法で利用する必要があります。本記事ではスポットインスタンスのユースケースやコスト削減効果について記載していきます。

スポットインスタンスの価格の実態は?

スポットインスタンスを利用していくにあたり、具体的にどのくらい割引効果が期待できるのか記載していきます。

割引の効果は?

大抵の場合はオンデマンドインスタンスの価格よりも低い価格であるため、大幅な割引効果が期待できます。具体的には、オンデマンドインスタンスと比較して平均70%程度、最大90%程度の割引効果が期待できます。なお、スポット価格の変動はEC2のコンソールから確認することができます。例えば、2022年7月27日現在において、スポット価格による割引率は下記のようになっています。

  • c3.large…オンデマンド価格と比較して72.00%の割引
  • r3.large…オンデマンド価格と比較して79.88%の割引
  • m6i.large…オンデマンド価格と比較して62.81%の割引

また、本記事ではEC2インスタンスのみ扱いますが、現在ではAWSのコンテナサービスである、ECS Fargateのインスタンスにも適用可能なFargate Spotという割引サービスも出ています。これにより、仮想サーバーだけでなくコンテナを利用している環境においてもスポット価格による割引の恩恵を授かることができます。

価格の上限は?

2017年ごろには、特定のインスタンスタイプにおいて、スポットインスタンスの入札料金がオンデマンド料金の10倍になるケースもありました。また、スポットインスタンスの利用が多い海外のリージョンにおいては入札価格が短期間で高騰するといった現象も起きていました。しかし、度重なるアップデートにより、現在の料金の仕様は下記のようになっています。

  • 入札価格は需給の長期的なトレンドに基づいて価格がより緩やかに調整される
  • スポットインスタンスの価格が、オンデマンド価格の90%を超えることがなくなる

したがって、価格が急激に高騰することもなく、オンデマンド料金と比較して確実に割引効果を得ることができるようになっています。

引用:https://aws.amazon.com/jp/blogs/news/running-web-applications-on-amazon-ec2-spot-instances/

AWS運用コストの削減のご相談も可能 運用コストを引き下げるスタイルズのAWS導入・移行サービスはこちら→

スポットインスタンスの「中断に備える」

価格面でメリットがあるスポットインスタンスですが、AWS側のキャパシティーの都合により、停止となる可能性があるため、予期せずインスタンスが終了するというデメリットもあります。このデメリットをいかに回避するかが、スポットインスタンス活用のカギとなります。

スポットインスタンスの終了2分前には、警告が発せられます。この2分前の警告をうまく活用し、データのエクスポートやスナップショットなどの取得をすることが、スポットインスタンス活用のカギです。どのように中断に備えればいいのでしょうか。

インスタンスメタデータを活用する

EC2インスタンスには、インスタンスのIDや名前などの情報が格納される”インスタンスメタデータ”が取得可能です。スポットインスタンスの中断予定時刻は、EC2インスタンスから、https://169.254.169.254/latest/meta-data/spot/instance-action にcurlコマンドを発行することで取得可能です。cronなどで取得し、事前に検知するようにしましょう。

EventBridgeを活用する

元々はCloudWatch Eventsと呼ばれるサービスで、稼働中のサービスの状態に変化があった場合を検知・通知するサービスです。利用中のスポットインスタンスすべての中断通知を受信するため、判別のための処理が別途必要になりますが、中断を検知してLambda等の実行につなげることができます。

スポットインスタンスはどう使う?

スポットインスタンスはうまく活用すれば大きなコストメリットを得ることができます。具体的にどのようなユースケースに適しているのか、記載していきます。

短時間で利用して終了出来るような処理

たとえばバッチ処理等で短時間に大量にデータを処理するようなケースの場合、スポットインスタンスは適しています。ただし、終了時刻にクリティカルな場合は、スポットインスタンスが停止した場合に間に合わない場合もあるため、時間に余裕を持った設計にするといいでしょう。

冪等性を持った処理

冪等性(べきとうせい)とは、同じ処理を何度繰り返しても、同じ結果が得られるという性質のことを指します。この性質の大きな特徴としては、前提となる状態を気にしなくてよくなるという点があります。したがって、スポットインスタンスのように処理の中断が起きても再開・再実行を行うことが容易であり、スポットインスタンスで実行する処理に向いています。具体的には機械学習におけるデータの学習や、処理、データ分析におけるバッチ処理などが該当します。

大量のインスタンスを必要とする処理

ゲームアプリケーションのテスト環境など、大量のサーバーを短時間で大量に必要とする場合は、オンデマンドインスタンスは高額になりますし、リザーブドインスタンスは適用できません。このようなケースにおいては、スポットインスタンスで環境を用意することでコストの大幅な削減を行うことができます。

ただし、テストを実行するメンバーが、スポットインスタンスで構成された環境であることを十分に理解したうえで実行するといいでしょう。
また、これらの方法に合わせて、SpotFleetやAutoScalingグループを合わせて活用すると、スポットインスタンスをより友好的に使用することができます。

AWS運用コストの削減のご相談も可能 運用コストを引き下げるスタイルズのAWS導入・移行サービスはこちら→

SpotFleetやAutoScalingグループ機能を使う

SpotFleetとは、スポットインスタンスの買い方の一種です。事前にインスタンスサイズやメモリなどの条件を指定しておくと、AWSがスポットインスタンスの価格を監視して、条件に合う場合はEC2を起動してくれる機能です。

また、AutoScalingは一般的にサーバ負荷に応じて自動的にサーバ台数を増減してくれる機能ですが、スポットインスタンスはAuto Scalingでも利用することができます。これらを組み合わせ、繁忙期に一時的に必要なサーバーをスポットインスタンスで確保することで、EC2インスタンスの利用料を大幅に下げるといったことが可能です。CloudWatchとの連携が可能となるため、幅広く、かつ柔軟な構成をとることが可能です。具体的な構成としては、

  • EC2のCPU使用率に基づき、一定の使用率になったらスポットインスタンスを追加する
  • ELBの応答時間やリクエスト数をもとに、毎秒指定の閾値を超えたらスポットインスタンスを追加する
  • 処理するデータをSQSに集め、SQSのキュー数が一定以上になったらスポットインスタンスを追加する
  • オンデマンドインスタンスのとスポットを比率を指定して一つのAutoScalingグループの構成を行う

といった具合です。インスタンスタイプもより柔軟に選択することができるため、一般的なWebアプリケーションから、機械学習の処理まで、様々なユースケースに対応することが可能です。

まとめ

スポットインスタンスは停止するリスクがあるため、AWSのサービスの中でもなかなか手が出にくい種類の一つだと思います。一方で、海外では非常に活用が進んでおり、コスト削減の効果も非常に絶大です。導入や運用においては様々な考慮点がありますが、要件に応じて適切に運用方法を選択すると、AWSの利用料を大幅に削減することができます。不明な点はAWS専業のベンダーに相談してみてもいいでしょう。