概要
Amazon EC2スポットインスタンスとは、Amazon Web Services (AWS) が保有する余剰のEC2コンピューティングキャパシティを、オンデマンド価格と比較して最大90%という大幅な割引価格で利用できる仕組みです。
基本的な仕組み
- 需要と供給: EC2インスタンスの価格は、特定のインスタンスタイプとアベイラビリティーゾーンにおける需要と供給によって変動します。
- 中断: AWSがそのキャパシティを必要とした場合(オンデマンドユーザーからの需要が増えた場合など)、スポットインスタンスは2分前の通知をもって中断(停止または終了)される可能性があります。
この「いつ中断されるかわからない」という特性と引き換えに、劇的なコスト削減を実現できるのが最大の特徴です。
| 種類 | 特徴 | コスト |
|---|---|---|
| オンデマンドインスタンス | いつでも起動・停止でき、中断されない。使った分だけ秒単位で課金。 | 標準価格 |
| リザーブドインスタンス | 1年または3年の長期利用をコミットすることで割引を受ける。 | 割引価格 |
| スポットインスタンス | AWSの余剰リソースを利用。中断の可能性と引き換えに大幅な割引。 | 最大90%割引 |
ユースケース
スポットインスタンスは、中断されても問題ない、あるいは中断に耐えられるように設計されたワークロードに最適とされています。
スポットインスタンスに向いているユースケースは公式サイトスポットインスタンス ユースケースを参照頂ければと思います。
逆に向いていないユースケースとしては以下のようなものがあるかと思います。
- データベース: 常に稼働し、データの整合性が最優先されるデータベース(例: MySQL, PostgreSQLのプライマリサーバー)など。
- 中断が許されないクリティカルなシステム: 企業の基幹システムや、常時稼働が求められる単一のWebサーバーなど。
- 長時間かかるステートフルな処理: 中断時に進捗を保存できず、最初からやり直しになるような処理。
料金比較
本記事の料金比較は以下の条件で行います。リージョンやインスタンスタイプ(アベイラビリティーゾーンによっても異なる)が変わるとスポットインスタンスの割引率も異なる点は注意しましょう。
- 東京リージョン
- インスタンスタイプ:t4g.micro
- オペレーティングシステム:Linux
・リザーブドインスタンス料金
今回はリザーブドインスタンスの中でも、もっとも割引率が高い以下の条件で比較したいと思います。
- スタンダードリザーブドインスタンス
- 期間:3年
- 支払いオプション:全額前払い
上図は執筆時点のAmazon EC2 リザーブドインスタンス料金表から抜粋
・スポットインスタンスとオンデマンド料金
スポットインスタンスとオンデマンド料金の確認はスポットインスタンスの料金履歴の表示に記載される手順でAWSマネジメントコンソールから確認できます。
図の下、「日付範囲内の1時間あたりの平均」からオンデマンド料金とアベイラビリティーゾーンごとの料金と割引率が確認できます。

・オンデマンドと比較した費用削減
比較の結果、費用削減だけを見るとスポットインスタンスの方が優位であることがわかります。
そのため、中断(運用上の注意事項なども細々とはありますが)が許容できる環境においてはスポットインスタンスの検討を行うとよいでしょう。
リザーブドインスタンス:62%
スポットインスタンス:67.28%※もっとも安いアベイラビリティーゾーン
スポットインスタンスの利用手順
手順およびスポットインスタンスオプションの説明についてはスポットインスタンスリクエストを作成するを参照してください。
下図が上記手順の10のスポットインスタンスオプションの設定箇所になります。

また、より高度な使い方として、EC2 Auto Scaling Groupの設定でオンデマンドとスポットを混在させたり、スポットフリートで大量のインスタンスをまとめてリクエストしたりする方法などもありますので利用環境に応じて検討してみてください。
注意事項
個人的にオンデマンドインスタンスの運用と比較した際に、以下の事項については事前に認識しておいた方がよいかと思いました。
- スポットインスタンスは、直接インスタンスタイプを変更することはできない。
- インスタンスタイプを変更する際は「現在のインスタンスを終了させ、新しいインスタンスタイプで再度、スポットインスタンスリクエストを作成する」となります。
たとえば、一時的な検証利用で検証内容によって都度インスタンスタイプを変更したい場合、インスタンスタイプ変更の度に上記の作業を行う必要があり、運用上の手間が増えるためです。
まとめ
EC2スポットインスタンスは、その「中断」という特性を正しく理解し、それに耐えうるワークロードで利用すれば、インフラコストを劇的に削減できる非常に強力なツールです。
まずはテスト環境や開発環境のコスト削減から試してみることをオススメします。