ブレーンアシストオンライン

仮想マシン(VM)イメージをAmazon EC2にインポートしてみた

仮想マシン(VM)イメージを
Amazon EC2にインポートしてみた

AWSへの移行サービスがAWSから多数提供されているようです。
今回はその中からVM Import/Exportを利用してHyper-Vの仮想マシン(VM)をAmazon EC2インスタンスにインポートしてみたいと思います。

VM Import/Export とは

まずはVM Import/Export とはEC2の機能です。
S3にアップロードした仮想マシンのイメージファイルをAWS CLI(ImportImageコマンド)でEC2インスタンス上で動作するAMIに変換します。これがImport機能です。逆にEC2インスタンスで稼働している仮想マシンをAMIイメージ化したものをAWS CLI(ExportImageコマンド)でS3に保存することがExport機能です。この機能を使えば仮想マシンイメージファイルでAWS移行やバックアップや災害対策といったことができます。

移行対象のオペレーティングシステムについては以下のリンク先を参照してください。
なお、制限事項があり、既存のシステム変更が必要な場合もあるため同リンク先の制限事項およびセキュリティ項目のトラブルシューティングを良くご確認ください。

作業工程

今回の作業工程のイメージはこんなところですかね。

作業フロー

①Hyper-Vの仮想マシン(VM)をエクスポートしてイメージ化(VHDX)
②イメージ化(VHDX)したVMファイルをAmazon S3にアップロード
③AWS CLI(ImportImageコマンド)を利用してAmazon マシンイメージ (AMI) に変換してインポート
AWS CLIを利用するためにはインストールが必要。今回は作業PCのWindowsマシンにインストールしてコマンドプロンプトで実行。
④AMIからインスタンスを起動

事前準備

仮想マシン側の準備

Hyper-Vの仮想マシン(VM)イメージをS3にアップロードする際は仮想マシンを停止した状態で利用する事をお勧めします。また、上述していますが、システム要件や制限事項をクリアしていないとインポート時にエラーで失敗する場合があります。

DHCPを有効にしたりセキュリティ関連の無効化やDVDドライブなどのデバイス削除等々。インポート時にエラーが出た際は特定の原因まではわからないので良く確認することをお勧めします。サポート契約されている場合はサポートに問い合わせるのが最善です。

※ここでごたごた書いている理由はハマったためです。何をやってもインポートできないディストリビューションもありサポート契約していなかったので最終的には断念しました。

AWS側の準備

AWSアカウントの取得とAWS CLIで利用するIAM作成、アップロード先のS3にバケットの作成をしてください。ここでは割愛します。

なお、アクセスキーID、シークレットアクセスキーはAWS CLI利用時に使用するのでIAM作成した際に発行されるCSVファイルは無くさないようにしてください。VM Import/Exportを利用するために必要なポリシーをIAMにアタッチします。

IAMのポリシーからポリシー作成にてJSONエディタで貼り付ければOKです。
バケット宣言している個所はご自身の環境に書き替えてください。

以下は作成例です。

 

AWS CLIの準備

AWS CLIを利用するには事前にアプリケーションのインストールが必要です。Linux版、Windows版、Mac版と用意されておりどこでも利用できます。移行元のサーバでも良いのですが今回は作業PCのWindowsマシンにインストールします。WindowsマシンにインストールすればPoweshellでもコマンドプロンプトでもどちらでも利用できます。

AWS CLI について
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html

Windows版インストール後

・AWS CLIからAWSアクセス設定
コマンドプロンプトから以下コマンドを実行

インストールしたAWS CLIバージョンの確認
>aws –version
AWSアクセス設定
>aws configure

アクセスキーID
IAM作成時に取得したものを入力。
シークレットアクセスキー
IAM作成時に取得したものを入力。忘れた場合は再取得。
リージョン名
ここでは東京リージョン(ap-northeast-1)を指定。
アウトプットフォーマット
json 、textが指定可能。わかりやすさではjsonですが、ここの表示上の兼ね合いで以降はtextにしています。

・サービスロール登録
AWS CLIの準備ができたらサービスロールを登録します。
リンク先の trust-policy.jsonファイル を作成して create-roleコマンドを実行。
同じく role-policy.jsonファイル を作成して put-role-policyコマンドを実行してください。
こちらもバケット宣言している個所はご自身の環境に書き替えてください。

create-roleコマンド 実行例

put-role-policyコマンド 実行例

事前準備は以上です。

VM Import

ここからが本番ですが事前準備さえ整えばあとはラクチンです。

①Hyper-Vの仮想マシン(VM)をエクスポートしてイメージ化(VHDX)

Hyper-V からVMイメージのエクスポートですが、エクスポートボタンはありますが、そんなことやらなくても対象VMのVHDXファイルと同じものが生成されるだけなのでわざわざエクスポートする必要がないんですよね。格納先がわからない人向けの配慮でしょうか。何はともあれ重要なことはVHDXファイルはVM停止状態のものを使いましょう。

②イメージ化(VHDX)したVMファイルをAmazon S3にアップロード

さくっとアップロードしましょう。

③AWS CLI(ImportImageコマンド)を利用してAmazon マシンイメージ (AMI) に変換してインポート

インポートファイルを用意してImportImageコマンドでインポートします。AMI変換は勝手にしてくれます。

VM Import/Export を使用したイメージとしての VM のインポート
https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmimport-image-import.html

以下説明

Description : 任意の文字列
Format : vhdx ※VM形式を宣言。今回はHyper-VのVM(VHDX)のためvhdxを宣言。
UserBucket
 S3Bucket : アップロード先のバケット
 S3Key : アップロードしたVMファイル名

import-imageコマンドリファレンス
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/import-image.html?highlight=import%20image

以下実行例


「import-ami-***********」はインポートタスクID。このIDでモニタリングができますので完了(completed)になるまでステータスをチェックしましょう。
describe-import-image-tasksコマンドを使用して、インポートタスクのステータスを確認。
以下はステータスがconvertingになっているのでAMI変換しているんでしょうね。


以下、完了(completed)時。


ちゃんとインポートできました。


なお、インポート時間は容量やネットワーク環境にもよりますが、テスト用に用意した特に環境設定を施していないVMで20分ほどでした。

何度かインポートで失敗したのですが、その際掛かった時間がエラー終了するまで4時間ほどでした。内部でタイムアウト値が設定されているのかも知れませんがエラー内容から原因特定は難しいですが、システム要件や制限事項を再度見直してみてください。サポート契約をしていれば問い合わせが最善です。

④AMIからインスタンスを起動

あとはAMIからインスタンスを起動すればいいだけです。
最初の起動部分が違うだけであとは通常のEC2インスタンス起動と同じです。

最後にインスタンス作成できたらAMIの削除は忘れず行ってください。スナップショットにも残っているのでこれも削除が必要です。AMIは置いているだけで課金されてしまいますのでご注意してください。スナップショットはAMIに紐づいていると削除できないのでAMI削除後に削除してください。また、ここではVM Importを取り上げましたが、今後はAWS MGN (AWS Application Migration Service) が主流のようです。

仮想環境だけでなく物理環境両方に対応しており、移行元にエージェントをインストールすることで移行時のダウンタイムを最小限に抑えられると詠っています。
物理環境も対応しているのは大きいですが、エージェントインストールは若干ネックですね。他にもCloudEndure、AWS SMSがあるようですので機会があれば検証してみたいと思います。
以上。