VM Import/Export
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 VM Import/Export 将 VM 作为映像导入

您可以使用 VM Import/Export 将虚拟机 (VM) 映像作为 Amazon 系统映像 (AMI) 从虚拟化环境导入到 Amazon EC2 中,并用于启动实例。随后,您也可以将 VM 映像从实例导回到虚拟化环境中。这让您能够将 VM 导入到 Amazon EC2 中使用,从而充分利用已在 VM 方面所做的投资,以满足您的 IT 安全、配置管理和合规性需求。

注意

对于大多数 VM 导入需求,我们建议您使用 AWS Server Migration Service。AWS SMS 自动完成导入过程 (减少迁移大型 VM 基础设施的工作量),支持不断变化的 VM 的增量更新,并将导入的 VM 转换为现成可用的 Amazon 系统映像 (AMI)。要开始使用 AWS SMS,请参阅 AWS Server Migration Service

将您的 VM 从其虚拟化环境导出

完成 VM 导出的准备工作后,您可以从您的虚拟化环境将其导出。将 VM 作为映像导入时,您可以导入以下格式的磁盘:开放虚拟化存档 (OVA)、虚拟机磁盘 (VMDK)、虚拟硬盘 (VHD/VHDX) 和原始格式。对于某些虚拟化环境,您可以将其导出为开放虚拟化格式 (OVF) – 通常包含一个或多个 VMDK、VHD 或 VHDX 文件。

有关更多信息,请参阅您的虚拟化环境的文档。例如:

将 VM 作为映像导入

从您的虚拟化环境导出您的 VM 后,您可以将其导入 Amazon EC2。无论 VM 来自哪里,导入过程都相同。

先决条件

您必须提供 Amazon S3 存储桶和名为 vmimport 的 IAM 角色。

Amazon S3 存储桶

VM Import 需要 Amazon S3 存储桶来将您的磁盘映像存储在要导入 VM 的区域。您可以按如下说明创建存储桶,或使用现有的存储桶。

(可选) 创建 S3 存储桶

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 选择 Create Bucket

  3. Create a Bucket 对话框中,执行以下操作:

    1. 对于 Bucket Name,键入您的存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域,可能对存储桶名称有其他限制。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的存储桶局限和限制

    2. 对于 Region,为您的 AMI 选择一个区域。

    3. 选择 Create

VM Import 服务角色

VM Import 需要一个角色在您的账户中执行特定的操作,例如:从 Amazon S3 存储桶下载磁盘映像。您必须创建名为 vmimport 的角色,并附带可允许 VM Import 担任相关角色的信任关系策略文档,您还必须将 IAM 策略附加到该角色。

创建服务角色

  1. 利用以下策略创建名为 trust-policy.json 的文件:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:ExternalId": "vmimport" } } } ] }

    您可将文件保存在计算机的任何位置。请记下文件的位置,因为在下一步中您需要指定该文件。

  2. 使用 create-role 命令创建名为 vmimport 的角色,并向 VM Import/Export 提供对该角色的访问权。请确保指定 trust-policy.json 文件的完整路径,并且为路径添加 file:// 前缀。

    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

    注意

    如果您遇到表明“此策略包含无效的 Json”的错误,请仔细检查是否正确提供了 JSON 文件的路径。

  3. 创建名为 role-policy.json 的文件并编写下面的策略,其中,disk-image-file-bucket 为存储磁盘映像的存储桶:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket" ], "Resource":[ "arn:aws-cn:s3:::disk-image-file-bucket", "arn:aws-cn:s3:::disk-image-file-bucket/*" ] }, { "Effect":"Allow", "Action":[ "ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe*" ], "Resource":"*" } ] }
  4. 使用下面的 put-role-policy 命令将策略挂载到之前创建的角色。请务必指定 role-policy.json 文件位置的完整路径。

    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

有关 IAM 角色的更多信息,请参阅 IAM 用户指南 中的 IAM 角色

将映像上传到 Amazon S3

使用所选的上传工具将 VM 映像文件上传到 Amazon S3 存储桶。有关通过 S3 控制台上传文件的信息,请参阅将对象上传至 Amazon S3。有关增强版上传工具 Java 小程序的信息,请参阅使用增强版上传工具

导入 VM

将您的 VM 映像文件上传到 Amazon S3 后,可以使用 AWS CLI 导入该映像。这些工具接受 Amazon S3 存储桶和文件路径,或者公有 Amazon S3 文件的 URL。私有 Amazon S3 文件需要已签名的 GET URL

以下示例使用 AWS CLI 命令 import-image 创建导入任务。

示例 1:导入 OVA

aws ec2 import-image --description "Windows 2008 OVA" --license-type <value> --disk-containers file://containers.json

下面是一个 containers.json 示例文件。

[ { "Description": "Windows 2008 OVA", "Format": "ova", "UserBucket": { "S3Bucket": "my-import-bucket", "S3Key": "vms/my-windows-2008-vm.ova" } }]

示例 2:导入多个磁盘

$ C:\> aws ec2 import-image --description "Windows 2008 VMDKs" --license-type <value> --disk-containers file://containers.json

下面是一个 containers.json 示例文件。

[ { "Description": "First disk", "Format": "vmdk", "UserBucket": { "S3Bucket": "my-import-bucket", "S3Key": "disks/my-windows-2008-vm-disk1.vmdk" } }, { "Description": "Second disk", "Format": "vmdk", "UserBucket": { "S3Bucket": "my-import-bucket", "S3Key": "disks/my-windows-2008-vm-disk2.vmdk" } } ]

检查导入任务的状态

使用 describe-import-image-tasks 命令返回导入任务的状态。

包括的状态值如下:

  • active - 正在运行导入任务。

  • deleting - 正在取消导入任务。

  • deleted - 导入任务已取消。

  • updating - 导入状态正在更新。

  • validating - 正在验证导入的映像。

  • validated - 已验证导入的映像。

  • converting - 正在将导入的映像转换成 AMI。

  • completed - 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。

aws ec2 describe-import-image-tasks --import-task-ids import-ami-abcd1234

您也可以使用较旧的 EC2 CLI 命令 ec2 describe-conversion-tasks 实现相同目的:

aws ec2 describe-conversion-tasks --region <region>

(可选) 取消导入任务

使用 cancel-import-task 命令取消正在运行的导入任务。

aws ec2 cancel-import-task --import-task-id import-ami-abcd1234

后续步骤

现在,您已拥有 AMI,您可以将其作为实例启动,或将其复制到其他的区域。有关更多信息,请参阅 Amazon EC2 文档中的以下主题。