vmimport 服务可以把虚拟机导入到EC2的AMI或者实例。所以可以在通过一些虚拟机软件先安装这个ISO, 比如我们常用的vmware, EXSI,virtual box这一类的软件,或者Azure导出的虚拟机。
在配置系统完成后,然后再导出虚拟机的格式,目前vmimport支持OVA,VMDK,VHD/VHDX,RAW的格式。 同时要导入的操作系统也需要满足一定的要求,这些vmimport的准备要求,您可以查看链接【1】 您要在账号中新建一个名为vmimport的用户角色,在您将虚拟机文件上传到S3之后,后续是由这个角色的权限进行导入AMI。 同时您的机器也需要由一个IAM user/role 的身份,用于后边执行AWS CLI。
大致步骤如下:
- 在虚拟机中安装ISO,导出ova/vmdk
- 上传ova/vmdk 到S3
- 创建vmimport的role
- 使用AWS CLI导入(这个过程可能很长) 创建vmimport的role的步骤如下:
目前官方只提供了虚拟机文件转换到EC2的方法,如果用工具转换镜像则不能成功。
. 创建一个名为 trust-policy.json 的文件,这里用来保存role的信任关系:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "[vmie.amazonaws.com](http://vmie.amazonaws.com/)" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:Externalid": "vmimport" } } } ] }
使用CLI创建role
aws iam create-role --role-name vmimport --assume-role-policy-document "[file://C:\import\trust-policy.json](file://c:/import/trust-policy.json)"
在role-policy.json的写这个role的策略,其中disk-image-file-bucket是磁盘映像的存储桶,export-bucket 是导出图像的存储桶:
{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::disk-image-file-bucket", "arn:aws:s3:::disk-image-file-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::export-bucket", "arn:aws:s3:::export-bucket/*" ] }, { "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://C:\import\role-policy.json](file://c:/import/role-policy.json)"
导入的步骤如下,这里以单盘为例,具体您可能需要根据您的需要进行更改:【2】【3】 1. 导入命令
aws ec2 import-image --description "My server VM" --disk-containers "[file://C:\import\containers.json](file://c:/import/containers.json)"
其中containers.json用来指定虚拟文件的格式和位置,以下两种写法都是可以的。
1.[ { "Description": "My Server OVA", "Format": "ova", "UserBucket": { "S3Bucket": "my-import-bucket", "S3Key": "vms/my-server-vm.ova" } } ]
2. [ { "Description": "My Server OVA", "Format": "ova", "Url": "s3://my-import-bucket/vms/my-server-vm.ova" } ]
监控导入进度 aws ec2 describe-import-image-tasks –import-task-ids import-ami-1234567890abcdef0 启动task-ids可以在第一步的返回值中查看到。 结果如下:
{ "ImportImageTasks": [ { "ImportTaskId": "import-ami-01234567890abcdef", "ImageId": "ami-1234567890EXAMPLE", "SnapshotDetails": [ { "DiskImageSize": 705638400.0, "Format": "ova", "SnapshotId": "snap-111222333444aaabb" "Status": "completed", "UserBucket": { "S3Bucket": "my-import-bucket", "S3Key": "vms/my-server-vm.ova" } } ], "Status": "completed" } ] }
如果在导入过程中遇到一些错误,您可以查看链接【4】中的解决办法来排查。 在完成安装之后,可能需要对 Linux 实例启用增强联网或者安装升级 NVMe 驱动程序。【5】【6】
参考链接:
【1】https://docs.aws.amazon.com/zh_cn/vm-import/latest/userguide/prerequisites.html 【2】https://docs.amazonaws.cn/vm-import/latest/userguide/required-permissions.html
【3】https://docs.amazonaws.cn/vm-import/latest/userguide/vmimport-image-import.html 【4】https://docs.amazonaws.cn/vm-import/latest/userguide/vmimport-troubleshooting.html 【5】https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/enhanced-networking-ena.html 【6】https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html#install-nvme-driver