仮想環境(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
ImportImageとは?
上記ブログを読んでいただけるのが早いのですが、要は
– ImportInstance = VMイメージがいきなりEC2インスタンスになる.
– ImportImage = VMイメージがAMIになる。
新しくサポートされた ImportImage
ですが、何が美味しいの?に対して
- 複数ディスクの構成のVMインポートに対応!
- 同時インポート数が 5 -> 20へ!
- OVA形式に対応! (一枚岩のイメージファイル)
ってところです。便利ですね。技術的にもこちらの方が筋がいいと思う。
実践
道具の準備
ImportInstance
は、EC2 API Tool を使いましたが、ImportImage
は 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 でインスタンスを起動します。
となっていますが、この通り進めても確実に止まります!
ImportImageの方法
まず、ImportInstance
と違って、コマンドは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 roledoes 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": "", "S3Key": " " } } ] }
さて、上手く行ったかな?
$ aws ec2 describe-import-image-tasks { "Status": "active", "Description": "importDualDisk", "Progress": "2", "SnapshotDetails": [ { "UserBucket": { "S3Bucket": "", "S3Key": " " }, "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": "", "S3Key": " " }, "DiskImageSize": 325137408.0, "Format": "VMDK" }, { "UserBucket": { "S3Bucket": " ", "S3Key": " " }, "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 まだ出来ないみたい)
楽になってうれしいな!