仮想環境(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 role  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": "", 
                "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起動!

問題なくできましたよ。
20150607202017

まとめ

  • 複数ディスクOK
  • AMIだから、後からディスクの種類変更もOK
  • 手順的には role作成をわすれずに!!
  • vCentor + Connector でもできたらなぁ (AWSサポート回答によると、2015/06/07 まだ出来ないみたい)

楽になってうれしいな!

元記事はこちら

AWSの新しいVM Import ImportImage で複数ディスクを一気にAMIへ!