縮短 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. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

必要的角色

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

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

所需權限

如要將執行個體設為略過客層 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 beta compute instances set-scheduling INSTANCE_NAME \
        --skip-guest-os-shutdown \
        --zone=ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的名稱。

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

REST

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

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

    POST https://compute.googleapis.com/compute/beta/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 會使用預設關機時間

後續步驟