EC2でovaとかをインポートする

昔似たようなの書きましたがawscliで使えるようになったのと、結構手順変わったので書いておきます。

まずイメージを配置するS3のバゲットを作成します。

example.import-image

というバゲットにしておきます。

次にインポート処理用のIAMロールを作成します。

GUIからはそれっぽいのがいなかったのでコマンドラインでおこないます。

vim trust-policy.json
---
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"",
         "Effect":"Allow",
         "Principal":{
            "Service":"vmie.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "sts:ExternalId":"vmimport"
            }
         }
      }
   ]
}
---
aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
vim role-policy.json
---
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket",
            "s3:GetBucketLocation"
         ],
         "Resource":[
            "arn:aws:s3:::example.import-image"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObject"
         ],
         "Resource":[
            "arn:aws:s3:::example.import-image/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource":"*"
      }
   ]
}
---
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

「example.import-image」バゲット上にインポートしたいOVAイメージをアップロードします。

インポート用のJSONを作成し、

vim containers.json
---
[{
    "Description": "First CLI task",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "example.import-image",
        "S3Key": "someting.ova"
    }
}]
---

インポートコマンドを実行します。

aws ec2 import-image --disk-containers file://containers.json

インポートには結構時間がかかります。

状態を知るには

aws ec2 describe-import-image-tasks

とやると出てきます。

処理が終わり、上記コマンドを実行するとAMIのIDなどが表示できるので、あとはAMIからインスタンスを作成します。