EC2でとりあえず動かしたインスタンスをVMにしたいと思ったことはありませんか?

私の場合は無料枠で動かしてたWindowsがいらなくなって、データは残しておきたいけど、EBSにおいたままだとお金掛かるしなーということで ローカルに吸い出したいというのがことの始まりです。

AWSにVM Import/Exportというのがあるので、「これ使えばいいじゃん」ってなってたんですが、ドキュメントには

以前に別の仮想化環境から Amazon EC2 にインポートしたインスタンスでない限り、Amazon EC2 からインスタンスをエクスポートすることはできません。

とあって、ゼロからEC2で構築したものはエクスポートできません。

しょうがないのでいろいろ調べたんですが、どうやらVirtualBox付属のvboxmanageでISOをvdiなりvdmxなりに変換できることがわかったので、ddコマンドでイメージにして、vboxmanage convertfromrawで変換することにしました。

エクスポートしたいEC2インスタンスについてたEBSボリュームを適当なLinuxインスタンスに付け替えて、ddで吸い上げます。イメージの保存先は十分サイズがあるEBSをつないだインスタンスならいいのですが、私は無料枠のデフォルトで動かしているやつに付け替えたのでサイズが足りず、ローカルからssh経由で吸い出しました。

ssh $aws_instanse 'dd if=/dev/xvdf' | dd of=aws_instance.iso

ちなみにこれだとEBSのサイズそのままがデータとして流れるので、通信量のほうで課金されます。私はよくわかってないので、そのままやっちゃいましたが、gzipとか挟んでデータ転送量を減らすようにしましょう。

んで、できたisoを以下のコマンドで変換します。

vboxmanage convertfromraw aws_instance.iso aws_instance.vdi # 拡張子をvmdkにすればVMWare形式にもできる

あとはできたVDIを仮想マシンに割り当てればローカルで動かせるようになりました。

最初からVMをインポートしてればいいんですけど、なかなか先が見通せないというか、そもそもあんまりEC2をエクスポートしたくなる場面とか想像できないというか。

Windowsをエクスポートするとライセンスの問題とかあると思うので、気をつけてください。