如何将S3中存储的本地导出VM文件部署为AWS EC2实例/AMI
如何将S3中存储的本地导出VM文件部署为AWS EC2实例/AMI
别着急,你手里的这组文件(vmdk、nvram、mf、ovf)其实就是拆分版的OVF虚拟机包——OVA只不过是把这些文件打包成了一个压缩文件而已,所以完全可以用AWS的VM Import/Export服务来完成部署,下面是一步步的实操指南:
1. 准备S3文件与IAM权限
- 首先确认所有文件都在同一个S3桶的同一路径下(比如
s3://your-vm-bucket/exported-vm/),方便后续导入时识别关联。 - 创建一个名为
vmimport的IAM角色,给它授予访问S3桶和执行导入任务的权限:- 先创建信任策略文件(比如
trust-policy.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://trust-policy.json - 再创建权限策略文件(比如
role-policy.json),替换为你的S3桶信息:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-vm-bucket", "arn:aws:s3:::your-vm-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://role-policy.json
- 先创建信任策略文件(比如
2. 编写导入任务配置文件
创建一个JSON配置文件(比如import-config.json),指定OVF文件的S3路径、实例类型等参数:
{ "Description": "Import on-premises VM", "DiskContainers": [ { "Description": "VM Disk", "Format": "ovf", "UserBucket": { "S3Bucket": "your-vm-bucket", "S3Key": "exported-vm/your-vm-file.ovf" } } ], "InstanceType": "t2.medium", "SubnetId": "subnet-xxxxxx", "SecurityGroupIds": ["sg-xxxxxx"] }
注意:这里只需要指定OVF文件路径即可,AWS会自动关联同路径下的vmdk、mf、nvram等配套文件。
3. 启动导入任务
用AWS CLI执行导入命令:
aws ec2 import-instance --description "Import my on-prem VM" --disk-containers file://import-config.json
执行后可以用以下命令查看任务进度:
aws ec2 describe-import-instance-tasks
等待任务完成(时间取决于你的磁盘大小,可能需要几十分钟),AWS会自动创建一个可用的EC2实例。
4. (可选)将实例转为AMI
如果需要批量部署相同配置的实例,你可以把导入完成的EC2实例转为AMI:
- 先停止实例(确保所有数据写入完成)
- 执行命令创建AMI:
aws ec2 create-image --instance-id i-xxxxxx --name "My Imported VM AMI" --description "AMI from on-prem VM export" - 等待AMI创建完成后,就可以用它快速启动多个相同配置的EC2实例了。
一些注意事项
- 确保你的VM操作系统是AWS支持的(比如Windows Server、Ubuntu、CentOS等常见发行版),否则可能导入失败。
- vmdk文件必须是完整的磁盘镜像,不能是差分磁盘或快照格式,否则需要先合并为完整镜像再导入。
- 如果导入过程中出现错误,可以查看CloudWatch日志中的
vmimport日志组,排查具体问题。
备注:内容来源于stack exchange,提问作者Nichm




