本文档介绍了如何在新或现有的 Compute Engine 实例中启用安全关停。如需详细了解安全关停,请参阅安全关停概览。
在实例中启用安全关停后,您可以在停止或删除实例时为客户机操作系统留出最多一小时的时间来彻底关停。这有助于防止潜在的数据丢失或文件系统损坏。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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.
-
创建实例:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
- 创建实例模板:针对项目的
compute.instanceTemplates.create
权限 -
在现有实例中启用安全关停:针对实例的
compute.instances.update
权限 在 Google Cloud 控制台中,前往虚拟机实例页面。
在名称列中,点击要在其中启用安全关停的实例的名称。
此时会打开实例的详情页面。
点击
修改。在管理部分中,执行以下操作:
选中安全关停虚拟机复选框。
可选:如需指定自定义安全关停时段,请在时长上限字段中指定时长。
点击保存。
INSTANCE_NAME
:实例的名称。ZONE
:实例所在的区域。创建一个空的 JSON 文件。
如需查看现有实例的属性,请向 Beta 版
instances.get
方法发出GET
请求:GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:实例所在项目的 ID。ZONE
:实例所在的区域。INSTANCE_NAME
:现有实例的名称。
在您在上一步中创建的空 JSON 文件中,执行以下操作:
输入
GET
请求输出中的实例配置详情。在
scheduling
字段中,添加gracefulShutdown
字段,如下所示:{ ... "scheduling": { ... "gracefulShutdown": { "enabled": true } }, ... }
(可选)如需指定自定义安全关停时段,请添加
maxDuration
字段:{ ... "scheduling": { ... "gracefulShutdown": { ... "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } }, ... }
将
MAX_DURATION
替换为安全关停时段的时长,以秒为单位。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。
如需更新实例并重启它,请向 Beta 版
instances.update
方法发出PUT
请求。在请求中,执行以下操作:在请求网址中,添加
mostDisruptiveAllowedAction
查询参数并设置为RESTART
。在请求正文中,添加您在上述步骤中创建和更新的 JSON 文件中的实例属性。
用于更新实例的
PUT
请求类似于以下内容:PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?mostDisruptiveAllowedAction=RESTART { ... "scheduling": { ... "gracefulShutdown": { "enabled": true } }, ... }
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击创建实例。
创建实例页面即会打开。
为该实例指定名称。
指定要在其中创建实例的区域和可用区。
指定实例的机器类型。
在导航菜单中,点击高级。
展开
虚拟机配置模型高级设置部分,然后执行以下操作:选中安全关停虚拟机复选框。
可选:如需指定自定义安全关停时段,请在时长上限字段中指定时长。
点击创建。
INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:用于实例的机器类型。ZONE
:要在其中创建实例的可用区。PROJECT_ID
:要创建实例的项目 ID。ZONE
:要创建实例的可用区。INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:实例的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:COUNT
:要创建的实例数量。MACHINE_TYPE
:实例的机器类型。NAME_PATTERN
:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。ZONE
:要在其中批量创建实例的可用区。PROJECT_ID
:要在其中批量创建实例的项目的 ID。ZONE
:要在其中批量创建实例的可用区。COUNT
:要创建的实例数量。NAME_PATTERN
:实例的名称格式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。MACHINE_TYPE
:实例的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:ZONE
:要在其中批量创建实例的可用区。在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
系统会打开创建实例模板页面。
在名称字段中,输入实例模板的名称。
按如下方式选择位置:
如需通过创建区域级实例模板来减少跨区域依赖项,请执行以下操作:
选择区域级(如果尚未选择)。
在区域字段中,选择要在其中创建实例模板的区域。
否则,如需跨区域使用实例模板,请选择全球级。
在机器配置部分中,指定机器类型。
展开
虚拟机配置模型高级设置部分,然后执行以下操作:选中安全关停虚拟机复选框。
可选:如需指定自定义安全关停时段,请在时长上限字段中指定时长。
点击创建。
INSTANCE_TEMPLATE_NAME
:实例模板的名称。REGION
:要在其中创建实例模板的区域。MACHINE_TYPE
:使用实例模板创建的实例的机器类型。如需创建全球级实例模板:Beta 版
instanceTemplates.insert
方法。如需创建区域级实例模板:Beta 版
regionInstanceTemplates.insert
方法。PROJECT_ID
:要在其中创建实例模板的项目的 ID。REGION
:用于创建实例模板的区域。INSTANCE_TEMPLATE_NAME
:实例模板的名称。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:MACHINE_TYPE
:使用实例模板创建的实例的机器类型。
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 Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含在计算实例中启用安全关停所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限,才能在计算实例中启用安全关停:
启用安全关停
如需在计算实例中启用安全关停,请使用以下方法之一:
在现有实例中启用安全关停
您可以在现有计算实例中启用安全关停,而无需停止或重启该实例。默认的安全关停时段为 10 分钟,但您可以指定 1 秒到 1 小时之间的自定义关停时段。
如需在现有实例中启用安全关停,请选择以下选项之一:
控制台
gcloud
如需在现有实例中启用安全关停,请使用带有
--graceful-shutdown
标志的gcloud beta compute instances update
命令:gcloud beta compute instances update INSTANCE_NAME \ --graceful-shutdown \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义安全关停时段,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances update INSTANCE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --zone=ZONE
将
MAX_DURATION
替换为关停时段的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,指定20m10s
表示 20 分钟 10 秒。REST
如需详细了解如何更新实例的属性,请参阅更新实例属性。
在创建实例时启用安全关停
创建启用了安全关停的计算实例时,默认关停时段为 10 分钟。(可选)您可以指定 1 秒到 1 小时之间的自定义关停时段。
如需创建启用了安全关停的实例,请选择以下选项之一:
控制台
gcloud
如需创建启用了安全关停的实例,请使用带有
--graceful-shutdown
标志的gcloud beta compute instances create
命令:gcloud beta compute instances create INSTANCE_NAME \ --graceful-shutdown \ --machine-type=MACHINE_TYPE \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义安全关停时段,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances create INSTANCE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --machine-type=MACHINE_TYPE \ --zone=ZONE
将
MAX_DURATION
替换为安全关停时段的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,指定20m10s
表示 20 分钟 10 秒。REST
如需创建启用了安全关停的实例,请向
beta.instances.insert
方法发出POST
请求。在请求正文中,添加gracefulShutdown
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } }
替换以下内容:
(可选)如需指定自定义安全关停时段,请在请求正文中添加
maxDuration
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } }
将
MAX_DURATION
替换为安全关停时段的时长,以秒为单位。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解创建实例时的更多配置选项,请参阅创建和启动 Compute Engine 实例。
在批量创建实例时启用安全关停
当您批量创建启用了安全关停的计算实例时,默认关停时段为 10 分钟。(可选)您可以指定 1 秒到 1 小时之间的自定义关停时段。
如需批量创建启用了安全关停的实例,请选择以下选项之一:
gcloud
如需批量创建启用了安全关停的实例,请使用带有
--graceful-shutdown
标志的gcloud beta compute instances bulk create
命令。例如,如需在单个可用区中批量创建实例并为实例指定名称模式,请运行以下命令:
gcloud beta compute instances bulk create \ --count=COUNT \ --graceful-shutdown \ --machine-type=MACHINE_TYPE \ --name-pattern="NAME_PATTERN" \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义安全关停时段,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances bulk create \ --count=COUNT \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --machine-type=MACHINE_TYPE \ --name-pattern="NAME_PATTERN" \ --zone=ZONE
将
MAX_DURATION
替换为安全关停时段的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,指定20m10s
表示 20 分钟 10 秒。REST
如需批量创建启用了安全关停的实例,请向 Beta 版
instances.bulkInsert
方法发出POST
请求。在请求正文中,包含gracefulShutdown
字段。例如,如需在单个可用区中批量创建实例并为实例指定名称模式,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": COUNT, "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } } }
替换以下内容:
(可选)如需指定自定义安全关停时段,请在请求正文中添加
maxDuration
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": COUNT, "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } } }
将
MAX_DURATION
替换为安全关停时段的时长,以秒为单位。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解批量创建实例时的更多配置选项,请参阅批量创建虚拟机。
在创建实例模板时启用安全关停
创建启用了安全关停的实例模板时,默认关停时段为 10 分钟。(可选)您可以指定 1 秒到 1 小时之间的自定义关停时段。
使用实例模板创建的所有计算实例都启用了安全关停。
如需创建启用了安全关停的实例模板,请选择以下选项之一:
控制台
gcloud
如需创建启用了安全关停的实例模板,请使用带有
--graceful-shutdown
标志的gcloud beta compute instance-templates create
命令。例如,如需创建启用了安全关停的区域级实例模板,请运行以下命令:
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --graceful-shutdown \ --instance-template-region=REGION \ --machine-type=MACHINE_TYPE
替换以下内容:
(可选)如需指定自定义安全关停时段,请添加
--graceful-shutdown-max-duration
标志。gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --instance-template-region=REGION \ --machine-type=MACHINE_TYPE
将
MAX_DURATION
替换为关停时段的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,指定20m10s
表示 20 分钟 10 秒。REST
如需创建启用了安全关停的实例模板,请向以下方法之一发出
POST
请求:例如,如需创建启用了安全关停的区域级实例模板,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } } }
替换以下内容:
(可选)如需指定自定义安全关停时段,请在请求正文中添加
maxDuration
字段。POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } } }
将
MAX_DURATION
替换为关停时段的时长,以秒为单位。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解创建实例模板时的更多配置选项,请参阅创建实例模板。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-06-25。
-