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ポリシー作成
{
"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 で、ルートファイルシステムに対して以下のいずれかが使用されていることを確認します。EXT2、EXT3、EXT4、Btrfs、JFS、XFS
vmdk を作成
-- 7. イメージを Amazon S3 にアップロードする
aws s3 cp disk-0.vmdk s3://bucket123
aws s3 ls s3://bucket123 --recursive
-- 8. VM のインポート
[
{
"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 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