AWS EC2のインスタンスタイプの選び方
AWS EC2のインスタンスタイプをどれを使っていいかわからないという話を聞いたので、個人的な判断基準。たしかにいろいろなタイプがあってわかりにくいだろうと思うし、歴史的な紆余曲折もあって一見体系的でないように見える。
詳細は以下のリンクを確認してほしいが大体以下のように覚えておけばほぼ間違いないと思う。
http://aws.amazon.com/jp/ec2/instance-types/
インスタンスのファミリー
"M" で始まるのが一般用途。※ 例外は M2 インスタンスでメモリが値段の割にたくさん搭載されている。
"C" で始まるのは値段の割に CPU 性能が良いバージョン。
"I"で始まるのはネットワークやストレージ性能が値段の割に良いバージョン。
他にも特殊用途のファミリーがいろいろあるけれど、それは用途が明確なので特に説明しない。
インスタンスの世代
"M3" の3 ようにアルファベットの後ろについている数字は、大体世代を表している。なので、数字が大きいものを選んでおけばいい。
おおむね同じインスタンスサイズなら数字が大きい方が値段が安くて、性能がいい。
インスタンスのサイズ
"medium"、"large"など。事前に検証などでわからなければ、small か mediumを選んでおけばいい。実際にアプリケーションを実行してみて、性能が足りなければ再起動一回でより上位のインスタンスに変更できるのでそれほど気にしなくても大丈夫。CloudWatch などで監視して、運用時に大きくしたり、小さくしたりするがクラウドっぽい使い方。
なかなかめんどくさいけど。
検証する時間もなくて、何とか予算を取らなければいけないとか場合はしょうがないので、大きいインスタンスを選択しておく。
それでも迷うなら、少しお金を払ってプロの方に相談するのも一つの手段。
HVM とPV
インスタンスタイプとは別に、ちょっと注意した方がいいのが、AMI のタイプ。これは AWS というより、AWS で利用している XEN ハイパーバイザの特性なのだけれど、HVM 、PV という二つのタイプがある。もともと XEN は、全部仮想化するのではなくてゲストのカーネルを改造して、大体仮想化するという手法で完全仮想化するよりも高速化を実現するというだった。 Paravirtualization (PV:準仮想化)という名前はここからきている。カーネルに手を入れることができない windows などを利用できるように 完全仮想化も提供されていたが、速度的には遅いといわれていた。
しかし、Intel VT-x や AMD-V など、プロセッサが仮想化を支援する機能を搭載したり、デバイスでも SR-IOV などの仮想化を支援する仕組みを導入するなどして、カーネルを改造しなくてもハードウェア的に仮想化することで十分な性能を達成できるようなってきた。
HVM(hardware virtual machine )と言われているのがこちら。
AWS では当初、LINUX は PV、Windows は HVM というすみ分けだったけれど、比較的新しいインスタンスタイプでは、LINUX でも HVM が利用できる。また、PVHVM ドライバという PV だか、HVMだかよくわからないドライバが導入されたおかげで、場合によってはHVMの方がより早い動作を期待できる場合が出てきた。
たとえば、AWS上で HVM を利用した場合 SR-IOV がネットワークカードで有効になる拡張ネットワーキングを有効にできる。ネットワークのトラフィックが多くて割り込みが多発する場合には有効だろう。
まとめ
とりあえず迷ったら、m3.medium で HVM AMIを選択して、インスタンスストレージを付けて起動しておけばいいのではないだろうか。