仮想環境(VMWareとか)からAWS EC2へコンバート&インポートする機能は、以前から存在しましたが、新しく Import Imageという方法がサポートされました。
今までと何処が違うのかと、実際にやってみたので紹介します。
http://aws.typepad.com/aws_japan/2015/04/vm-import-update-faster-and-more-flexible-with-multi-volume-support.html
Import Imageとは?
上記ブログを読んでいただけるのが早いのですが、要は
- Import Instance = VMイメージがいきなりEC2インスタンスになる.
- Import Image = VMイメージがAMIになる。
新しくサポートされた Import Image ですが、何が美味しいの?に対して
- 複数ディスクの構成のVMインポートに対応!
- 同時インポート数が 5 -> 20へ!
- OVA形式に対応! (一枚岩のイメージファイル)
ってところです。便利ですね。技術的にもこちらの方が筋がいいと思う。
実践
道具の準備
Import Instanceは、EC2 API Tool を使いましたが、Import Imageは AWS CLIでOKです。楽ですね!
手順の概要
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/UsingImportImage.html
によると、
1. AWS CLI をインストールします。
2. Amazon EC2 にインポートする VM を準備します。
3. VM を仮想化環境からエクスポートします。
4. VM を Amazon EC2 にインポートします。
5. Amazon EC2 でインスタンスを起動します。
となっていますが、この通り進めても確実に止まります!
Import Imageの方法
まず、Import Instanceと違って、コマンドはVMイメージファイルをS3のアップロードからを面倒見てくれません
自分でS3へアップロードする必要があります。(AWS的にはお好きなS3クライアントでアップロードできる!となってます)
VMイメージはでかいファイルなので、aws s3 コマンドが最適でしょう。マルチパートアップロードもできる。
そののち、AWS CLIを打つのですが、そこには罠が。。。
まずは、VMのExport
複数ディスクを一発インポートするので、OVAを指定して一枚岩にしました。
OVFテンプレートのエクスポートで、単一のファイル(OVA)を選択しましょう
S3へアップロード
なんでもいいですが、aws s3
コマンドがお勧めです。マルチパートアップロードがいい感じ!
vmimportロールの設定
出ました。ここが罠
です。マニュアルどおりにやると、後は aws ec2 importimageで万事OKのはずですが、エラーが出るはずです。
A client error (InvalidParameter) occurred when calling the ImportImage operation: The service role <vmimport> does not exist or does not have sufficient permissions for the service to continue
AWSに慣れていない人だとビビりますが、role
と書いてありますね。aws cliコマンド発行から、AWS内部のシステム連携するにあたって、role
を使って権限を担保します。
では、roleを足しましょう。ドキュメントはこちらにあります。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/VMImportPrerequisites.html
前提条件の中段当たりに VM Import サービスロールとありますので、こいつを指示どおりに設定します。手順は上記ドキュメントどおりで割愛します。
いよいよVM Importを実行
コマンドは至って単純
aws ec2 import-image --cli-input-json file://import.json
でもって、import.jsonは
{
"Description": "importDualDisk",
"DiskContainers": [
{
"Description": "dualDisk",
"UserBucket": {
"S3Bucket": "<your-bucket>",
"S3Key": "<s3上のovaファイルのパス>"
}
}
]
}
さて、上手く行ったかな?
$ aws ec2 describe-import-image-tasks
{
"Status": "active",
"Description": "importDualDisk",
"Progress": "2",
"SnapshotDetails": [
{
"UserBucket": {
"S3Bucket": "<your-bucket>",
"S3Key": "<s3上のovaファイルのパス>"
},
"DiskImageSize": 0.0
}
],
"StatusMessage": "pending",
"ImportTaskId": "import-ami-hogehoge"
}
まだかな、まだかな〜
$ aws ec2 describe-import-image-tasks
{
"ImportImageTasks": [
{
"Status": "active",
"Description": "importDualDisk",
"Progress": "28",
"SnapshotDetails": [
{
"UserBucket": {
"S3Bucket": "<your-bucket>",
"S3Key": "<s3上のovaファイルのパス>"
},
"DiskImageSize": 325137408.0,
"Format": "VMDK"
},
{
"UserBucket": {
"S3Bucket": "<your-bucket>",
"S3Key": "<s3上のovaファイルのパス>"
},
"DiskImageSize": 68096.0,
"Format": "VMDK"
}
],
"StatusMessage": "converting",
"ImportTaskId": "import-ami-hogehoge"
}
]
}
converting キタ━━━━(゚∀゚)━━━━!! ディスク2つも来てるぅ−!!
そののち preparing ami ステータスを経て
$ aws ec2 describe-import-image-tasks
{
"ImportImageTasks": [
{
"Status": "completed",
"LicenseType": "BYOL",
"Description": "importDualDisk",
"ImageId": "ami-xxxxxxx",
"Platform": "Linux",
"Architecture": "x86_64",
...
}
AMI-IDデキタ− オレ歓喜!
後はAMIからEC2起動!
問題なくできましたよ。
まとめ
- 複数ディスクOK
- AMIだから、後からディスクの種類変更もOK
- 手順的には
role
作成をわすれずに!!
- vCentor + Connector でもできたらなぁ (AWSサポート回答によると、2015/06/07 まだ出来ないみたい)
楽になってうれしいな!