縮短 Compute Engine 執行個體關機時間

本文說明如何設定執行個體,在停止或刪除時略過客體 OS 關機程序,藉此縮短 Compute Engine 執行個體的關機時間。

如果您將執行個體設定為在停止或刪除時略過客體 OS 關機程序,當執行個體狀態變更為 STOPPING 時,Compute Engine 會立即關閉客體 OS。加快停止或刪除執行個體的速度,以便更快釋出配額或資源。如要進一步瞭解執行個體在停止或刪除期間經歷的階段,包括清除客體 OS 關機的預設間隔,請參閱停止作業

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,可以選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI 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.

    2. Set a default region and zone.
    3. REST

      如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

        Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI 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 進行驗證」。

必要的角色

如要取得設定執行個體以略過客層 OS 關機程序所需的權限,請要求管理員授予您專案的「Compute 執行個體管理員 (v1)」(roles/compute.instanceAdmin.v1) IAM 角色。 如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備將執行個體設定為略過客體 OS 關機的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要將執行個體設為略過客層 OS 關機程序,您必須具備下列權限:

  • 如要建立執行個體,請按照下列步驟操作:
    • 專案的 compute.instances.create 權限
    • 如要使用自訂映像檔建立 VM,請按一下映像檔上的 compute.images.useReadOnly
    • 如要使用快照建立 VM,請按一下快照上的 compute.snapshots.useReadOnly
    • 如要使用執行個體範本建立 VM,請按一下執行個體範本上的 compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給 VM:專案的 compute.networks.use 權限
    • 如要為 VM 指定靜態 IP 位址:專案的 compute.addresses.use 權限
    • 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中啟用 compute.networks.useExternalIp
    • 為 VM 指定子網路:專案或所選子網路的 compute.subnetworks.use
    • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有 compute.subnetworks.useExternalIp 權限
    • 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:compute.instances.setMetadata
    • 如要為 VM 設定標記,請在 VM 上執行 compute.instances.setTags
    • 如要為 VM 設定標籤,請在 VM 上執行下列步驟:compute.instances.setLabels
    • 如要設定 VM 使用的服務帳戶,請在 VM 上執行 compute.instances.setServiceAccount
    • 如要為 VM 建立新磁碟,請取得專案的 compute.disks.create 權限
    • 如要以唯讀或讀寫模式連接現有磁碟,請對磁碟擁有 compute.disks.use 權限
    • 如要以唯讀模式連接現有磁碟,請對磁碟擁有 compute.disks.useReadOnly 權限
  • 如要建立執行個體範本: 按一下專案的 compute.instanceTemplates.create
  • 如要更新執行個體: 執行個體上的 compute.instances.update

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

設定執行個體,略過客體 OS 關機程序

如要設定 Compute 執行個體,在停止或刪除執行個體時略過訪客作業系統關機程序,請使用下列其中一種方法:

在現有執行個體中設定客體 OS 關機

只有在執行個體已停止 (TERMINATED) 時,才能將運算執行個體設為略過客層 OS 關機程序。

如要設定執行個體略過訪客 OS 關機程序,請選取下列其中一個選項:

gcloud

  1. 如果尚未停止執行個體,請停止執行個體

  2. 如要將執行個體設定為略過客層 OS 關機程序,請使用 gcloud beta compute instances set-scheduling 指令搭配 --skip-guest-os-shutdown 旗標:

    gcloud compute instances set-scheduling INSTANCE_NAME \
        --skip-guest-os-shutdown \
        --zone=ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的名稱。

    • ZONE:執行個體所在的可用區。

REST

  1. 如果尚未停止執行個體,請停止執行個體

  2. 如要設定執行個體略過訪客 OS 關機程序,請對 instances.setScheduling 方法發出 POST 要求。在要求主體中加入 skipGuestOsShutdown 欄位,並將其設為 true

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setScheduling
    
    {
      "skipGuestOsShutdown": true
    }
    

如要進一步瞭解如何更新執行個體,請參閱更新執行個體屬性

在建立執行個體時設定客體 OS 關機

如要建立設定為略過訪客 OS 關機的運算執行個體,請選取下列任一選項:

