[AWS] VMファイルのインポート

AWSでは仮想ファイルをインポートしてEC2やWorkspacesにインポートして使用することができます。
ここではS3を経由してEC2にインポートする方法を記載します。

1. VDI→OVAファイルの変換

AWSにインポートするために、vdiファイルをova形式にコンバートします。
※元からova形式ファイルの場合はこの作業は不要です。
  • (1) Oracle VM VirtualBoxを起動します。
  • (2) 仮想マシンを新規作成して、「すでにある仮想ハードディスクファイルを使用する(U)」を選択し、元のvdiファイルを指定します。
  • (3) メニューバー「ファイル」→「仮想アプライアンスのエクスポート(E)」を実行します。
  • (4) 該当の仮想マシンを指定して、任意のディレクトリを選択後に「エクスポート」ボタンをクリックします。

2. S3へのアップロード

ovaファイルをS3(Amazon Simple Storage Service)にアップロードします。
(1) S3バケットの作成
ovaファイルを一時的に保存しておくS3のバケットを作成します。
バケット名は任意ですが、他ユーザを含めた全てのバケット名と重複しない名前を指定する必要があります。

ここではコマンドライン(AWS CLI)で作成します。
C:\>aws s3 mb s3://(s3バケット名)
【例】
C:\>aws s3 mb s3://s3example-bucket
正常に作成された場合には以下のように表示されます。
make_bucket: s3example-bucket

念のため、S3バケットの一覧を表示します。
C:\>aws s3 ls

(2) VM Import用サービスロールの作成
VM Importでは、アカウント内で特定の操作を実行するにはロールが必要です。
ここではvmimportという名前のロールを作成し、そのロールにVM Importのアクセス権限を付与します。

「trust-policy.json」という名前のファイルを作成し、以下の内容を記述します。
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:ExternalId": "vmimport"
            }
         }
      }
   ]
}
 
以下のコマンドを実行します。
C:\>aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json


(3) ポリシーのアタッチ
S3バケットのポリシーを定義します。

「role-policy.json」というファイルを作成し、以下の内容を記述します。
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation"
         ],
         "Resource": [
            "arn:aws:s3:::(S3バケット名)"
         ]
      },
      {
         "Effect": "Allow",
         "Action": [
            "s3:GetObject"
         ],
         "Resource": [
            "arn:aws:s3:::(S3バケット名)/*"
         ]
      },
      {
         "Effect": "Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource": "*"
      }
   ]
}
 
※「(S3バケット名)」に先ほど作成したS3バケット名を記載します。

ポリシーをアタッチします。
C:\>aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

(4) S3へのアップロード
VMファイルをS3で作成したバケットにアップロードします。
C:\>aws s3 cp (VMファイル名) s3://(S3バケット名)
【例】
C:\>aws s3 cp vm_example.ova s3://s3example-bucket

アップロードしたファイルを確認します。
C:\>aws s3 ls s3://(S3バケット名)
【例】
C:\>aws s3 ls s3://s3example-bucket

3. インポートタスクの作成

AWS CLI コマンド import-image を使用してインポートタスクを作成します。
(1) 定義ファイルの作成
インポートするS3バケット名およびファイル名を指定したファイルを作成します。
ここでは、「containers.json」とします。
[
  {
    "Description": "Example",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "(S3バケット名)",
        "S3Key": "(ファイル名)"
    }
}]

(2) インポートタスクの作成
インポートタスクを作成します。
C:\>aws ec2 import-image --description "Example" --disk-containers file://containers.json

以下のようなステータス画面が表示されます。
{
"Description": "Example",
    "ImportTaskId": "import-ami-xxxxxxxxxxxxx",
    "Progress": "2",
    "SnapshotDetails": [
        {
            "DiskImageSize": 0.0,
            "Format": "OVA",
            "UserBucket": {
                "S3Bucket": "(S3バケット名)",
                "S3Key": "(ファイル名)"
            }
        }
    ],
    "Status": "active",
    "StatusMessage": "pending"
}
 

なお、ステータスには、以下のものがあります。
active インポートタスクは進行中です。
deleting インポートタスクはキャンセルされています。
deleted インポートタスクはキャンセルされました。
updating インポートのステータスを更新しています。
validating インポートしたイメージを検証中です。
validated インポートしたイメージが検証されました。
converting インポートしたイメージを AMI に変換しています。
completed インポートタスクは完了し、AMI はすぐに使用できます。

また、「ImportTaskId」は「タスクID」で、これを指定して進捗状況を見ることができます。
C:\>aws ec2 describe-import-image-tasks --import-task-ids (タスクID)

「Status」が「completed」なれば完了です。
{
    "ImportImageTasks": [
        {
            "Architecture": "x86_64",
            "Description": "Example",
            "ImportTaskId": "import-ami-xxxxxxxxxxxxxxx",
            "LicenseType": "BYOL",
            "Platform": "Linux",
            "Progress": "69",
            "SnapshotDetails": [
                {
                    "DeviceName": "/dev/sda1",
                    "DiskImageSize": (ファイルサイズ),
                    "Format": "VMDK",
                    "Status": "completed",
                    "UserBucket": {
                         "S3Bucket":(S3バケット名)",
                         "S3Key":"(ファイル名)"
                    }
                }
            ],
            "Status": "active",
            "StatusMessage": "booted"
        }
    ]
}

4. EC2インスタンスの作成

インポートしたAMI(Amzon Machine Image)を元にして、EC2のインスタンスを作成します。
  • (1) AWS マネジメントコンソールにログインします。
  • (2) サービスの「EC2」をクリックします。
  • (3) 左側ローカルメニューのイメージの「AMI」をクリックすると、インポートしたAMIが表示されますので、「起動」ボタンをクリックして、EC2のインスタンスを作成します。
  • (4) 「ステップ 2: インスタンスタイプの選択」でインスタンスタイプを指定して、「次の手順: インスタンスの詳細の設定」ボタンをクリックします。
  • (5) 「ステップ 3: インスタンスの詳細の設定」で設定を行ったら「次の手順: ストレージの追加」ボタンをクリックします。
  • (6) 「ステップ 4: ストレージの追加」でディスク容量等の設定を行ったら「次の手順: タグの追加」ボタンをクリックします。
  • (7) 「ステップ 5: タグの追加」で必要に応じてタグを指定して下さい。完了したら「次の手順: セキュリティグループの設定」ボタンをクリックします。
  • (8) 「ステップ 6: セキュリティグループの設定」でファイアウォールの設定を行います。設定が完了したら「確認と作成」ボタンをクリックします。
  • (9) 「ステップ 7: インスタンス作成の確認」で設定内容を確認して、「作成」ボタンをクリックします。
  • (10) 「既存のキーペアを選択するか、新しいキーペアを作成します。」というダイアログが表示されます。ここで「新しいキーペアの作成」を選択した場合には、キーペア名を入力して、必ず「キーペアのダウンロード」を行います。※キーペアのダウンロードができるのはこの時のみなので必ずダウンロードを行って下さい。
  • (11) 「インスタンスの作成」ボタンをクリックして、インスタンスを作成します。

5. S3バケットの削除

VMファイルをインポートしてAMIに変換したら、S3バケットを削除します。
ここで、ファイルを空にして強制的にバケットを削除するには、以下のコマンドを実行します。
C:\>aws s3 rb s3://(S3バケット名) --force
【例】
C:\>aws s3 rb s3://s3example-bucket --force







最終更新:2019年11月06日 13:35