先月、EC2 Spotインスタンスのベストプラクティスについての記事を連載したい、と書きました。本日、どのようにSpotインスタンスを使って価格を意識したアプリケーションを構築するのか?というテーマでEC2 Spotチームの2人のシニアメンバーと話をしました。Dmitry Pushkarev (技術開発トップ)と Joshua Burgin(ジェネラルマネージャー)との会話をインタビュー形式で再現します!
Jeff: Spotの世界で価格の真の意味は何でしょう?
Joshua:価格と価格履歴はSpotアプリケーションを構築する際の重要な考慮点です。可用性という意味で価格を使うことは、最も可用性の高いキャパシティプールにアプリケーションをデプロイすることや、割り込みの可能性を減らし、価格性能全体を改善することができます。
Spot市場でのインスタンス価格は需要と共有で決まります。低価格というのは、需要よりも多くのキャパシティがある、ということを意味します。低い価格だったり低いブレ幅で一定しているのは、そのプールはあまり需要が少ないことを意味します。古い世代のインスタンス( m1.small, c1.xlarge, cc2.8xlarge等)はその傾向にあります。
Jeff: お客様は、この環境でどのようにアプリケーションを構築しているのでしょうか?
Dmitry:耐障害性を考慮してアプリケーションを設計すること、価格履歴を使うようにする、ということは重要です。お客様それぞれに配置戦略があるようですが、一般的に2つの成功パターンがあります。1つは、価格変動幅の少ないキャパシティプール(インスタンスタイプとアベイラビリティゾーン)を選ぶこと、もう1つは複数のキャパシティプールに跨ってキャパシティを分散配置することです。
株式市場という良い例えが有ります。「最も良い性能」のキャパシティプールを探し、定期的にその選択について再確認することができますし、複数の無関係なプールに跨って分散させて割り込みのリスクを大幅に減らすこともできます。
Jeff: キャパシティプールの配置戦略についてもう少し聞かせてください
Joshua: 価格のブレ幅が安定して小さいプールを見つけるために、最近のSpot価格履歴を分析するアイディアがあります。キャパシティプールで分析、入札希望価格(1時間に支払っても良い最大価格)を超過した直近時点から現在までの期間で分析、という方法です。過去の傾向は未来の結果を保証するわけではないですが、始めるには良い方法です。この戦略は、開発環境や長時間の分析ジョブ用のインスタンスに適用可能です。Amazon EMRクラスタにキャパシティを追加する方法としても良いですね。利益を最大化しつつプールを継続して使って頂くために、入札後ある程度経過した後には、価格を再検討することも勧めています。
Jeff:お客様は価格履歴をどのように参照できますか?
Dmitry:コンソールで、もしくはSDKやAWSコマンドラインインターフェース(CLI)でプログラムから参照できます。
さらに、Spotのページからアクセスできるウェブベースの Spot入札アドバイザーを新たに作りました。このツールは、複数のアベイラビリティゾーンの平均の統計を表示し、価格変動が小さいインスタンスタイプを探し出すのを容易にします。リージョン、オペレーティングシステム、入札価格(オンデマンド価格の25%, 50%, 100%)を選ぶと、先週 もしくは先月の変動の過去の頻度を表示します。
GitHub上のリポジトリaws-spot-labsにもう一つの例があります。
get_spot_duration.py
スクリプトは、どのようにSpot価格情報をプログラム的に取得して、入札希望価格を超過してからの期間に基いてインスタンスタイプやアベイラビリティゾーンを使うか、のデモとなります。Jeff:わかりました。つまり、大きいインスタンスプールを選び定期的にその選択を再考すればいいんですね。
Dmitry:はい、まず始めるのにとてもよい方法です。Spotをより快適に使う次のステップとして、同時に複数のプールを使いキャパシティをそれらに分散することです。というのも、各キャパシティプールは物理的に分離していて、それらの価格に関連はほとんど無いからです。複数のキャパシティプールが短期間に同時に価格上昇することは非常に稀です。
これは、割り込みの影響を減らす事にもなりますし、必要なキャパシティを確保するのに十分な時間も得られます。
Joshua:このようなキャパシティ分散すは、長期的な 価格性能比も改善します。もし複数のインスタンスタイプやアベイラビリティゾーンに均等にキャパシティを分散していると、時間単価は複数のプールで均されますので、結果的に良い価格性能比となります。
Jeff:わかりました、とてもよいですね。その次のステップとなる入札戦略についてはどうでしょう
Joshua:支払いたいと考えている価格で適切に入札することが重要です。不当に高いSpot入札をするよりも、複数のキャパシティプールを慎重に選択し、そこにアプリケーションを分散配置して、高可用性を実現するほうがよいです。あるキャパシティプールの価格が上昇していることを見つけたら、それは需要が増えている兆候です。割り込みを避けるために、より安いプールにワークロードを移行するか、高い価格でアイドル状態のインスタンスをシャットダウンするこをとおすすめします。
Jeff:もっと洗練された入札戦術を使っているお客様はいますか?
Dmitry:多くのお客様にとって、Spotを使えることは競争優位の面で重要です。本番環境を全てSpot上で実行しているお客様もいます。もちろん、彼らのSLAを満たすように追加のエンジニアリングは必要ですが。Spotについて考える上で興味深いのは、「クラウドフレンドリー」なアプリケーションはSpotによる効果を得ている、ということです。設計による耐障害性、柔軟さ、価格を意識している、ということを意味します。価格を意識していると、最も空いているキャパシティプールにアプリケーションをデプロイするようになります。特にスタートアップ企業は、より速くスケールさせ、より安くコンピュートインフラを使うために独創的にSpotを使っています。
Joshua: Auto Scaling、Spot フリート、Elastic MapReduceといったツールはSpotを組み合わせられますし、特別な追加開発をせずに、複数のキャパシティプールを同時に使えます。
Spotインスタンスについての情報を得るために、今後もブログをチェックしてください!それまでは、お気軽に皆さんのTips(と質問)をコメントに書いてください。
— Jeff; (翻訳はSA 松尾が担当しました。翻訳元:Building Price-Aware Applications Using EC2 Spot Instances)