Amazon EC2編~スポットインスタンスを使ってみよう!~

Pocket

今回は、AWSのちょっと変わったインスタンスについて紹介したいと思います。

「スポットインスタンス」というものをご存知でしょうか?
スポットインスタンスとは、AWSサーバ上に存在し、使われていないEC2インスタンスに値段をつけ、その入札価格が現在のスポット価格(※長期ではなく、1回ごとの取引で決定され成立した市場価格)を上回っている限り、そのインスタンスを利用することができるというものです。
これにより、コスト削減も見込めます。
そのため、スポット価格は需要と供給の関係に基づいてリアルタイムに変動します。

SnapCrab_NoName_2013-5-22_17-44-47_No-00

ただし、スポットインスタンスでは、インスタンスが中断される可能性があるのでそれに備えておく必要があります。
最高入札価格を高く設定することで、スポットインスタンスが終了する可能性を下げることができますが、中断を防ぐことはできません。スポット価格が、設定した最高入札額を上回った場合は予期せずインスタンスが終了しますので、停止を想定したインスタンスの利用を行なうことをおすすめします。

ではその注意点を踏まえたうえで、実際にスポットインスタンスの利用法を説明していきます。

まず、スポットインスタンスリクエストを作成する前に、スポット価格履歴を確認してください。
インスタンスタイプ、インスタンスを実行するオペレーティングシステム、期間、起動する利用可能ゾーンに基づいて、1日から90日間のスポット価格の変動履歴を見られるのでこちらも合わせて事前に確認しておきましょう!
以下、スポット価格履歴の表示の仕方です。

1.AWS管理コンソールにログインして、以下の画面で「EC2」を選択します。
20130716_01_01

 

2.画面左側メニューの「Spot Requests」をクリックします。
20130716_01_02

 

3.画面上部にある「Pricing History」をクリックします。
20130716_01_03

 

4.スポットインスタンスの価格設定履歴確認画面が表示されます。
任意のOS、インスタンスタイプ、指定期間、利用可能ゾーンを選択して価格履歴の確認をおこないます。
20130716_01_04

 

スポットインスタンスリクエストの作成に入る前に、リクエストについて記述しておきましょう。
スポットインスタンスリクエストには以下、2種類のリクエスト方法があります。

ワンタイムリクエスト

リクエストをおこなった全てのインスタンスが起動するか、リクエストの期限が切れるか、リクエストをキャンセルするかのいずれかが確認されて時点でリクエストが完了するという方法です。

持続スポットインスタンスリクエスト

おこなったリクエストの期限が切れるかもしくは、キャンセルをおこなうまでリクエストの完了または終了はしません。
また、Amazon EC2 での最高入札価格が、リクエストをおこなった際の入札価格を超える場合はインスタンスを起動し、下回る場合はインスタンスを停止します。

ワンタイムリクエストでも持続リクエストでも、スポット価格を下回るか、終了するか、自動的に終了しない限りインスタンスは続行します。
また、最大価格がスポット価格とまったく同じである場合、インスタンスは続行する場合としない場合があるのでご注意ください。

さて、いよいよ下記、スポットインスタンスリクエストの作成です!
なお手順は、先ほどのスポット価格履歴の表示手順2までは同様の手順になります。

また、リクエストできる最大スポットインスタンス数は、最大100となっています。
それ以上のスポットインスタンスをリクエストする場合は、同じく以下のAmazon EC2インスタンス申請フォームから申請をおこなえば制限数を増やすことができます。

・Amazon EC2インスタンス申請フォームはこちら

スポットインスタンスリクエストの作成

1.画面上部にある「Request Spot Instances」をクリックします。
20130716_01_05

 

2.今回は試験として、Amazon Linuxでスポットインスタンスのリクエストをおこないますが、選択内容は自由なので任意で選択をしてください。まずは通常のインスタンスの立ち上げ同様にOSを選択します。
20130716_01_06

 

3. 任意で仕様に合わせて項目を選択し、「Continue」をクリックします。
20130716_01_07

 

以下は項目の説明です。

Max Price 1時間ごとの、支払うことができる最高入札額
Launch Group 一連のリクエストをまとめるグループのためのレベル
設定をするとグループ単位で起動・終了できる
Request Valid From リクエストの有効期間のはじまり
Request Valid Until リクエストの有効期間の終わり
Persistent Request? リクエストがワンタイムか接続かを決定
デフォルトではワンタイムリクエスト

 

これより先の手順はAmazon EC2インスタンス立ちあげ手順と同じになります。
※Amazon EC2インスタンス立ちあげのレシピはこちら

4. 作成したスポットインスタンスのStateが「open」から「active」になったら完了!
20130716_01_08

 

・・・ですが、

中には、リクエストしたスポットインスタンスを設定したものの、やっぱりキャンセルしたい・・・!
という方もいらっしゃると思うのでキャンセルのやり方についても、念のため記述しておきます。
なお、スポットインスタンスはSTOPをすることができませんので不必要になったらキャンセルしてインスタンスを削除するしかありません。

スポットインスタンスのキャンセル方法

手順2までは、先ほどのスポットインスタンスリクエスト作成と同じです。
1. リクエストをおこなっていれば、以下のようにスポットインスタンスリクエストの一覧が表示されているはずです。削除をおこないたいスポットインスタンスを選択して、画面上部の「Cancel」をクリックします。
20130716_01_09

2. 「Yes, cancel request」をクリックしてスポットインスタンスのリクエストをキャンセルします。
20130716_01_10

 

3. そうすると、スポットインスタンスのStateが「cancelled」、Statusが「request-canceled-and-instance-running」になります。
20130716_010_11

 

4. リクエストはキャンセルされたけどインスタンスは起動しているということなので、インスタンス画面から対象インスタンスを左クリックして「terminated」をクリックします。
20130716_01_13

 

5. 「Yes, Terminate」をクリックします。
20130716_01_14

 

6. そうするとスポットリクエストのStatsが「instance-terminated-by-user」となり、スポットインスタンスがキャンセルされます。
20130716_01_15

 

これで、スポットインスタンスのキャンセルをおこなうことも可能です。

いかがでしたでしょうか?
注意事項もありますが、スポットインスタンスを有効活用すれば、AWSを使ってより効率よく、そして低コストでシステムを運用する
ことが可能になりますので皆さんも是非、スポットインスタンスを使ってみましょう!

次回は以前のレシピに引き続き、「Amazon EC2編~SnapshotやAMIを使ったバックアップと運用パート②~」と題してお話していきたいと思いますので、お楽しみに!