在 Compute Engine 執行個體中啟用正常關機功能

本文說明如何在新的或現有的 Compute Engine 執行個體中啟用正常關機。如要進一步瞭解正常關機,請參閱「正常關機總覽」。

在執行個體中啟用正常關機後,停止或刪除執行個體時,系統會給予客體 OS 最多一小時的時間,以乾淨的方式關機。這有助於避免資料遺失或檔案系統損毀。

事前準備

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

    請根據您打算如何使用本頁範例,選取對應的分頁標籤:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。

    gcloud

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

      gcloud init

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

  • 設定預設區域和可用區。
  • REST

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

      安裝 Google Cloud CLI。

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

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

必要的角色

如要取得在運算執行個體中啟用正常關機功能所需的權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備在運算執行個體中啟用正常關機所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能在運算執行個體啟用正常關機功能:

  • 如要建立執行個體,請按照下列步驟操作:
    • 專案的 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 compute.instances.setMetadata 設定 VM 執行個體中繼資料,請按照下列步驟操作:
    • 如要為 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

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

啟用正常關機

如要在運算執行個體中啟用正常關機,請使用下列其中一種方法:

在現有執行個體中啟用正常關機

您可以在現有的運算執行個體中啟用正常關機,不必停止或重新啟動執行個體。預設的正常關機時間為 10 分鐘,但您可以指定 1 秒至 1 小時的自訂關機時間。

如要在現有執行個體中啟用正常關機功能,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在「Name」(名稱) 欄中,按一下要啟用正常關機的執行個體名稱。

    執行個體的詳細資料頁面隨即開啟。

  3. 按一下「Edit」(編輯)。

  4. 在「Management」(管理) 部分,執行下列操作:

    1. 勾選「Gracefully shut down the VM」(按適當流程關閉 VM) 核取方塊。

    2. 選用:如要指定自訂正常關機時間,請在「最長時間」欄位中指定時間長度。

  5. 按一下 [儲存]。

gcloud

如要在現有執行個體中啟用正常關機功能,請使用 gcloud beta compute instances update 指令和 --graceful-shutdown 旗標:

gcloud beta compute instances update INSTANCE_NAME \
    --graceful-shutdown \
    --zone=ZONE

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。

  • 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 為一小時,或 20m10s 為 20 分鐘 10 秒。

REST

  1. 建立空白 JSON 檔案。

  2. 如要查看現有例項的屬性,請向 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:現有執行個體的名稱。

  3. 在先前步驟建立的空白 JSON 檔案中,執行下列操作:

    1. 從 GET 要求輸出內容輸入執行個體設定詳細資料。

    2. 在 scheduling 欄位中,新增 gracefulShutdown 欄位,如下所示:

      {
        ...
        "scheduling": {
          ...
          "gracefulShutdown": {
            "enabled": true
          }
        },
        ...
      }
      

      如要指定自訂正常關機時間,請加入 maxDuration 欄位:

      {
        ...
        "scheduling": {
          ...
          "gracefulShutdown": {
            ...
            "enabled": true,
            "maxDuration": {
              "seconds": "MAX_DURATION"
            }
          }
        },
        ...
      }
      

      將 MAX_DURATION 替換為正常關機期間 (以秒為單位)。這個值必須介於 1 至 3600 之間,也就是 3,600 秒 (一小時)。

  4. 如要更新執行個體並重新啟動,請對 beta instances.update 方法提出 PUT 要求。 請在要求中執行下列操作:

    • 在要求網址中,加入設為 RESTART 的 mostDisruptiveAllowedAction 查詢參數。

    • 在要求主體中,加入您在先前步驟中建立及更新的 JSON 檔案中的執行個體屬性。

    更新執行個體的 PUT 要求類似於下列要求:

    PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?mostDisruptiveAllowedAction=RESTART
    
    {
      ...
      "scheduling": {
        ...
        "gracefulShutdown": {
          "enabled": true
        }
      },
      ...
    }
    

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

建立執行個體時啟用正常關機

建立啟用正常關機功能的運算執行個體時,預設關機時間為 10 分鐘。或者,您也可以指定自訂關機時間長度,範圍介於一秒到一小時。

如要建立已啟用正常關機程序的執行個體,請選取下列任一選項:

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 點選「建立執行個體」。

    「Create an instance」(建立執行個體) 頁面會隨即開啟。

  3. 指定執行個體的 [名稱]。

  4. 指定要建立執行個體的「Region」(區域) 和「Zone」(可用區)。

  5. 為執行個體指定機型。

  6. 按一下導覽選單中的「進階」。

  7. 展開「VM 佈建模式進階設定」部分,然後執行下列操作:

    1. 勾選「Gracefully shut down the VM」(按適當流程關閉 VM) 核取方塊。

    2. 選用:如要指定自訂正常關機時間,請在「最長時間」欄位中指定時間長度。

  8. 點選「建立」。