gcloud

如要建立設定為略過客層 OS 關機的執行個體,請使用 gcloud compute instances create 指令搭配 --skip-guest-os-shutdown 旗標:

gcloud compute instances create INSTANCE_NAME \
    --machine-type=MACHINE_TYPE \
    --skip-guest-os-shutdown \
    --zone=ZONE

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。

  • MACHINE_TYPE:執行個體要使用的機器類型。

  • ZONE:要建立執行個體的可用區。

REST

如要建立設定為略過客層 OS 關機的執行個體,請對 instances.insert 方法發出 POST 要求。在要求主體中,加入設為 trueskipGuestOsShutdown 欄位:

POST https://compute.googleapis.com/compute/v1/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": {
    "skipGuestOsShutdown": true
  }
}

更改下列內容:

  • PROJECT_ID:要在當中建立執行個體的專案 ID。

  • ZONE:要建立執行個體的可用區。

  • INSTANCE_NAME:執行個體的名稱。

  • MACHINE_TYPE:執行個體要使用的機器類型。

  • IMAGE_PROJECT:包含映像檔的映像檔專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • 特定版本的 OS 映像檔,例如 debian-12-bookworm-v20240617

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這個值會指定最新的非已淘汰 OS 映像檔。舉例來說,如果您指定 family/debian-12,Compute Engine 會使用 Debian 12 映像檔系列的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱映像檔系列最佳做法

如要進一步瞭解如何建立執行個體,請參閱「建立及啟動 Compute Engine 執行個體」。

在大量建立執行個體時設定訪客 OS 關機

如要大量建立運算執行個體,並設定略過客層 OS 關機程序,請選取下列任一選項:

gcloud

如要大量建立執行個體,並設定略過客層 OS 關機程序,請使用 gcloud compute instances bulk create 指令搭配 --skip-guest-os-shutdown 旗標。

舉例來說,如要使用單一可用區中的名稱模式,大量建立執行個體,請執行下列指令:

gcloud compute instances bulk create \
    --count=COUNT \
    --machine-type=MACHINE_TYPE \
    --name-pattern="NAME_PATTERN" \
    --skip-guest-os-shutdown \
    --zone=ZONE

更改下列內容:

  • COUNT:要建立的執行個體數量。

  • MACHINE_TYPE:執行個體使用的機器類型。

  • NAME_PATTERN:執行個體的名稱模式。如要取代執行個體名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果您使用 instance-# 做為名稱模式,Compute Engine 會產生名稱開頭為 instance-1instance-2 的執行個體,並持續以這種遞增模式命名,直到達到您在 COUNT 中指定的執行個體數量為止。

  • ZONE:要建立執行個體的可用區。

REST

如要大量建立執行個體,並設定略過客層 OS 關機程序,請對 instances.bulkInsert 方法發出 POST 要求。在要求主體中,加入設為 trueskipGuestOsShutdown 欄位。

舉例來說,如要在單一區域中大量建立使用名稱模式的執行個體,請發出下列 POST 要求:

POST https://compute.googleapis.com/compute/v1/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": {
      "skipGuestOsShutdown": true
    }
  }
}

