创建机器映像后,您可以使用它复制源计算实例。如需详细了解机器映像的用途,请参阅何时使用机器映像。
机器映像包含克隆实例所需的大部分信息和数据。
机器映像不可更改。不过,在通过机器映像创建实例时,您可以替换几乎所有机器映像属性。
您可以使用Google Cloud 控制台、Google Cloud CLI 或 REST 通过机器映像创建实例。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
您在 60 分钟内最多可以通过一个源机器映像创建 6 个实例。如果超出此限制,则实例创建操作将失败并返回如下所示的错误:
Operation rate exceeded for resource 'projects/test/global/machineImages/machine-image-1'. Too frequent operations from the source resource.
如需创建超过定义限制(60 分钟内 6 个实例)的更多实例,请通过源实例创建额外的机器映像,或通过新实例创建短期有效的机器映像。然后,您可以通过这些新机器映像创建所需数量的实例。
您无法使用 Google Cloud 控制台通过机器映像创建挂接区域磁盘的实例。请使用 Google Cloud CLI 或 REST,并为每个挂接的区域级磁盘指定
replicaZones
和deviceName
参数。如需了解详情,请参阅通过机器映像创建实例(使用属性替换)。在 Google Cloud 控制台中,前往创建实例页面。
在
虚拟机创建自… 菜单中,选择机器映像。在随即显示的基于机器映像创建虚拟机窗口中,执行以下操作:
选择机器映像。
要创建并启动该实例,请点击创建。
INSTANCE_NAME
:实例的名称ZONE
:实例所在的可用区SOURCE_MACHINE_IMAGE_NAME
:用于创建实例的机器映像PROJECT_ID
:您的项目 ID。ZONE
:实例所在的可用区。INSTANCE_NAME
:实例的名称。SOURCE_MACHINE_IMAGE_URL
:您要用于创建实例的机器映像的完整或部分网址。例如,如果您在名为myProject
的项目中有一个名为my-machine-image
的机器映像。以下网址有效:https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
- 通过机器映像创建实例时,除磁盘名称外,您无法覆盖挂接磁盘的任何属性。
您必须为每个挂接的区域级磁盘指定
replicaZones
参数,并提供该磁盘在机器映像中的deviceName
参数。如果用于生成机器映像的来源实例和新实例属于同一项目和同一区域,则以下规则适用:
- 来源实例和新实例的大多数属性都相同。不同的属性是自动分配的属性,例如临时 IP 地址。
- 如果创建新实例时源实例仍存在,则新实例无法使用与源实例相同的名称和可用区。
如果用于生成机器映像的来源实例和新实例属于同一项目但不同区域,则以下规则适用:
- 您必须替换新实例的所有地区和区域资源。例如,如果您使用源实例位于其他区域的机器映像创建实例,则需要替换子网、区域防火墙规则等区域资源。但是,您不需要替换负载均衡器和服务账号等全球资源,除非您想要修改这些资源。
在 Google Cloud 控制台中,前往创建实例页面。
在
虚拟机创建自… 菜单中,选择机器映像。在随即显示的通过机器映像创建虚拟机窗口中,选择模板后点击
自定义。可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项。
要创建并启动该实例,请点击创建。
PROJECT_ID
:项目 ID。ZONE
:实例所在的可用区。INSTANCE_NAME
:实例的名称。NEW_MACHINE_TYPE
:您要用于实例的机器类型。SOURCE_MACHINE_IMAGE_URL
:您要用于创建实例的机器映像的完整或部分网址。例如,如果您在名为myProject
的项目中有一个名为my-machine-image
的机器映像。以下网址有效:https://www.googleapis.com/compute/v1/projects/myProject/global/machineImages/my-machine-image
projects/myProject/global/machineImages/my-machine-image
global/machineImages/my-machine-image
- 如果您替换了某个基本字段,则机器映像中的对应基本字段将替换为请求中的基本字段值。基本字段包含
machineType
和name
等参数。 - 如果您替换重复字段,则对应属性的所有重复值都会替换为请求中提供的相应值。重复字段通常是
list
类型的属性。例如,disks
和networkInterfaces
是重复字段。 - 如果您替换
nested object
,则机器映像中的对象会与请求中的相应对象规范合并。请注意,如果嵌套对象位于重复字段中,则将按照重复字段的规则处理该字段。标签是此规则的一个例外,即使它是object
类型,也会被视为重复字段。 -
可以授予对源项目或机器映像的权限。使用
gcloud compute machine-images add-iam-policy-binding
命令授予对机器映像的权限。gcloud compute machine-images add-iam-policy-binding MACHINE_IMAGE_NAME \ --project=MACHINE_IMAGE_PROJECT \ --member='ACCOUNT_EMAIL' \ --role='roles/compute.admin'
替换以下内容:
MACHINE_IMAGE_PROJECT
:包含来源机器映像的项目的 ID。MACHINE_IMAGE_NAME
:要向其中添加权限绑定的机器映像的名称。ACCOUNT_EMAIL
:正在创建实例的serviceAccount
或user
的邮箱。请确保邮箱格式包含所需前缀。前缀必须为以下项之一:user:
如果邮箱与用户账号关联,请指定此前缀。例如user:user@example.com
。serviceAccount:
如果邮箱与服务账号关联,请指定此前缀。例如serviceAccount:123456789000-compute@developer.gserviceaccount.com
。
示例
比方说,如果要将名为
my-machine-image
的机器映像的compute.admin
绑定添加到服务账号邮箱123456789000-compute@developer.gserviceaccount.com
,请使用以下gcloud CLI
命令:gcloud compute machine-images add-iam-policy-binding my-machine-image \ --project=machine-image-project \ --member='serviceAccount:123456789000-compute@developer.gserviceaccount.com' \ --role='roles/compute.admin'
为运行
gcloud compute instances create
命令的用户授予与机器映像关联的服务账号的 Service Account User 角色 (roles/iam.serviceAccountUser
)。使用
gcloud compute instances create
命令可以通过机器映像创建实例。gcloud compute instances create INSTANCE_NAME \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE \ --source-machine-image=projects/MACHINE_IMAGE_PROJECT/global/machineImages/MACHINE_IMAGE_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --subnet=SUBNET
替换以下内容:
INSTANCE_PROJECT_ID
:您希望创建实例的项目的 IDINSTANCE_NAME
:实例的名称ZONE
:实例所在的可用区MACHINE_IMAGE_PROJECT
:机器映像所在项目的 IDMACHINE_IMAGE_NAME
:用于创建实例的机器映像SERVICE_ACCOUNT_EMAIL
:要关联到实例的服务账号的邮箱SUBNET
:如果子网和实例位于同一项目中,请将 SUBNET 替换为与该实例位于同一区域的子网的名称如需在共享 VPC 网络中指定子网,请将
SUBNET
替换为以下格式的字符串:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
请替换以下内容:
HOST_PROJECT_ID
:共享 VPC 宿主项目的 ID。REGION
:子网的区域SUBNET_NAME
:子网的名称
示例
例如,以下命令会使用名为
my-machine-image
的机器映像,在us-east1-b
可用区的vm-project
中创建一个名为my-instance
的虚拟机。--service-account
标志指定要关联到新创建的虚拟机的服务账号。如果您未提供此标志,则无法在两个项目之间共享源服务账号,并且操作将失败。gcloud compute instances create my-instance \ --project=vm-project \ --zone=us-east1-b \ --source-machine-image=projects/machine-image-project/global/machineImages/my-machine-image \ --service-account=000123456789-compute@developer.gserviceaccount.com
创建虚拟机后,会输出如下内容:
Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS my-instance us-east1-b e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
- 详细了解机器映像
- 详细了解如何创建 Compute Engine 实例
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得通过机器映像创建 Compute Engine 实例所需的权限,请让您的管理员为您授予计算实例或项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。限制
通过机器映像创建实例时适用以下限制:
通过机器映像创建实例(不替换任何属性)
如果您要创建完全基于机器映像的实例,且不更改属性,请使用此方法。
控制台
gcloud
使用
gcloud compute instances create
命令可以通过机器映像创建实例。gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --source-machine-image=SOURCE_MACHINE_IMAGE_NAME
替换以下内容:
示例
例如,您可以使用以下
gcloud
命令通过名为my-machine-image
的机器映像在us-east1-b
区域中创建一个名为my-instance
的实例。gcloud compute instances create my-instance \ --zone=us-east1-b \ --source-machine-image=my-machine-image
实例创建完成后,输出内容类似如下:
Created [https://www.googleapis.com/compute/v1/projects/project-12345/zones/us-east1-b/instances/my-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS my-instance us-east1-b e2-standard-2 192.0.2.1 203.224.0.113 RUNNING
REST
在 API 中,构建对
instances.insert
方法的POST
请求。在请求正文中,添加以下参数:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL" }
请替换以下内容:
通过机器映像创建实例并替换属性
如果您希望主要基于机器映像创建实例,但稍作一些更改,则可以使用替换行为。如需使用替换行为,请在创建实例时传入特性以替换现有机器映像属性。
使用替换功能时,请注意以下说明:
控制台
gcloud
使用
gcloud compute instances create
命令可以通过机器映像创建实例并添加要替换的属性。例如,您可以使用以下
gcloud
命令通过名为my-machine-image
的机器映像在us-east1-b
可用区中创建一个名为my-instance
的虚拟机。在此示例中,系统会应用替换以更改机器类型、停止主机维护政策,以及配置名为regional-disk-0
的区域级永久性磁盘。gcloud compute instances create my-instance \ --zone=us-east1-b \ --source-machine-image=my-machine-image \ --machine-type=e2-standard-2 \ --maintenance-policy=TERMINATE \ --create-disk=device-name=boot-device-0,boot=true,auto-delete=true \ --create-disk=device-name=regional-disk-0,\ replica-zones=^:^us-east1-b:us-east1-c,boot=false
REST
如需在实例创建期间替换机器映像属性,请构建
POST
请求并调用instances.insert
方法。在请求正文中,添加sourceMachineImage
参数以及您需要的所有替换值。您可以添加通常在实例创建过程中设置的任何属性。例如,如需替换机器类型,您的 API 调用将包含machineType
参数。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/NEW_MACHINE_TYPE", "sourceMachineImage": "SOURCE_MACHINE_IMAGE_URL" }
替换以下内容:
替换行为
Compute Engine API 中的替换行为遵循 JSON 合并补丁规则,如 RFC 7396 所述。总的来说,以下规则适用:
例如,如果您要通过机器映像创建虚拟机并使用虚拟机创建区域级磁盘,则可以对磁盘使用替换,以便指定
replicaZones
选项。由于disks
字段是重复字段,因此您必须为所有挂接的磁盘和启动磁盘指定磁盘配置,而不仅仅是区域级磁盘。POST https://compute.googleapis.com/compute/v1/projects/my-proj/zones/us-west1-a/instances { "name": "vm-from-image", "sourceMachineImage": "global/machineImages/my-machine-image", "disks": [ { "kind": "compute#attachedDisks", "boot": true, "autoDelete": true, "deviceName": "boot-device", "initializeParams": { "sourceImage": "projects/my-proj/global/images/my-image", "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard", } }, { "kind": "compute#attachedDisk", "boot": false, "autoDelete": true, "deviceName": "regional-device-0", "initializeParams": { "diskType": "projects/my-proj/zones/us-west1-a/diskTypes/pd-standard", "replicaZones": [ "projects/my-proj/zones/us-west1-a", "projects/my-proj/zones/us-west1-c" ] } } ] }
使用来自其他项目的机器映像创建实例
在您通过其他项目的机器映像创建实例时,您可能无法访问与该源项目关联的服务账号。如果要通过位于其他项目中的机器映像创建实例,您需要确保可以访问该机器映像,并能够替换新实例上的服务账号属性。
如果您在使用共享 VPC 网络的项目之间共享机器映像,则必须在通过该机器映像创建实例时明确指定共享 VPC 详细信息。例如,在非宿主项目中创建实例时,请使用
--network
、--subnet
或--network-interface
标记提供宿主项目的共享 VPC 详细信息。以下部分概述了如何使用 Google Cloud CLI 通过位于其他项目中的机器映像创建实例。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-06-25。
-