本文档介绍如何将虚拟机复制到其他项目。
准备工作
- 查看永久性磁盘快照的最佳做法并准备用于快照的启动磁盘。
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- Set a default region and zone.
-
所需的角色
如需获得在项目之间复制虚拟机所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色可提供在项目之间复制虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
在项目之间复制虚拟机需要以下权限:
-
针对项目的
compute.instances.create权限 -
使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly权限 -
使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly权限 -
使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly权限 -
为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use权限 -
为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use权限 -
在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp权限 -
为虚拟机分配旧版网络:针对项目的
compute.networks.use权限 -
使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp权限 -
为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata权限 -
为虚拟机设置标记:针对虚拟机的
compute.instances.setTags权限 -
为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels权限 -
为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount权限 -
为虚拟机创建新磁盘:针对项目的
compute.disks.create权限 -
以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use权限 -
以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly权限
将虚拟机复制到其他项目
在源项目中,使用以下命令之一创建虚拟机启动磁盘的快照:
可用区启动磁盘
如果您的虚拟机具有可用区启动磁盘,请使用以下命令创建快照:
gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk SOURCE_DISK \ --snapshot-type SNAPSHOT_TYPE \ --source-disk-zone SOURCE_DISK_ZONE替换以下内容:
- SNAPSHOT_NAME:快照的名称。
- SOURCE_DISK:可用区级永久性磁盘卷的名称,您将根据它创建快照。
- SNAPSHOT_TYPE:快照类型:STANDARD 或 ARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。 选择归档,实现更经济高效的数据保留。
- SOURCE_DISK_ZONE:可用区级永久性磁盘卷的可用区,您将根据该卷创建快照。
区域启动磁盘
如果您的虚拟机具有区域启动磁盘,请使用以下命令创建快照:
gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk SOURCE_DISK \ --source-disk-region=SOURCE_DISK_REGION \ --snapshot-type=SNAPSHOT_TYPE替换以下内容:
- SNAPSHOT_NAME:快照的名称。
- SOURCE_DISK:您要根据其创建快照的区域级永久性磁盘卷的名称。
- SOURCE_DISK_REGION:您要根据其创建快照的区域级永久性磁盘卷的区域。
- SNAPSHOT_TYPE:快照类型:STANDARD 或 ARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。
使用以下命令通过快照创建自定义映像:
gcloud compute images create IMAGE_NAME \ --source-snapshot=SOURCE_SNAPSHOT \ [--storage-location=LOCATION]替换以下内容:
IMAGE_NAME:新映像的名称SOURCE_SNAPSHOT:要根据其创建映像的快照LOCATION:可选:用于指定在其中存储此映像的单区域或多区域的标志。例如,指定us可将映像存储在us多区域中,或指定us-central1可将其存储在us-central1区域中。如果您未选择位置,Compute Engine 会将映像存储在最接近映像来源位置的多区域中。
可选:与在目标项目中创建虚拟机的用户共享自定义映像。如需详细了解如何共享自定义映像,请参阅在组织内共享自定义映像。
在目标项目中,使用以下命令通过自定义映像创建虚拟机:
gcloud compute instances create VM_NAME \ --image-project IMAGE_PROJECT \ IMAGE_FLAG \ --subnet SUBNET替换以下内容:
VM_NAME:虚拟机的名称IMAGE_PROJECT:映像所在的 Google Cloud 项目的 IDIMAGE_FLAG:指定以下其中一项:- 使用
--image IMAGE_NAME标志指定自定义映像。例如
--image my-debian-image-v2。 - 如果您将自定义映像创建为自定义映像系列的一部分,请使用
--image-family IMAGE_FAMILY_NAME标志指定该自定义映像系列。此项表示通过自定义映像系列中最新的未弃用的操作系统映像操作系统版本创建虚拟机。例如,如果您指定
--image-family my-debian-family,则 Compute Engine 会通过自定义my-debian-family映像系列中最新的操作系统映像创建虚拟机。
- 使用
SUBNET:如果子网和实例位于同一项目中,请将SUBNET替换为与该实例位于同一区域的子网的名称。如需在共享 VPC 网络中指定子网,请将
SUBNET替换为以下格式的字符串:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME替换以下内容:
HOST_PROJECT_ID:共享 VPC 宿主项目的 ID。REGION:子网的区域SUBNET_NAME:子网的名称
共享 VPC 网络的子网区域还必须与实例所在的区域相匹配。
后续步骤
- 自定义目标项目的 VPC 网络。