更改下列內容:

  • PROJECT_ID:您要在當中大量建立執行個體的專案 ID。

  • ZONE:要建立執行個體的可用區。

  • COUNT:要建立的執行個體數量。

  • NAME_PATTERN:執行個體的名稱模式。如要取代執行個體名稱中的一連串數字,請使用一連串井字號 (#) 字元。舉例來說,如果您使用 instance-# 做為名稱模式,Compute Engine 會產生名稱開頭為 instance-1instance-2 的執行個體,並持續以這種遞增模式命名,直到達到您在 COUNT 中指定的執行個體數量為止。

  • MACHINE_TYPE:執行個體使用的機器類型。

  • IMAGE_PROJECT:包含映像檔的映像檔專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • 特定版本的 OS 映像檔,例如 debian-12-bookworm-v20240617

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這個值會指定最新的非已淘汰 OS 映像檔。舉例來說,如果您指定 family/debian-12,Compute Engine 會使用 Debian 12 映像檔系列的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱映像檔系列最佳做法

如要進一步瞭解如何大量建立執行個體,請參閱大量建立執行個體

建立執行個體範本時設定客體 OS 關機

建立執行個體範本並設定為在停止或刪除運算執行個體時略過客層 OS 關機程序後,您可以使用該範本執行下列操作:

如要建立設定為略過訪客 OS 關機的執行個體範本,請選取下列任一選項:

gcloud

如要建立設定為略過客層 OS 關機的執行個體範本,請使用 gcloud compute instance-templates create 指令搭配 --skip-guest-os-shutdown 旗標。

舉例來說,如要建立區域執行個體範本,並指定略過客層 OS 關機程序,請執行下列指令。如要建立全域執行個體範本,請使用相同指令,但不要加入 --instance-template-region 旗標。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --skip-guest-os-shutdown

更改下列內容:

  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。

  • REGION:要建立執行個體範本的區域。

  • MACHINE_TYPE:要在執行個體範本中指定的機器類型。

REST

如要建立設定為略過客層 OS 關機的執行個體範本,請向下列其中一種方法提出 POST 要求:

在要求主體中,加入設為 trueskipGuestOsShutdown 欄位。

舉例來說,如要建立指定略過客層 OS 關機的區域執行個體範本,請發出下列 POST 要求:

POST https://compute.googleapis.com/compute/v1/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": {
      "skipGuestOsShutdown": true
    }
  }
}

更改下列內容:

  • PROJECT_ID:您要在當中建立執行個體範本的專案 ID。

  • REGION:要建立執行個體範本的區域。

  • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。

  • IMAGE_PROJECT:包含映像檔的映像檔專案,例如 debian-cloud。如要進一步瞭解支援的映像檔專案,請參閱「公開映像檔」。

  • IMAGE:指定下列其中一項:

    • 特定版本的 OS 映像檔,例如 debian-12-bookworm-v20240617

    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這會指定最新的非已淘汰 OS 映像檔。舉例來說,如果您指定 family/debian-12,系統會使用 Debian 12 映像檔系列中的最新版本。如要進一步瞭解如何使用映像檔系列,請參閱「映像檔系列最佳做法」。

  • MACHINE_TYPE:要在執行個體範本中指定的機器類型。

如要進一步瞭解如何建立執行個體範本,請參閱建立執行個體範本

查看客體 OS 關機設定

您可以檢查 Compute Engine 是否在停止或刪除運算執行個體時,略過訪客 OS 關機程序。

如要在執行個體中查看訪客 OS 關機時間,請選取下列任一選項:

gcloud

如要查看執行個體的詳細資料,以及是否略過客層 OS 關機程序,請使用 gcloud compute instances describe 指令

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。

  • ZONE:執行個體所在的可用區。

如果您將執行個體設為略過訪客 OS 關機程序,輸出內容會包含設為 trueskipGuestOsShutdown 欄位,如下列範例所示:

...
scheduling:
  automaticRestart: true
  skipGuestOsShutdown: true
  onHostMaintenance: MIGRATE
  preemptible: false
  provisioningModel: STANDARD
...

否則,如果缺少 skipGuestOsShutdown 欄位或設為 false,客體 OS 會使用預設關機時間

REST

如要查看執行個體的詳細資料,以及是否略過客層 OS 關機程序,請向 instances.get 方法發出 GET 要求:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

更改下列內容:

  • PROJECT_ID:執行個體所在的專案 ID。

  • ZONE:執行個體所在的可用區。

  • INSTANCE_NAME:執行個體的名稱。

如果您將執行個體設為略過訪客 OS 關機程序,輸出內容會包含設為 trueskipGuestOsShutdown 欄位,如下列範例所示:

{
  ...
  "scheduling": {
    "automaticRestart": true,
    "skipGuestOsShutdown": true,
    "onHostMaintenance": "MIGRATE",
    "preemptible": false,
    "provisioningModel": "STANDARD"
  },
  ...
}

否則,如果缺少 skipGuestOsShutdown 欄位或設為 false,客體 OS 會使用預設關機時間

後續步驟