VM ImportでVMwareからAWS EC2へマイグレーションする – 複数の仮想ディスク編

2013.04.04

前回は、とりあえずインポートできることを確認しましたが、今回は複数ディスク構成の場合を検証してみます。

よくある話ですよね?

仮想化環境では、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コマンドのマニュアルをファイルとして置きました。

vmimport-multi02 vmimport-multi03

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コマンドの引数に指定します。

vmimport-multi01

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のインスタンスにアタッチします。

vmimport-multi04vmimport-multi05

4. インスタンスでの確認

インスタンスをStartし、データボリュームが参照できるか、確認します。

vmimport-multi07

参照できました!

vmimport-multi06

まとめ

1ボリュームずつインポートするので手間はかかりますが、複数ボリュームでもインポートできることが確認できました。AWSのFAQが具体的なコマンド名(ec2-import-volume)の記載に改善されることを期待します。