gcloud

如要建立已啟用正常關機功能的執行個體,請使用 gcloud beta compute instances create 指令並加上 --graceful-shutdown 旗標:

gcloud beta compute instances create INSTANCE_NAME \
    --graceful-shutdown \
    --machine-type=MACHINE_TYPE \
    --zone=ZONE

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。

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

  • 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 為一小時,或 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
    }
  }
}

更改下列內容:

  • 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,系統會使用 Debian 12 映像檔系列中的最新版本。如要進一步瞭解如何使用圖片系列,請參閱「圖片系列最佳做法」。

如要指定自訂的正常關機時間,請在要求主體中加入 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 秒 (一小時)。

如要瞭解建立執行個體時的更多設定選項,請參閱「建立及啟動 Compute Engine 執行個體」。

大量建立執行個體時啟用正常關機

大量建立已啟用正常關機功能的運算執行個體時,預設關機時間為 10 分鐘。或者,您也可以指定自訂關機時間長度,範圍介於一秒到一小時。

如要大量建立已啟用正常關機程序的執行個體,請選取下列任一選項:

gcloud

如要大量建立已啟用正常關機的執行個體,請使用 gcloud beta compute instances bulk create 指令搭配 --graceful-shutdown 旗標。

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

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

更改下列內容:

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

  • MACHINE_TYPE:執行個體的機型。

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

  • 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 為一小時,或 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
      }
    }
  }
}

更改下列內容:

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

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

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

  • NAME_PATTERN:執行個體的名稱模式。如要取代執行個體名稱中的數列,請使用一連串井字號 (#) 字元。舉例來說,如果使用 instance-# 做為名稱模式,系統會產生名稱開頭為 instance-1、instance-2 的執行個體,並持續產生到 COUNT 指定的執行個體數量。

  • MACHINE_TYPE:執行個體的機型。

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

  • IMAGE:指定下列其中一個值:

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

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

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

如要指定自訂的正常關機時間,請在要求主體中加入 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 秒 (一小時)。

如要進一步瞭解大量建立執行個體時的設定選項,請參閱「大量建立 VM」。

在建立執行個體範本時啟用正常關機功能

建立啟用正常關機功能的執行個體範本時,預設關機時間為 10 分鐘。您也可以視需要指定自訂關機時間長度,範圍介於一秒至一小時之間。

使用執行個體範本建立的所有運算執行個體,都已啟用正常關機功能。

如要建立啟用正常關機的執行個體範本,請選取下列任一選項:

控制台

  1. 前往 Google Cloud 控制台的「Instance templates」(執行個體範本) 頁面。

    前往「Instance templates」(執行個體範本) 頁面

  2. 點選「建立執行個體範本」。

    「建立執行個體範本」頁面隨即開啟。

  3. 在「名稱」欄位中,輸入執行個體範本的名稱。

  4. 按照以下方式選取「Location」(位置):

    • 如要建立區域性執行個體範本,減少跨區域依附元件,請按照下列步驟操作:

      1. 選擇「區域」(如果尚未選取的話)。

      2. 在「Region」(區域) 欄位中,選取要建立執行個體範本的區域。

    • 如要跨區域使用執行個體範本,請選擇「Global」(全域)。

  5. 在「機器設定」部分,指定機型。

  6. 展開「 VM provisioning model advanced settings」(VM 佈建模式進階設定) 專區,然後執行下列操作:

    1. 勾選「Gracefully shut down the VM」(按適當流程關閉 VM) 核取方塊。

    2. 選用:如要指定自訂正常關機時間,請在「最長時間」欄位中指定時間長度。

  7. 點選「建立」。

gcloud

如要建立啟用正常關機的執行個體範本,請使用 gcloud beta compute instance-templates create 指令,並加上 --graceful-shutdown 旗標。

舉例來說,如要建立啟用正常關機的區域執行個體範本,請執行下列指令:

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --graceful-shutdown \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE

更改下列內容:

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

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

  • 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 為一小時,或 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
      }
    }
  }
}

更改下列內容:

  • 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:使用執行個體範本建立的執行個體機器類型。

如要指定自訂的正常關機時間,請在要求主體中加入 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 秒 (一小時)。

如要進一步瞭解建立執行個體範本時可用的設定選項,請參閱「建立執行個體範本」。

後續步驟