You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将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

火山引擎 最新活动