VM ImportでVMwareからAWS EC2へマイグレーションしてみた
VMware vSphereの仮想マシン(VMDK形式)をAmazon EC2にマイグレする、VM Import機能を試してみました。
むかしむかし...
数年前、「サーバー仮想化」なんてキーワードが流行った時期がありました。
x86サーバーでゴリゴリ動いているシステムをVMware環境にサクッとマイグレして、花の仮想化生活!!なんてのがもてはやされていましたね。その仮想マシンを、今度はクラウドに預ける時が来たようです。
必要なもの/検証環境
- インポート元ハイパーバイザ : VMware vSphere (ESXi) 5.1
- 仮想マシン : Windows Server 2008R2 Standard
- vSphere CLientを実行するPC : Windows 7
- EC2 API Toolを実行するPC *1 : Mac OS X Mountain Lion
AWSのVM Import/Exportの紹介では、EC2 API Tool(CUI)とAmazon EC2 VM Import Connector(GUI)の2通りが紹介されていますが、Import ConnectorはvSphereの対応バージョンが5.0まで *2のため、今回はEC2 API Toolでやります。Import ConnecterのGUIにはめっちゃ興味あるので、vSphere 5.0環境が用意できれば試してみたいと思います。
手順
1. 仮想マシンをOVF形式でエクスポート
vSphere Clientで、仮想マシンをエクスポートします。仮想マシンを選択し、vSphere Clientのメニューから[ファイル] - [エクスポート] - [OVFテンプレートのエクスポート]を選択します。
ウィザードでは、PCの任意のフォルダを選択し、フォーマットはVMDKファイルが含まれるOVF形式を選択してください *3。[OK]ボタンでエクスポートが開始します。
進捗は、最初のうちは進みが遅く、残り時間に「300分」なんて表示されてびっくりしますが、後半は一気に進みます。
終わったら、ウィザードで指定したフォルダ以下に、仮想マシン名と同名のフォルダが作成されます。OVFには、本来のVMware環境間でやり取りするためのデータ(mfファイル、ovfファイル)が含まれますが、今回はvmdkファイル(仮想ディスク)のみを使用します。逆に言うと、仮想マシンの構成情報(CPU数や搭載メモリなど)はマイグレーションできません。
検証環境では、このファイルをEC2 API Toolsを実行するPCにコピーしました。
2. EC2 API Toolの実行
VM Importは、EC2 API Toolのec2-import-instanceコマンドを使用します。EC2 API Toolのセットアップは割愛しますが、X509鍵が必要なことに注意してください。IAMアカウントだと、結構面倒です(参考:雑記帳 - IAMアカウントでX.509証明書が使えるようにする)。
コマンドのオプションがそれなりにあるので、まずは-hオプションでヘルプを確認するのがお奨めです。手入力は大変なので、今回はシェルスクリプトで実行しました。たいしたものではないですが、Gistに上げておいたので参考になれば。
#!/bin/bash VMDK=<YOUR-VMDK-FILENAME>.vmdk S3_OWNER_ACCESS_KEY=<YOUR_ACCESS_KEY> S3_OWNER_SECRET_KEY=<YOUR_ACCESS_SECRET_KEY> S3_BUCKET_NAME=<YOUR_BUCKET_NAME> ec2-import-instance \ $VMDK \ -t m1.small \ -f VMDK \ -a x86_64 \ --bucket $S3_BUCKET_NAME \ -o $S3_OWNER_ACCESS_KEY \ -w $S3_OWNER_SECRET_KEY
で、実行します。
$ ./vmimport.bash Requesting volume size: 20 GB TaskType IMPORTINSTANCE TaskId import-i-fh5nex9z ExpirationTime 2013-04-10T07:29:14Z Status active StatusMessage Pending InstanceID i-XXXXXXXX DISKIMAGE DiskImageFormat VMDK DiskImageSize 3433390592 VolumeSize 20 AvailabilityZone ap-southeast-1a ApproximateBytesConverted 0 Status active StatusMessage Pending Creating new manifest at otaki-vmimport-tmp/c971f379-cdf9-4bea-9b1c-f3e72f0d2709/Win2008R2-01-disk1.vmdkmanifest.xml Uploading the manifest file Uploading 3433390592 bytes across 328 parts 0% |--------------------------------------------------| 100% |===
最後のインジケータが100%になるまで待っている間に、S3バケットを確認しておきましょう。
アップロード先に指定したS3バケットの下にランダム名のフォルダが作成され、10MBごとにスライスされたディスクイメージファイルが作成されていきます。
アップロードが完了すると、以下のように、転送レートのレポートと、S3からEC2 EBSへのデータ変換の確認に関するメッセージが表示されます。
0% |--------------------------------------------------| 100% |==================================================| Done Average speed was 1.837 MBps The disk image for import-i-fh5nex9z has been uploaded to Amazon S3 where it is being converted into an EC2 instance. You may monitor the progress of this task by running ec2-describe-conversion-tasks. When the task is completed, you may use ec2-delete-disk-image to remove the image from S3.
今回の仮想マシンはOSをクリーンインストールした状態のものだったため、ディスク使用量は3GB程度で10分〜20分程度で転送できました。この辺りはESXiのI/O性能、上りのネットワークの帯域などいろんな要因から制約を受けると思いますが、それなりの速度で行ってくれそうな感じがします。
3. EC2インスタンスを確認
先ほどのメッセージにもあったように、S3バケットへのアップロード後、EC2 EBSへのディスクデータの変換がAWS側で進みます。進捗は、ec2-describe-conversion-tasksコマンドで確認できます。今回は、ちょっと離席しているうちに終わってしまったので、変換にかかる時間はわかりませんでした。変換完了後ですが、実行例を以下に示します(実際のコマンド出力は整形されておらず、ダバダバと出力されます)。あと、出力結果のTaskId(import-i-XXXXXXXX)をメモしておきましょう。後始末で使います。
$ ec2-describe-conversion-tasks TaskType IMPORTINSTANCE TaskId import-i-XXXXXXXX ExpirationTime 2013-04-10T07:29:14Z Status completed InstanceID i-XXXXXXXX DISKIMAGE DiskImageFormat VMDK DiskImageSize 3433390592 VolumeId vol-XXXXXXXX VolumeSize 20 AvailabilityZone ap-southeast-1a ApproximateBytesConverted 3433386784 Status completed
作成されたインスタンスはStop状態なので、StartしてあげればRDPなどで接続できるようになります。
4. 後始末
マイグレーションが終わったら、S3バケットのイメージデータは不要になります。ec2-delete-disk-imageコマンドでまるっと削除しましょう。
ec2-delete-disk-image -o <YOUR_ACCESS_KEY> -w <YOUR_ACCESS_SECRET_KEY> -t import-i-XXXXXXXX 0% |--------------------------------------------------| 100% |==================================================| Done
これで、S3バケットもすっきりしました。
はまったところ
vSphere Clientには、VMDKファイルを直接ダウンロードするデータストアブラウザという機能がありますが、データストアブラウザ経由でダウンロードしたVMDKファイルは以下のエラーでインポートできませんでした。
ERROR: This does not appear to be a Stream Optimized VMDK. It contains invalid magic number 1766072355
参考 : AWS Developer Forums: VMWare to EC2 import fails with "ERROR: ...
あと、ec2-import-instanceコマンド実行時に-gオプション(セキュリティグループの指定)を省略すると、defaultグループになるのにも注意。defaultグループでまずい場合は、RDPのポートを開けたセキュリティグループを別途指定しましょう。非VPCだとインスタンス作成後はセキュリティグループの変更ができないので、詰みます。今回はdefaultグループを直接いじってしまいました。反省。
まとめ
今回は、VM Importのうち、EC2 API Toolを使用した仮想マシンのマイグレーションを試してみました。実際のマイグレーションにかかる時間は、データ量などケースごとに異なりますが、手順自体はシンプルに行うことができるようになっています。 VM Importは、既存のVMware環境からAWSへ移行する実用的な選択肢として使えると思います。
次回は、せっかくなのでインポートしたWindowsの構成などの様子を、もう少し細かくレポートしてみます。