VM ImportでVMwareからAWS EC2へマイグレーションする – 複数の仮想ディスク編
前回は、とりあえずインポートできることを確認しましたが、今回は複数ディスク構成の場合を検証してみます。
よくある話ですよね?
仮想化環境では、1台のVMに対して複数の仮想ディスクをアサインし、システム(ブート)ボリュームとデータボリュームを分ける構成がよく用いられると思います。こうすることで準仮想化SCSIデバイスが使えたりと、VMwareのベストプラクティスとしても推奨されていた気がします。
しかーし、インポートを実行するec2-import-instanceコマンドは、引数にVMDKファイルを1つしか指定できません。困った。AWSのFAQを見ると、よくわからない説明に戸惑います(^^;)
複数の仮想ハードディスクを持つ仮想マシンはサポートされていません。接続されているブートボリュームのみで、仮想マシンをエクスポートすることをお勧めします。ImportVolume コマンドを使って、AttachVolumeで仮想マシンに追加のディスクを添付して、それらをインポートすることができます。
Amazon Elastic Compute Cloud (Amazon EC2) FAQ | アマゾン ウェブ サービス(AWS 日本語)
なんとかキーワードを推測して、以下の手順で移行できることを確認しました。
手順
0. 仮想マシンの準備
今回は仮想マシンに10GBの仮想ディスクを追加し、Eドライブとして仮想マシンから参照します。サンプルデータとして、ifconfigコマンドのマニュアルをファイルとして置きました。
1. ブートボリュームは普通にインポートする
前回と同じ方法なので詳細は割愛しますが、vSphere ClientでOVFファイルにエクスポートし、そのうちブートボリュームに相当するVMDKファイルはec2-import-instanceコマンドで普通にインポートします。
2. データボリュームをインポートする
ここが、今回のポイントです。ec2-import-instanceコマンドはEC2インスタンスにひも付ける必要があるため、データボリュームのインポートには使用できません。そこで、同じEC2 API Toolに含まれるec2-import-volumeコマンドを使用します。ec2-import-volumeコマンドは、インポートしたデータをEC2インスタンスではなくEBS(Elastic Block Store:AWSの仮想ディスク)にひもづけるコマンドです。
OVFファイルのうち、データボリュームは通常、<仮想マシン名>-disk2.vmdkファイルで作成されるので、これをec2-import-volumeコマンドの引数に指定します。
ec2-import-volumeコマンドのパラメータの注意が1点。EC2インスタンスと同じアベイラビリティゾーン(AWSのデータセンター)にアップロードしなければアタッチできないので、-zオプションで手順1でインポートしたEC2インスタンスと同じアベイラビリティゾーンを指定します。それ以外は、ec2-import-instanceコマンドとさほど変わりません。
$ ec2-import-volume <YOUR_VM_NAME>-disk2.vmdk\ -f VMDK \ --bucket <S3_BUCKET_NAME> \ -o <S3_OWNER_ACCESS_KEY> \ -w <S3_OWNER_SECRET_KEY> \ -z <EBS_AZ> Requesting volume size: 10 GB TaskType IMPORTVOLUME TaskId import-vol-XXXXXXXX ExpirationTime 2013-04-11T03:19:40Z Status active StatusMessage Pending DISKIMAGE DiskImageFormat VMDK DiskImageSize 700416 VolumeSize 10 AvailabilityZone ap-southeast-1b ApproximateBytesConverted 0 Creating new manifest at otaki-vmimport-temp/6053b21c-0fe0-4268-955c-707d8e30ab51/<YOUR_VM_NAME>-disk2.vmdkmanifest.xml Uploading the manifest file Uploading 700416 bytes across 1 parts 0% |--------------------------------------------------| 100% |==================================================| Done Average speed was 0.349 MBps The disk image for import-vol-XXXXXXXX has been uploaded to Amazon S3 where it is being converted into an EBS volume. 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.
変換タスクの状況も、前回と同様ec2-describe-conversion-tasksコマンドで確認できます。
$ ec2-describe-conversion-tasks TaskType IMPORTVOLUME TaskId import-vol-XXXXXXXX ExpirationTime 2013-04-11T03:19:40Z Status active StatusMessage Progress: 75% DISKIMAGE DiskImageFormat VMDK DiskImageSize 700416 VolumeSize 10 AvailabilityZone ap-southeast-1b ApproximateBytesConverted 700240
3. EBSをインスタンスにアタッチする
データボリュームのインポート、変換が完了すると、EBSの一覧にインポートしたディスクが追加されます。これをAWS Management Consoleから手順1のインスタンスにアタッチします。
4. インスタンスでの確認
インスタンスをStartし、データボリュームが参照できるか、確認します。
参照できました!
まとめ
1ボリュームずつインポートするので手間はかかりますが、複数ボリュームでもインポートできることが確認できました。AWSのFAQが具体的なコマンド名(ec2-import-volume)の記載に改善されることを期待します。