VirtualBoxの仮想マシンをAWS EC2へ移行する手順(VM Import)
VirtualBox上の仮想マシンを、AWS EC2へ移行する機会があったので、手順を残します。
概要
手順は大きく3つになる。
- Amazon EC2 API Tools をダウンロード
- VirtualBoxのディスクイメージの変換
- ディスクイメージをEC2へインポート
前提
- VirtualBox仮想マシンのOS : CentOS 6 (x64)
- 仮想マシンのディスクイメージの形式 : VDI
- 作業するクライアント環境のOS : Windows 10 (x64)
- もちろんAWSを利用できるようになっている
- AWS S3のバケットを用意しておく
手順
手順は、こちらのサイトを参考にしました。 https://www.totalsolution.biz/virutalbox_vmimport_ec2_instance/
1. Amazon EC2 API Tools をダウンロード
まずは「Amazon EC2 API Tools」をダウンロードします。
このツールの動作には JRE
or JDK
が必要なので、なければインストールしておきます。
- 「Amazon EC2 API Tools」ダウンロード ⇒ https://aws.amazon.com/developertools/351
- 「Amazon EC2 API Tools」リファレンス ⇒ http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/Welcome.html
「Amazon EC2 API Tools」をダウンロードすると、ZIPになっているので、お好きな場所へ展開します。
2. VirtualBoxの仮想ディスクイメージの変換
「Amazon EC2 API Tools」で対応している仮想ディスクイメージの形式は、以下のとおりです。 - VMDK - RAW - VHD
このため、VDI形式から対応している形式へ変換する必要があります。 (VMwareなら、そのままインポートできるようですね。)
仮想ディスクイメージの形式を変換するには、VBoxManage
コマンドを使用します。
VBoxManage
コマンドへのパスが通っていない場合は、
通常はC:\Program Files\Oracle\VirtualBox
にあるので、
こちらへパスを通すかカレントディレクトリを変更します。
コマンドプロンプトで、以下のコマンドを実行すると、VDI形式からRAW形式へ変換できます。
VBoxManage internalcommands converttoraw <VDI形式ファイルパス.vdi> <RAW形式ファイルパス.img>
3. ディスクイメージをEC2へインポート
ディスクイメージをEC2へインポートするには、「Amazon EC2 API Tools」のec2-import-instance
コマンドを使用します。
実行前に、環境変数の設定を行います。
※環境依存の値は、適宜置換してください。
- アクセスキーID、シークレットアクセスキー
set AWS_ACCESS_KEY=<アクセスキーID> set AWS_SECRET_KEY=<シークレットアクセスキー>
- JAVA_HOMEを設定
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_102
- その他必要な環境変数
以下の例では、リージョンを「東京」にしています。
set EC2_HOME=<Amazon EC2 API Tools を配置したパス> set EC2_URL=https://ec2.ap-northeast-1.amazonaws.com set EC2_REGION=ap-northeast-1
- プロキシの設定が必要な場合には、
EC2_JVM_ARGS
変数に設定します。
set EC2_JVM_ARGS=-DproxySet=true -Dhttp.proxyHost=<address> -Dhttp.proxyPort=<port> -Dhttps.proxySet=true -Dhttps.proxyHost=<address> -Dhttps.proxyPort=<port>
- パスを通しておきます。
set PATH=%PATH%;%EC2_HOME%
ec2-import-instance
コマンドを実行します。
以下のコマンドを実行すると、RAW形式のディスクイメージがS3にアップロードされ、 その後EC2インスタンスが作成されます。
ec2-import-instance ^ "<変換したRAW形式ファイルパス>" ^ -t t2.micro ^ -f RAW ^ -a x86_64 ^ -p Linux ^ --region ap-northeast-1 ^ --bucket <S3バケット名> ^ -o %AWS_ACCESS_KEY% ^ -w %AWS_SECRET_KEY%
私の環境の場合、アップロード中は、以下のようなエラーが出力され自動で再開されの繰り返しだった。 でも進捗は進んでいるので放置しました。
[Fatal Error] :2:18: Open quote is expected for attribute "http-equiv" associated with an element type "META".
しかし進捗が99%のまま全然進まなかったので、一度コマンドを途中でキャンセル(Ctrl+C
)してしまいました。
この場合、もう一度アップロードするには時間がかかりますが、レジューム用のコマンドが用意されているので、助かった。
レジュームするには、まずタスクIDを知る必要があるが、以下のコマンドで確認することができる。
ec2-describe-conversion-tasks
レジュームしたいタスクIDが分かったら、以下のコマンドを実行すると、レジュームできる。
ec2-resume-import ^ "<変換したRAW形式ファイルパス>" ^ -t <タスクID> ^ -o %AWS_ACCESS_KEY% ^ -w %AWS_SECRET_KEY%
キャンセルとレジュームを繰り返していたら、いつの間にかタスクが完了したためレジュームができなくなって、EC2インスタンスが作成されていた。
とりあえず起動できたので、よしとする。