OVAファイルをAMIとして取り込む

  • 0
    いいね
  • 0
    コメント

    ステップ 3: イメージとして VM をインポートする - VM Import/Export」に基づいて OVA ファイルをアップロードして AMI にする手順をまとめた。

    S3 バケットの作成

    OVA ファイルをいったん S3 バケットにアップロードする必要があるため、バケットを作成する。

    ① 名前とリージョンで以下の指定を実施

    • 「バケット名」に任意の文字列を入力
    • 「リージョン」に適切なリージョン(通常は「アジアパシフィック(東京)」を指定
    • 「次へ」ボタンを押下

    ② プロパティの設定

    • 必要に応じて設定
    • 「次へ」ボタンを押下

    ③ アクセス許可の設定

    • (「パブリックアクセス許可を管理」を開き「認証済みの AWS ユーザー」の「読み込み」をチェック)
    • 「次へ」ボタンを押下

    ④ 確認

    • 「バケットを作成」ボタンを押下

    awscli のインストール

    brew install awscli
    aws configure
    

    今回は Mac で作業したので Homebrew でインストール。環境に応じて適宜対応。

    サービスロールの作成

    ポリシーの作成

    cat << "_EOF_" > trust-policy.json
    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Principal": { "Service": "vmie.amazonaws.com" },
             "Action": "sts:AssumeRole",
             "Condition": {
                "StringEquals":{
                   "sts:Externalid": "vmimport"
                }
             }
          }
       ]
    }
    _EOF_
    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
    

    create-role コマンドで vmimport というロールを作成する。

    ロールへのポリシーのアタッチ

    cat << "_EOF_" > role-policy.json
    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
             ],
             "Resource": [
                "arn:aws:s3:::disk-image-file-bucket"
             ]
          },
          {
             "Effect": "Allow",
             "Action": [
                "s3:GetObject"
             ],
             "Resource": [
                "arn:aws:s3:::disk-image-file-bucket/*"
             ]
          },
          {
             "Effect": "Allow",
             "Action":[
                "ec2:ModifySnapshotAttribute",
                "ec2:CopySnapshot",
                "ec2:RegisterImage",
                "ec2:Describe*"
             ],
             "Resource": "*"
          }
       ]
    }
    _EOF_
    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
    

    disk-image-file-bucket (2箇所) は適宜変更のこと。
    put-role-policy コマンドで上記で作成したロールにポリシーをアタッチする。

    OVA ファイルのアップロード

    aws s3 cp disk-image-file.ova s3://disk-image-file-bucket/
    

    カレントディレクトリーにある disk-image-file.ova ファイルを disk-image-file-bucket バケットにアップロードする。

    OVA ファイルのインポート

    cat << "_EOF_" > containers.json
    [
      {
        "Description": "OVA Disk Image",
        "Format": "ova",
        "UserBucket": {
            "S3Bucket": "disk-image-file-bucket",
            "S3Key": "disk-image-file.ova"
        }
      }
    ]
    _EOF_
    aws ec2 import-image --description "OVA Disk Image" --disk-containers file://containers.json
    

    JSON ファイル内に "Description": があるが、オプションでも --description を指定しないと以下のエラーが出る。

    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 ec2 describe-import-image-tasks --import-task-ids import-ami-XXXXXXXX
    
    IMPORTIMAGETASKS    OVA Disk Image  import-ami-XXXXXXXX 2   active  pending
    SNAPSHOTDETAILS 0.0 OVA
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    
    IMPORTIMAGETASKS    OVA Disk Image  import-ami-XXXXXXXX 28  active  converting
    SNAPSHOTDETAILS 771973632.0 VMDK
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    
    IMPORTIMAGETASKS    OVA Disk Image  import-ami-XXXXXXXX 30  active  updating
    SNAPSHOTDETAILS 771973632.0 VMDK
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    
    IMPORTIMAGETASKS    OVA Disk Image  import-ami-XXXXXXXX 37  active  updating
    SNAPSHOTDETAILS 771973632.0 VMDK
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    
    IMPORTIMAGETASKS    x86_64  OVA Disk Image  import-ami-XXXXXXXX BYOL    Linux   59  active  booting
    SNAPSHOTDETAILS /dev/sda1   771973632.0 VMDK
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    
    IMPORTIMAGETASKS    x86_64  OVA Disk Image  ami-XXXXXXXX    import-ami-XXXXXXXX BYOL    Linux   completed
    SNAPSHOTDETAILS /dev/sda1   771973632.0 VMDK    snap-XXXXXXXXXXXXXXXXX
    USERBUCKET  disk-image-file-bucket  disk-image-file.ova
    

    watch コマンドを使ってもいいかもしれない。