{VM Import}VM Import/Export を使用してイメージとして VM をインポート

 

https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmimport-image-import.html

https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmie_prereqs.html#prepare-vm-image

https://dev.classmethod.jp/articles/vm-import-image-import/


対象OS: CentOS7
仮想化環境: VMware


既存の仮想マシンではvmインポートの途中(Progress=39)からStatusMessage=bootingのまま変化しなくなった。

下記点に注意して新規仮想マシンを作成したらvmインポートできた。

systemctl set-default multi-user.target
標準パーティション
VMware Tools スクリプトの実行ですべてのチェックをはずす

 


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

 

-- 1.2 jqインストール
sudo yum -y install jq


-- 2. S3 バケットを作成する

aws s3 ls

aws s3 mb s3://bucket123


-- 3. IAMポリシー作成

vim policy01.json

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect": "Allow",
         "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket" 
         ],
         "Resource": [
            "arn:aws:s3:::bucket123",
            "arn:aws:s3:::bucket123/*"
         ]
      },
      {
         "Effect": "Allow",
         "Action": [
            "s3:GetBucketLocation",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:PutObject",
            "s3:GetBucketAcl"
         ],
         "Resource": [
            "arn:aws:s3:::bucket123",
            "arn:aws:s3:::bucket123/*"
         ]
      },
      {
         "Effect": "Allow",
         "Action": [
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource": "*"
      }
   ]
}


aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json


-- 4. IAMロール作成
vim vmimport.json

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "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://vmimport.json


-- 5. ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--role-name vmimport

 


-- 6. 仮想マシンを仮想化環境からエクスポートする

VM エクスポートに必要な設定

-- 6.1 VMウイルス対策ソフトウェアまたは侵入検出ソフトウェアを無効にします
-- 6.2 VMware VM から VMware Tools をアンインストール
rpm -q open-vm-tools
yum remove -y open-vm-tools
rpm -q open-vm-tools

-- 6.3 あらゆる (仮想または物理) CD-ROM ドライブを切断します
-- 6.4 ソース VM には機能する DHCP クライアントサービスが必要です
-- 6.5 エクスポートする前に VM をシャットダウンします

-- 6.6 リモートアクセスの Secure Shell (SSH) を有効にします
-- 6.7 ホストのファイアウォール (Linux iptables など) で SSH へのアクセスが許可されていることを確認します
-- 6.8 インポート後に、非ルートユーザーはパブリックキーベースの SSH を使用してインスタンスにアクセスするように設定されていることを確認します
-- 6.9 Linux VMブートローダーとして GRUB (GRUB レガシー) または GRUB 2 が使用されていることを確認します
-- 6.10 Linux VM で、ルートファイルシステムに対して以下のいずれかが使用されていることを確認します。EXT2EXT3EXT4、Btrfs、JFS、XFS


vmdk を作成

 

-- 7. イメージを Amazon S3 にアップロードする

aws s3 cp disk-0.vmdk s3://bucket123
aws s3 ls s3://bucket123 --recursive


-- 8. VM のインポート

vim a.json

[
  {
    "Description": "vmdk01",
    "Format": "vmdk",
    "UserBucket": {
        "S3Bucket": "bucket123",
        "S3Key": "disk-0.vmdk"
    }
  }
]

aws ec2 describe-images \
--owners self

aws ec2 import-image \
--description "vm01" \
--disk-containers "file://a.json"

 

-- 9. イメージのインポートタスクの監視

aws ec2 describe-import-image-tasks \
--import-task-ids import-ami-00000000000000000

 

 


-- 10. EC2インスタンスの作成

aws ec2 describe-images \
--owners self

aws ec2 run-instances \
--image-id ami-11111111111111111 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance01}]'

 


-- 11. クリーンアップ

 


-- EC2インスタンスの削除


aws ec2 describe-instances

aws ec2 terminate-instances --instance-ids i-22222222222222222


-- AMIの削除
aws ec2 deregister-image \
--image-id ami-11111111111111111

aws ec2 describe-images \
--owners self


-- IAMロールの削除
aws iam list-roles | grep vmimport

aws iam detach-role-policy \
--role-name vmimport \
--policy-arn arn:aws:iam::999999999999:policy/policy01


aws iam delete-role --role-name vmimport


-- IAMポリシーの削除
aws iam list-policies | grep policy01

aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01

 


-- バケットの削除
aws s3 ls

aws s3 rb s3://bucket123 --force

 

-- スナップショットの削除

aws ec2 describe-snapshots \
--owner-ids self

aws ec2 delete-snapshot \
--snapshot-id snap-33333333333333333


-- ボリュームの削除

aws ec2 describe-volumes

aws ec2 delete-volume \
--volume-id vol-44444444444444444