您可以使用通过 Google Cloud CLI 或 Compute Engine API 发出的单个请求,以更新多个实例属性,如有必要,还可以选择重启实例。更新方法会处理验证更新后实例属性的逻辑,并确保成功更新必要的资源。如果请求包含无效的属性,或者请求的资源不可用,则请求将返回错误,并且不对您的实例进行任何更改。这样可以保护实例免于部分更新,并保护实例不会停止并且无法访问资源以重新启动。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- 通过 gcloud CLI 或 Compute Engine API 发出的实例更新请求不支持
PATCH
语义。更新请求中的实例资源必须包含实例的所有属性。更新请求中的实例配置内缺少的属性会被视为已从实例中删除。 - 您只能更新特定属性列表。
- 不支持将实例更改为唯一租户,也不支持将原本使用唯一租户的实例更改为不使用唯一租户。
- 您可以将一个实例从一项预留改为转到另一项预留,但是不能通过更新过程将实例附加到预留或者从预留中分离。
- 如果实例挂接了本地固态硬盘,则无法更新需要实例重启的属性。您必须先删除实例,然后重新创建该实例。在删除虚拟机之前,请务必将您的关键数据从本地固态硬盘迁移到永久性磁盘或其他虚拟机。
- 如果实例使用 Beta 版 Compute Engine API 中可用的资源,您必须使用正确版本的
instances.update
方法来更新这些属性。例如,如果您使用 Beta 版 Compute Engine API 创建了实例,并为该实例配置了只有 Beta 版 API 才能识别的资源,则还必须使用instances.update
方法的 Beta 版本来更新这些资源。instances.update
方法的 v1 版本无法识别您的实例使用的 Beta 版资源,因此在更新过程中,它会从实例配置中删除这些 Beta 版资源。这也适用于 Alpha 版 API 中的资源。 - 您要更新的实例的
compute.instances.update
权限。 - 现有磁盘的
compute.disks.use
权限,或者要创建新磁盘的项目中的compute.disks.create
权限。 - 如果可能,请始终使用相同版本的 Compute Engine API 来创建、设置和更新实例。这样,如果任何实例资源仅在一个 API 版本中可用,您就可以更新和修改这些资源资源。
- 尽管您可以使用
instances.update
方法来更新代管实例组 (MIG) 中的实例,但在大多数情况下,最好更改该组的实例模板,并将更新滚动到 MIG。 NO_EFFECT
:更新请求会检查请求是否有效以及资源是否可用,但并不会执行更新。可以使用此操作来测试命令,而不启动任何实际更新。REFRESH
:仅当修改后的实例属性不需要实例重启时,更新请求才会运行。如果请求有效,但要求重启,则请求会返回INFEASIBLE
错误。RESTART
:如果更新要求实例重启,则系统将重启您的实例。disks
- 启动磁盘disks.deviceName
- 所有磁盘
displayDevice
enableNestedVirtualization
guestAccelerators
machineType
minCpuPlatform
networkPerformanceConfig
performanceMonitoringUnit
reservationAffinity
resourcePolicies
scheduling
serviceAccounts
shieldedInstanceConfig
threadsPerCore
visibleCoreCount
canIpForward
deletionProtection
description
disks
- 非启动磁盘属性,不包括deviceName
labels
metadata
nodeAffinities
tags
- 导出现有实例配置属性。
- 修改实例配置的属性。
- 将
NO_EFFECT
指定为中断性程度最高的操作,以运行测试请求。该响应指示实例配置中的无效字段,并指明要应用更改,需要执行哪些操作。 - 如果配置可以接受,则请求实例更新,并指定您的实例可以接受的中断性最高的操作。
- 请求中的实例
fingerprint
属性必须与您要更新的实例的fingerprint
一致。这样可以防止针对相同实例的同时更新请求彼此覆盖。 - 更新请求中的属性必须有效。
- 您请求的资源必须可用。
- 如果请求中的属性要求实例重启,则您的请求必须将
RESTART
指定为允许的操作。 使用
instances export
命令导出现有实例属性:gcloud compute instances export INSTANCE_NAME \ --project PROJECT_ID \ --zone ZONE \ --destination=FILE_PATH
请替换以下内容:
INSTANCE_NAME
:要导出的实例的名称。PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。FILE_PATH
:要在本地工作站上保存实例配置文件的输出路径。
使用文本编辑器修改已导出的实例配置文件中的一个或多个属性。如需了解您可以更新的属性,请参阅可更新属性的列表。例如,如需更改实例的机器类型,请更改
machineType
属性:⋮ machineType: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE ⋮
请替换以下内容:
使用
instances update-from-file
命令运行目标实例的测试更新。指定--most-disruptive-allowed-action=NO_EFFECT
标志。该响应会识别出配置错误的属性,并指明是否需要执行RESTART
或REFRESH
操作来应用更新。gcloud compute instances update-from-file INSTANCE_NAME \ --project PROJECT_ID \ --zone ZONE \ --source=FILE_PATH \ --most-disruptive-allowed-action NO_EFFECT
请替换以下内容:
INSTANCE_NAME
:要导出的实例的名称。PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。FILE_PATH
:本地工作站上修改后的实例配置文件的路径。
使用
instances update-from-file
命令更新目标实例。如果要更新需要重启实例的属性,请添加--most-disruptive-allowed-action=RESTART
标志。如果属性不需要重启,请指定--most-disruptive-allowed-action=REFRESH
标志。如需了解哪些属性需要重启,请参阅可更新的属性列表。gcloud compute instances update-from-file INSTANCE_NAME \ --project PROJECT_ID \ --zone ZONE \ --source=FILE_PATH \ --most-disruptive-allowed-action ALLOWED_ACTION
请替换以下内容:
INSTANCE_NAME
:要导出的实例的名称。PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。FILE_PATH
:本地工作站上修改后的实例配置文件的路径。ALLOWED_ACTION
:定义更新的中断性。指定RESTART
以允许对实例进行完全重启。仅当修改后的属性不需要实例重启时,才应该指定REFRESH
以更新实例。
在 Compute Engine API 中使用
instances.get
方法导出现有实例属性:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。INSTANCE_NAME
:要导出的实例的名称。
该请求返回实例资源定义。
在响应中,修改实例资源属性。要了解哪些属性可更新,请参阅可更新的属性列表。例如,要更改实例的机器类型,请更改
machineType
属性。您可以更改多项属性。{ ⋮ "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE", ⋮ }
替换以下内容:
在 Compute Engine API 中使用
instances.update
方法,然后指定most_disruptive_allowed_action=NO_EFFECT
以对目标实例运行测试更新。该响应会识别出配置错误的属性,并指明是否需要执行RESTART
或REFRESH
操作才能应用更新。PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?most_disruptive_allowed_action=NO_EFFECT { ⋮ "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/n1-standard-2", ⋮ }
请替换以下内容:
PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。INSTANCE_NAME
:要导出的实例的名称。
使用 Compute Engine API 中的
instances.update
方法以更新目标实例。如果要更新需要重启实例的属性,请添加?most_disruptive_allowed_action=RESTART
查询参数,以指示可以在更新期间重启实例。如果属性不需要重启,请指定?most_disruptive_allowed_action=REFRESH
查询参数。如需了解哪些属性需要重启,请参阅可更新的属性列表。为您修改的实例资源包含完整的正文。在以下示例中,正文将机器类型更改为n1-standard-2
:PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?most_disruptive_allowed_action=ALLOWED_ACTION { ⋮ "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/n1-standard-2", ⋮ }
请替换以下内容:
PROJECT_ID
:此请求的项目 ID。ZONE
:此实例的可用区。INSTANCE_NAME
:要导出的实例的名称。ALLOWED_ACTION
:定义更新的中断性。指定RESTART
以允许对实例进行完全重启。仅当修改后的属性不需要实例重启时,才应该指定REFRESH
以更新实例。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
限制
权限
您必须具有
compute.instances.update
权限才能更新实例。多个现有 Identity and Access Management (IAM) 角色拥有此权限。您还必须具备使用实例上要修改的资源的权限。例如,如需向实例添加磁盘,您必须拥有以下权限:最佳做法
为确保实例更新界面能最有效地为您效力,请遵循以下最佳做法:
您可以更新的属性
您只能通过 update 方法更改一组特定的实例属性。对某些属性的更新要求重启实例。为防止实例意外重启,您的请求必须定义允许对实例执行哪些操作。您的请求可以指定以下操作之一:
需要更新
RESTART
的属性:仅需要
REFRESH
更新的属性:更新实例属性
使用以下步骤更新您的实例:
只有在您的请求满足以下要求时,系统才会启动更新流程:
如果满足了这些要求,系统就会启动实例更新过程。否则,系统不会更改您的现有实例,也不会更改其配置。
您可以使用 gcloud CLI 或 Compute Engine API 来启动更新。
gcloud
如果更新请求有效且所需资源可用,实例更新过程就会开始。您可以查看审核日志,以监控此操作的状态。如果更新需要重启,并且您的命令允许使用
RESTART
,则实例将重启以应用更改。REST
如果更新请求有效且所需资源可用,实例更新过程就会开始。您可以查看审核日志,以监控此操作的状态。如果更新需要重启,并且您的命令允许使用
RESTART
,则实例将重启以应用更改。后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-11-25。
-