WindowsインスタンスにEphemeralディスクをマウントする

JAWS-UGに「EC2のLargeインスタンスはディスクを850G使えると書いてあるけど、EBSインスタンスだと使えない!」という投稿があったので、調べてみました。


早速Windowsインスタンスを起動してみると、確かにCドライブ(35G)しか利用できません。
「ディスクの管理」で確認しても、利用可能なディスクはありませんでした。
Ephemeralディスクはインスタンスを停止すると消えてしまいますが、計算用のテンポラリであるとか、キャッシュなんかには利用できるため、使いたいケースも多いかと思います(一時的にでも、850GもEBSをマウントするとお金かかるので)


ということで少し調べてみたところ、どうやらEBSタイプのインスタンスを起動するときに、-bオプションをつけないといけないことがわかりました。-bはブロックデバイスオプションで、起動時に任意のディスクをデバイスにマッピングするためのオプションです。引数はコマンドラインツールでしかつけられないので、AWS ManagementConsole経由では利用できません。
ということで以下手順です。

ツール用意

http://aws.amazon.com/developertools/351?_encoding=UTF8&jiveRedirect=1
より、ec2-api-toolsをダウンロードします。(利用バージョンは1.4.1.2)
解凍後にbinディレクトリにパスに通して、コマンドラインから利用出来る状態にします。
このツールJavaで出来ているので、JREがない場合は同時にインストールしておきます。

環境設定

環境変数に、X509のキーファイル(秘密鍵、証明書)と、操作対象のリージョンを指定します。
X509については、AWSのアカウントページで作成して、ダウンロードしておきます。
指定はこのような感じです。(Windowsの場合)

set EC2_PRIVATE_KEY=秘密鍵ファイルのパス
set EC2_CERT=証明書ファイルのパス
set EC2_URL=https://ec2.ap-northeast-1.amazonaws.com 

「EC2_URL」というのが、操作対象のリージョンになります。他のリージョンを操作したい場合は、
http://aws.amazon.com/articles/3912?_encoding=UTF8&jiveRedirect=1
で対象リージョンのURLを探して下さい。

キーペア、セキュリティグループの作成

ManagementConsoleか、コマンドラインであらかじめ作成します。
コマンドラインの場合、以下のようになります。

#キーペア作成(wintestというキーペア名で作成)
ec2addkey wintest

#セキュリティグループ作成
#wingroupというグループ名。-dオプションはグループについての詳細情報なので、任意の情報を入れておく
ec2-create-goup wingroup -d groupdescription

#リモートデスクトップ接続ポートをセキュリティグループに追加
ec2-authorize wingroup -p 3389 -P TCP -s 0.0.0.0/0 

Windowsの場合、リモートデスクトップで接続することになるので、ポート3389の通信許可をセキュリティグループに追加しておく必要があります。
ManagementConsoleでセキュリティグループを作る場合も、このポート指定は必要です。

インスタンス起動

最後にインスタンスを起動します。インスタンス起動には、起動するAMIのIDが必要になります。
AMIのIDは、ManagementConsoleで検索するのが手っ取り早いと思います。インスタンス起動時に出てくるウィザードで検索を行えます。「AMI ID」と書いてある、"ami-"で始まる文字列が、AMIのIDになります。

今回は、"ami-b8e842b9"を使用しました。これは日本語のWindows2008R2で、デフォルトで日本ロケールになっています。
(日本語Windowsがデフォルトで利用できるのはうれしいですね)


起動するAMIが決まったら、以下のコマンドを実行します。

ec2run -g wingroup -b "xvdf=ephemeral0"  -k wintest -t m1.large ami-b8e842b9
  • gがセキュリティグループ名、-kがキーペア名です。
  • bが今回の肝で、xvdfというデバイスにephemeral0というディスクを割り当てる指定です。

この指定で、Windowsから約400G分のEphemeralディスクが見えるようになります。
なお、Largeインスタンスは850G使えるので、ディスクがもうひとつマウントできます。
2つマウントする場合は、-bオプションをもう一つ増やして

ec2run -g wingroup -b "xvdf=ephemeral0" -b "xvdg=ephemeral1" -k wintest -t m1.large ami-b8e842b9

とします。
ちなみに、「AMIがない!」というようなエラーが出た場合は、自分の起動したリージョンと、AMIを検索したリージョンが同じかどうか確認して下さい。同じWindowsのAMIでもリージョンによってIDが異なりますので。。

ディスクの確認

うまく起動できたら、リモートデスクトップWindowsに接続します。
接続後の初期状態はこのような感じです。

Ephemeralディスクはデバイスとして認識されているものの、マウントされていません。
まずはディスクをオンラインにします。

ディスク1を右クリックして、「オンライン」を選びます。次に初期化を行います。

同じようにディスク1を右クリックして、「ディスクの初期化」を行います。
最後に、ボリュームを設定します。今回は1ボリュームにしましたが、ここは好きに分割できます。

未割り当て領域右クリックで、ボリュームを作成できます。
割り当てに成功すると、ドライブがマウントされます。

あとは普通にエクスプローラーから利用できます。

おまけ

せっかくEBSとEphemeralをマウントしたので、ベンチマークをとってみました。


シーケンシャルライトはEphemeralが上回っていますが、あとはEBSのほうが優秀ですね。