如果您的本地环境中已有包含您所需软件和配置的虚拟磁盘(有时称为黄金磁盘或黄金映像),您可以将这些虚拟磁盘导入 Compute Engine 中并使用生成的映像创建虚拟机,从而节约时间。Migrate to Virtual Machines 导入工具支持大多数虚拟磁盘文件格式,包括 VMDK 和 VHD。
准备工作
- 在您的项目上启用 VM Migration API。如需详细了解如何启用 VM Migration API,请参阅启用 Migrate to Virtual Machines 服务。
- 确保 Migrate to Virtual Machines 支持磁盘上的操作系统。如需了解详情,请参阅支持的操作系统。
- 确保要导入的虚拟磁盘映像文件受支持。
支持的格式
您可以使用 Migrate to Virtual Machines 导入以下格式的虚拟磁盘映像文件:
- 虚拟机磁盘 (VMDK) - 推荐选项,VMDK 文件的导入速度更快
- QEMU 写入时复制 (QCOW)
- QEMU 写入时复制 2 (QCOW2)
- QEMU 增强磁盘格式 (QED)
- VPC
- 虚拟磁盘映像 (VDI)
- 虚拟硬盘 v2 (VHDX)
- 虚拟硬盘 (VHD)
除了这些格式之外,还支持压缩为 .tar.gz 的原始文件。确保压缩文件包含名为 disk.raw 的单个文件。
映像导入过程
如需使用 Migrate to Virtual Machines 将虚拟磁盘映像导入 Compute Engine 映像,请按照以下步骤操作:
准备要导入的虚拟磁盘文件
如需将虚拟磁盘映像导入 Compute Engine 映像,您必须先准备要导入的虚拟磁盘映像文件。以下部分详细讨论了这些任务。
将虚拟磁盘映像文件添加到 Cloud Storage
如需将虚拟磁盘映像导入 Compute Engine 映像,您必须先将虚拟磁盘映像文件添加到 Cloud Storage。如需了解详情,请参阅从文件系统上传对象。为了获得更好的性能,我们建议您将虚拟磁盘映像文件上传到您要在其中创建映像的同一云区域的存储桶。
授予所需权限
如需将虚拟磁盘映像导入 Compute Engine 映像,请按照下表中的说明授予权限。
角色 | 所需权限 | 说明 |
---|---|---|
Storage Object Viewer | roles/storage.objectViewer |
为宿主项目 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的默认 Migrate to Virtual Machines 服务账号授予您要导入的映像所在存储桶的 roles/vmmigration.serviceAgent 角色。此权限可让 Migrate to Virtual Machines 访问来源映像。 |
VM Migration Administrator | roles/vmmigration.admin |
在宿主项目中,为您要用来导入来源映像的用户账号授予 roles/vmmigration.admin 角色。 |
VM Migration Service Account | roles/vmmigration.serviceAgent |
为宿主项目 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的默认 Migrate to Virtual Machines 服务账号授予目标项目的 roles/vmmigration.serviceAgent 角色。例如,如果 service-1234567890@gcp-sa-vmmigration.iam.gserviceaccount.com 是宿主项目中的 Migrate to Virtual Machines 服务账号,则您必须为此服务账号授予 roles/vmmigration.serviceAgent 角色,才能在目标项目中创建映像。 |
选择目标项目
如需托管 Compute Engine 映像,您必须创建或选择目标项目。目标项目定义 Compute Engine 映像的目标项目。如需详细了解如何创建或选择目标项目,请参阅添加目标项目。
将虚拟磁盘映像导入 Compute Engine
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST API 命令将虚拟磁盘映像导入 Compute Engine。
控制台
如需使用 Google Cloud 控制台将虚拟磁盘映像导入 Compute Engine,请按照以下步骤操作。
- 打开 Google Cloud 控制台中的 Migrate to Virtual Machines 页面。
前往“Migrate to Virtual Machines”(迁移到虚拟机)页面 - 选择映像导入标签页。
- 点击创建映像。
- 定义映像的特征。下表列出了您可以为映像设置的参数。
版块标题 字段名称 说明 常规 名称 您要创建的映像的名称。如需详细了解命名规则,请参阅命名惯例。 映像导入 ID 表示映像导入资源的 ID。将映像导入 Compute Engine 时,Migrate to Virtual Machines 会首先创建映像导入资源。映像导入资源表示映像导入过程。您可以使用映像导入 ID 来获取在映像导入过程中导入的映像的链接。 来源 Cloud Storage 文件 要从中导入映像的文件。点击浏览查看当前项目中的存储分区列表,然后选择要从中导入映像的文件。
如果要从其他项目的存储桶导入映像,则必须以 bucket/folder/file 格式输入路径。如需获取存储桶中对象的路径,请参阅查看对象元数据。复制路径时,请确保不会复制gs://
前缀。
请注意,您只能从.vmdk
和.tar.gz
文件导入映像。区域 您要在其中创建映像的区域。如需查看支持的区域列表,请参阅区域和可用区。 目标项目 要在其中创建映像的目标项目。如果您尚未添加目标项目,请按照添加目标项目中提供的说明执行此操作。 系列 (可选)选择映像系列。Compute Engine 提供了映像系列,以帮助您确保自动化系统可以引用最新映像。作为管理员,您可以将一组映像划分为一个映像系列。如需了解详情,请参阅公共映像系列。 说明 (可选)为映像添加说明。 跳过操作系统适配 如需跳过操作系统适配,请点击跳过操作系统适配开关以切换到开启位置。
为了在 Google Cloud 上正常运行,基于导入的映像创建的虚拟机需要更改配置。这些更改称为“操作系统适配”。Migrate to Virtual Machines 会在映像导入过程中自动执行操作系统适配。如需了解详情,请参阅调整虚拟机实例,使其能够在 Google Cloud 上运行。泛化 若要泛化映像,请点击泛化开关以切换到开启位置。从映像创建实例时,Windows 会向实例添加一些唯一信息。泛化是指移除此信息的过程,以便您可以从同一映像创建多个实例。 许可 许可类型 Compute Engine 支持为已部署的虚拟机使用随用随付 (PAYG) 许可以及自带许可 (BYOL)。Migrate to Virtual Machines 会根据迁移后的操作系统为迁移后的虚拟机分配默认许可类型,如支持的操作系统中所述。
如果您的操作系统支持多种许可类型,您可以替换默认许可类型,以明确指定许可类型 PAYG 或 BYOL。
额外许可 额外许可 使用有效的网址格式,您最多可以向通过导入的映像创建的虚拟机实例添加 10 个额外许可。例如,您可以使用以下网址格式添加额外许可:
https://www.googleapis.com/compute/beta/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise
标签 如需整理项目,您可为资源添加键值对形式的标签。请参阅使用标签整理资源。 加密 由 Google 管理的加密密钥 如果选择此选项,则可以使用 Google 管理的加密密钥在导入过程中加密您的数据。如需了解详情,请参阅加密静态数据。 客户管理的加密密钥 选择此选项,可在导入过程中使用客户管理的加密密钥 (CMEK) 来加密数据,以及导入过程创建的映像的数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以使用 CMEK 来加密和解密数据。这些加密密钥由您创建、管理和拥有。 如需了解详情,请参阅 使用 Cloud KMS 密钥保护资源。
添加 CMEK 时,您必须按照下表中的说明授予权限。角色 所需权限 说明 Cloud VM Migration Service Account roles/vmmigration.serviceAgen
向 Compute Engine 服务账号授予此权限,以加密导入过程中创建的映像的数据。 Compute Engine Service Agent roles/compute.serviceAgent
向 Migrate to Virtual Machines 服务代理授予此权限,以便在导入过程中加密数据。 - 选择创建。
gcloud
如需使用 Google Cloud CLI 将虚拟磁盘映像导入 Compute Engine,请使用以下请求。
gcloud migration vms image-imports create IMAGE_NAME \ --source-file=SOURCE_FILE \ --location=REGION_ID \ --target-project=projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
替换以下内容:
IMAGE_NAME
:您要创建的映像的名称。如需详细了解命名规则,请参阅命名惯例。SOURCE_FILE
:要从中导入映像的文件。输入gs://bucket/folder/file
格式的路径。如需获取存储桶中对象的路径,请参阅查看对象元数据。请注意,您只能从.vmdk
和.tar.gz
文件导入映像。REGION_ID
:您希望在其中运行映像导入过程的区域。将在最近的多区域中创建此映像。如果要在某个区域中创建映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。HOST_PROJECT_ID
:要从中迁移虚拟磁盘映像的宿主项目的名称。TARGET_PROJECT
:要在其中创建映像的目标项目。如果您尚未添加目标项目,请按照添加目标项目中提供的说明执行此操作。
如需了解详情,请参阅 gcloud migration vms image-imports
。
REST
如需使用 REST API 将虚拟磁盘映像导入 Compute Engine,请按以下步骤操作。
使用以下请求创建映像导入资源。
POST https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports?imageImportId=IMPORT_NAME { "cloudStorageUri": "SOURCE_FILE", "diskImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT", ... } }
替换以下内容:
HOST_PROJECT_ID
:要从中迁移虚拟磁盘映像的宿主项目的名称。REGION_ID
:您希望在其中运行映像导入过程的区域。将在最近的多区域中创建此映像。如果要在某个区域中创建映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。SOURCE_FILE
:要从中导入映像的文件。输入 gs://bucket/folder/file 格式的路径。如需获取存储桶中对象的路径,请参阅查看对象元数据。请注意,您只能从.vmdk
和.tar.gz
文件导入映像。IMAGE_NAME
:您要创建的映像的名称。如需详细了解命名规则,请参阅命名惯例。TARGET_PROJECT
:要在其中创建映像的目标项目。如果您尚未添加目标项目,请按照添加目标项目中提供的说明执行此操作。
在此示例中,
IMPORT_NAME
是表示映像导入资源的 ID。将映像导入 Compute Engine 时,Migrate to Virtual Machines 会首先创建映像导入资源。映像导入资源表示映像导入过程。您可以使用IMPORT_NAME
获取在映像导入过程中导入的映像的链接。如需查看映像导入创建请求字段支持的字段的完整列表,请参阅下表。
字段名称 说明 cloudStorageUri
string
要从中导入映像的文件的路径。输入 gs://bucket/folder/file 格式的路径。如需获取存储桶内对象的路径,请参阅查看对象元数据。
请注意,您只能从.vmdk
和.tar.gz
文件导入映像。diskImageTargetDefaults.targetProject
string
TargetProject
的路径。要在其中创建映像的目标项目。如需了解详情,请参阅目标项目 API 参考文档。例如:
projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
在示例中,替换以下内容:HOST_PROJECT_ID
:要从中迁移虚拟磁盘映像的宿主项目的名称。TARGET_PROJECT
:要在其中创建映像的目标项目。
diskImageTargetDefaults.imageName
string
要创建的映像的名称。如需详细了解命名规则,请参阅资源命名惯例。diskImageTargetDefaults.description
string
(可选)映像的说明。diskImageTargetDefaults.familyName
string
(可选)选择映像系列。Compute Engine 提供了映像系列,以帮助您确保自动化系统可以引用最新映像。作为管理员,您可以将一组映像划分为一个映像系列。如需了解详情,请参阅公共映像系列。如需了解详情,请参阅公共映像系列。diskImageTargetDefaults.labels
map (key: string, value: string)
如需整理项目,请为资源添加键值对形式的标签。请参阅为资源添加标签。diskImageTargetDefaults.additionalLicenses
string[]
使用有效的网址格式,您最多可以向通过导入的映像创建的虚拟机实例添加 10 个额外许可。例如,您可以使用以下网址格式添加额外许可:
https://www.googleapis.com/compute/beta/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise
diskImageTargetDefaults.singleRegionStorage
boolean
如果您希望映像storageLocations
是一个区域,请将此标志设置为 true。如果将此标志设置为 false,则系统会选择最近的多区域。diskImageTargetDefaults.dataDiskImageImport
boolean
如果要跳过操作系统适配,请将此标志设置为 true。
为了在 Google Cloud 上正常运行,基于导入的映像创建的虚拟机需要更改配置。这些更改称为“操作系统适配”。Migrate to Virtual Machines 在映像导入过程中自动执行操作系统适配。如需了解详情,请参阅调整虚拟机实例,使其能够在 Google Cloud 上运行。diskImageTargetDefaults.osAdaptationParameters.licenseType
string
您要用于映像的许可类型。Compute Engine 支持为已部署的虚拟机使用随用随付 (PAYG) 许可以及自带许可 (BYOL)。Migrate to Virtual Machines 会根据迁移后的操作系统为迁移后的虚拟机分配默认许可类型,如支持的操作系统中所述。
如果您的操作系统支持多种许可类型,您可以替换默认许可类型,以明确指定许可类型 PAYG 或 BYOL。diskImageTargetDefaults.osAdaptationParameters.generalize
boolean
如果要泛化映像,请将此标志设置为 true。
从映像创建实例时,Windows 会向实例添加一些唯一信息。泛化是指移除此信息的过程,以便您可以从同一映像创建多个实例。diskImageTargetDefaults.encryption
string
您要在导入过程中用于加密数据的 Google 管理的加密密钥。如需了解详情,请参阅加密静态数据。encryption
string
选择此选项,可在导入过程中使用客户管理的加密密钥 (CMEK) 来加密数据,以及导入过程创建的映像的数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以使用 CMEK 来加密和解密数据。这些加密密钥由您创建、管理和拥有。 如需了解详情,请参阅使用 Cloud KMS 密钥保护资源。
添加 CMEK 时,您必须按照下表中的说明授予权限。角色 所需权限 说明 Cloud VM Migration Service Account roles/vmmigration.serviceAgent 向 Compute Engine 服务账号授予此权限,以加密导入过程中创建的映像的数据。 Compute Engine Service Agent roles/compute.serviceAgent 向 Migrate to Virtual Machines 服务代理授予此权限,以便在导入过程中加密数据。 您看到的响应应该与以下示例响应类似。
{ "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "metadata": { "createTime": "2023-10-31T09:12:26.94928636Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用以下命令轮询操作,以检查映像导入作业是否已完成。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID
替换以下内容:
HOST_PROJECT_ID
:要从中迁移虚拟磁盘映像的宿主项目的名称。REGION_ID
:您希望在其中运行映像导入过程的区域。将在最近的多区域中创建此映像。如果要在某个区域中创建映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。OPERATION_ID
:迁移作业的操作 ID。
您应该会看到类似于以下示例响应的操作完成响应。
{ "done": true, "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "response": { "@type": "type.googleapis.com/google.cloud.vmmigration.v1.ImageImport", "name": "projects/<HOST_PROJECT_ID>/locations/us-central1/imageImports/IMPORT_NAME", "cloudStorageUri": "SOURCE_FILE", "createTime": "2023-10-31T09:04:04.413664947Z", "diskImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "recentImageImportJobs": [ { "name": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "diskImageTargetDetails": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "state": "PENDING" } ] }, "metadata": { "createTime": "2023-10-31T09:04:04.416740716Z", "endTime": "2023-10-31T09:05:36.79987142Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用以下命令监控映像导入作业是否完成。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports/IMPORT_NAME/imageImportJobs/image-import-job
替换以下内容:
HOST_PROJECT_ID
:要从中迁移虚拟磁盘映像的宿主项目的名称。REGION_ID
:您希望在其中运行映像导入过程的区域。将在最近的多区域中创建此映像。如果要在某个区域中创建映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。IMPORT_NAME
:表示映像导入资源的 ID。将映像导入 Compute Engine 时,Migrate to Virtual Machines 会首先创建映像导入资源。映像导入资源表示映像导入过程。您可以使用IMPORT_NAME
获取在映像导入过程中导入的映像的链接。
您应该会看到类似于以下示例响应的作业完成响应。
{ "createTime":"2023-10-31T09:12:27.053788394Z", "createdResources":[ "https://www.googleapis.com/compute/v1/projects/USER_PROJECT/global/images/IMAGE_NAME" ], "diskImageTargetDetails": { "imageName":"IMAGE_NAME", "targetProject":"projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "endTime":"2023-10-31T09:16:50.224865783Z", "name":"projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "state":"SUCCEEDED" }