AWS EC2からOVA/VMDK方式でExportしてVMware ESXiで立ち上げる手順

EC2上にアップロードしたインスタンスVMWare ESXiにダウンロードして利用します。

簡易な手順はこちらの公式ドキュメントにもあります。

docs.aws.amazon.com

EC2からExportするにはaws ec2 xxxxコマンドではなくec2-create-instance-export-taskコマンドを利用します。

EC2 CLIのインストール

ec2-create-instance-export-taskが無い環境では以下の手順でインストールします。

docs.aws.amazon.com

本手順で利用している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」と入力し、「リスト」「アップロード/削除」「アクセス許可の表示」にチェックをつけます。 f:id:yomon8:20160511180706p:plain

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上で動いています。