EC2上にアップロードしたインスタンスをVMWare ESXiにダウンロードして利用します。
簡易な手順はこちらの公式ドキュメントにもあります。
EC2からExportするにはaws ec2 xxxxコマンドではなくec2-create-instance-export-taskコマンドを利用します。
EC2 CLIのインストール
ec2-create-instance-export-taskが無い環境では以下の手順でインストールします。
本手順で利用しているCLIバージョンです。
$ ec2-create-instance-export-task -v Setting User-Agent to [ec2-api-tools 1.7.3.0]
ec2-create-instance-export-taskのヘルプを参考までに載せておきます。現バージョンとはオプション等が微妙に異なるので注意してください。
create-instance-export-task — AWS CLI 1.10.46 Command Reference
Export先のS3バケット作成
VMはS3上にExportされます。S3バケットのアクセス許可に対して以下を設定します。
被付与者に「vm-import-export@amazon.com」と入力し、「リスト」「アップロード/削除」「アクセス許可の表示」にチェックをつけます。
Export実行(EC2 Instance -> S3)
以下のようなコマンドでExport実行します。
$ ec2-create-instance-export-task i-12ab34cd \ --aws-access-key <access key> \ --aws-secret-key <secret key> \ --region ap-northeast-1 \ --target-environment vmware \ --disk-image-format vmdk \ --container-format ova \ --s3-bucket yourbucketname \ --s3-prefix vmexport/
結果が表示されます。かなり見にくいのですが、重用なのはExportタスクIDです。(以下の場合はexport-i-vw67yz89です)
EXPORTTASK export-i-vw67yz89 active i-12ab34cd vmware vmdk ova yourbucketname vmexport/export-i-vw67yz89.ova You may monitor the progress of this task by running ec2-describe-export-tasks.
このタスクIDを利用してec2-describe-export-tasksコマンドで進捗を確認しろと出るので、実行してみます。
$ ec2-describe-export-tasks export-i-vw67yz89 \ --aws-access-key <access key> \ --aws-secret-key <secret key> \ --region ap-northeast-1
結果が出るのですが、こちらもかなり見にくい。
EXPORTTASK export-i-vw67yz89 active i-12ab34cd vmware vmdk ova yourbucketname vmexport/export-i-vw67yz89.ova
実は結果を見るならawsコマンドの方が見やすい結果が出ます。
$ aws ec2 describe-export-tasks { "ExportTasks": [ { "State": "active", "ExportToS3Task": { "S3Bucket": "yourbucketname", "S3Key": "vmexport/export-i-vw67yz89.ova", "DiskImageFormat": "vmdk", "ContainerFormat": "ova" }, "InstanceExportDetails": { "InstanceId": "i-12ab34cd", "TargetEnvironment": "vmware" }, "ExportTaskId": "export-i-vw67yz89" } ] }
Statusがactiveからcompletedに変化したら完了です。Exportは結構時間がかかります。
S3からOVAをローカルにダウンロード
オンプレミス側の環境で、aws s3 cpコマンドを利用して、S3からovaファイルをダウンロードしてきます。分割ダウンロードされるので、環境によってはかなり速度でます。
以下の例だと319に分割されてダウンロードされているのがわかります。
# aws s3 cp s3://yourbucketname/vmexport/export-i-vw67yz89.ova /home/otomo Completed 99 of 319 part(s) with 1 file(s) remaining
OVAをVMXに変換
今回はOVAをVMXに変換してからESXiにインポートします。
OvfToolの準備
OVAからVMXへの変換にはovftoolを使います。Ovftoolは以下からダウンロードします。この記事ではLinux環境向けのツールをダウンロードしています。
https://my.vmware.com/jp/group/vmware/details?productId=352&downloadGroup=OVFTOOL350
拡張子bundleのファイルがダウンロードされます。このファイルは直接実行できるので、実行権限付けて実行するとOvfToolがインストールされます。
# chmod +x VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle # ./VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
今回使ったovftoolのバージョンは3.5.0でした。
# ovftool -v VMware ovftool 3.5.0 (build-1274719)
OVAをVMXに変換
変換かけます。
$ ovftool export-i-xxxxxxxx.ova new-vm-name.vmx Opening OVA source: export-i-xxxxxxxx.ova The manifest validates Opening VMX target: aws.vmx Writing VMX file: aws.vmx Transfer Completed Completed successfully
vmxとvmdkが作成されますが、vmdkはシックプロビジョニングのディスクなので、シンプロビジョニングに変更します。
シンプロビジョニングのディスクにはthinを付けることにしたので、事前準備としてvmdkファイルを指定している部分を変更しておきます。
vim aws.vmx ide0:0.fileName = "aws-disk1-thin.vmdk"
次にscpコマンドでvmxファイルとvmdkファイルをESXiに転送します。
ESXi上で以下ようなコマンドを実行してシンプロビジョニングに変更します。シックプロビジョニングのままだと、こちらの「デバイスに空き領域が残っていません」というエラーが出て立ち上がりませんでした。
先ほどvmxでディスク名に「-thin」を付けたので、「-thin」を付けたファイル名でディスクをシンプロビジョニングに変更します。
# vmkfstools -i aws-disk1.vmdk aws-disk1-thin.vmdk -d thin
後はVMXから仮想マシン登録できるようになっているはずです。(ネットワーク調整などは特種な挙動は無かったので省略します)
ちなみに、今回ExportしてきたのはCentOS7でしたが、問題無くESXi上で動いています。