從備份保存庫還原 Compute Engine 執行個體

本頁面說明如何從 Google Cloud 控制台的備份保管庫還原 Compute Engine 執行個體,目標可以是新的 Compute Engine 執行個體或新的永久磁碟。如要選擇性地將個別磁碟還原至新的永久磁碟,請參閱「從 Compute Engine 執行個體備份執行選擇性磁碟還原」。

必要的角色

如要取得從 backup vault 還原 Compute Engine 執行個體所需的權限,請要求管理員在專案、目標專案、備份和災難復原服務代理,以及虛擬私有雲主專案中,授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備從 backup vault 還原 Compute Engine 執行個體所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能從 backup vault 還原 Compute Engine 執行個體:

  • 還原 Compute Engine 執行個體:
    • backupdr.bvbackups.restore
    • backupdr.compute.restoreFromBackupVault
    • backupdr.backupVaults.get
    • backupdr.backupVaults.list
    • backupdr.bvbackups.list
    • backupdr.bvdataSources.get
    • backupdr.bvdataSources.list
    • backupdr.bvbackups.get
  • 使用 Google Cloud 控制台還原 Compute Engine 執行個體 (額外權限):
    • compute.acceleratorTypes.list
    • compute.disks.list
    • compute.machineTypes.list
    • compute.projects.get
    • compute.regions.list
    • compute.zones.list

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

還原 Compute Engine 執行個體

請按照下列操作說明還原 Compute Engine 執行個體。

控制台

  1. 前往 Google Cloud 控制台的「Vaulted backups」(已建立 vault 的備份) 頁面。

    前往「Vaulted backups」(vault 中的備份) 頁面

    這裡會列出所有具備 vault 備份的 Compute Engine 執行個體。

  2. 按一下動作圖示,選取「還原」動作。「Restore」(還原) 頁面會顯示下列還原選項:

    • 選取「Resource name」(資源名稱)。
    • 選取「備份建立時間」。
    • 選取「Restore scope」(還原範圍),可以是整個 Compute Engine 執行個體或個別磁碟。如要還原個別磁碟,請參閱「從 Compute Engine 執行個體備份執行選擇性磁碟還原」。
    • 選取要還原 VM 的專案名稱。
  3. 按一下 [繼續]。

    系統會顯示「Create a new Compute Engine instance from a backup」(從備份建立新的 Compute Engine 執行個體) 頁面,其中會根據來源 Compute Engine 執行個體屬性,預先填入 Compute Engine 執行個體屬性。您可以修改屬性來建立新的 Compute Engine 執行個體,例如變更「Region」(區域) 或「Machine Type」(機器類型) 的選項。

  4. 點選「建立」,即可使用所選備份建立新的 VM。

gcloud

  1. 使用 gcloud backup-dr backup-vaults describe 指令取得 backup vault 服務帳戶:

    gcloud backup-dr backup-vaults describe BACKUP_VAULT_NAME /
    --location=REGION_NAME
    

    更改下列內容:

    • BACKUP_VAULT_NAME:要還原資料的 backup vault 名稱。

    • REGION_NAME:backup vault 的區域。

  2. 還原 Compute Engine 執行個體前,請使用下列指令取得資料來源 ID 和所需備份的 ID:

    1. 使用 gcloud backup-dr data-sources list 指令找出資料來源 ID:

      gcloud backup-dr data-sources list \
      --project=PROJECT_NAME \
      --location=REGION_NAME \
      --backup-vault=BACKUP_VAULT_NAME \
      "--filter=dataSourceGcpResource.computeInstanceDatasourceProperties.name:(DATA_SOURCE)" \
      "--format=get(name)"
      
    2. 使用 gcloud backup-dr backups list 指令列出資料來源的現有備份,找出正確的 BACKUP_ID:

      gcloud backup-dr backups list \
      --location=REGION_NAME \
      --backup-vault=BACKUP_VAULT_NAME \
      --data-source=DATA_SOURCE \
      "--format=yaml(backupType,computeInstanceBackupProperties.sourceInstance,consistencyTime,enforcedRetentionEndTime,expireTime,name)"
      
  3. 如要還原 Compute Engine 執行個體,請使用下列指令:

    • 使用 gcloud backup-dr backups restore compute 指令,在與工作負載專案相同的專案中,還原具有備份 ID 的 Compute Engine 執行個體:

      gcloud backup-dr backups restore compute test-backup-id \
      --project=PROJECT_NAME --location=REGION_NAME \
      --backup-vault=BACKUP_VAULT_NAME --data-source=DATA_SOURCE\
      --name=NAME --target-zone=TARGET_ZONE \
      --target-project=TARGET_PROJECT
      
    • 使用 gcloud backup-dr backups restore compute projects 指令,在與工作負載專案相同的專案中,還原 Compute Engine 執行個體,並提供備份完整資源網址:

      gcloud backup-dr backups restore compute projects/test-project-id/locations/us-central1/backupVaults/test-vault/dataSources/test-ds/backups/test-backup-id \
      --name=NAME --target-zone=TARGET_ZONE \
      --target-project=TARGET_PROJECT
      
    • 使用 gcloud backup-dr backups restore compute 指令,還原具有自訂服務帳戶和網路設定的 Compute Engine 執行個體:

      gcloud backup-dr backups restore compute test-backup-id \
      --project=PROJECT --location=REGION \
      --backup-vault=BACKUPVAULT_NAME --data-source=DATA_SOURCE\
      --name=NAME --target-zone=TARGET_ZONE \
      --target-project=TARGET_PROJECT \
      --network-interface=network=NETWORK,subnet=SUBNET \
      --service-account=SERVICE_ACCOUNT \
      --scopes=SCOPE
      

      更改下列內容:

      • PROJECT:backup vault 專案的名稱。

      • REGION:backup vault 的位置。

      • BACKUPVAULT_NAME:要還原資料的 backup vault 名稱。

      • DATA_SOURCE:要還原資料的資料來源名稱。

      • NAME:還原的 Compute Engine 執行個體名稱。

      • TARGET_ZONE:還原 Compute Engine 執行個體的區域。

      • TARGET_PROJECT:還原 Compute Engine 執行個體的專案。

      • NETWORK:Compute Engine 執行個體的網路 URI。

      • SUBNET:Compute Engine 執行個體的子網路 URI。

      • SERVICE_ACCOUNT:還原的 Compute Engine 執行個體服務帳戶。

      • SCOPE:服務帳戶的授權範圍。

    • 使用 gcloud backup-dr backups restore disk 指令還原 Compute Engine 磁碟。如要瞭解如何從 Compute Engine 執行個體備份還原個別磁碟,請參閱「從 Compute Engine 執行個體備份執行選擇性磁碟還原」一文。

      gcloud backup-dr backups restore disk BACKUP_NAME  \
      --name=DISK_NAME \
      --target-project=TARGET_PROJECT_NAME \
      [--source-instance-boot-disk | --source-instance-disk-device-name=DEVICE_NAME] \
      [--target-zone=TARGET_ZONE_NAME | --target-region=TARGET_REGION_NAME --replica-zones=ZONE_NAME] \
      [DISK_OVERRIDE_FLAGS...] \
      [--async]
      

如要覆寫其他 Compute Engine 執行個體屬性,請參閱「備份和災難復原 gcloud CLI 指令總覽」。

選擇性磁碟備份的還原限制

如果使用選擇性磁碟備份建立備份,並從中還原 Compute Engine 執行個體,系統只會還原備份時受保護的磁碟,並將其附加至新的虛擬機器 (VM) 執行個體。在 Google Cloud 控制台的摘要部分,會醒目顯示備份中包含的受保護磁碟 (例如 Protected disks: 2 out of 3)。

如要避免在還原 VM 時因排除磁碟而發生開機失敗,請設定來源 VM 的開機設定,忽略缺少的磁碟 (例如在 /etc/fstab 中新增 nofail 掛接選項)。如要進一步瞭解這項 Compute Engine 限制,請參閱「永久磁碟還原限制和注意事項」。

從已啟用 CMEK 的 backup vault 還原備份

從啟用 CMEK 的 backup vault 還原時,加密處理方式取決於您要還原整個 Compute Engine 執行個體,還是個別磁碟。

還原整個 Compute Engine 執行個體時的 CMEK 處理方式

從啟用 CMEK 的 backup vault 儲存的備份還原整個 Compute Engine 執行個體時,備份本身會受到 vault 的 CMEK 保護。根據預設,還原的 Compute Engine 執行個體中的磁碟會保留原始加密設定,無論是 Google 代管或原始 CMEK。如要存取 vault 的 CMEK,必須具備必要權限,這些權限會授予備份和災難復原服務代理,詳情請參閱「CMEK 概念」。

個別磁碟還原的 CMEK 處理方式

如果選擇「Individual disk」(個別磁碟) 還原範圍,從 Compute Engine 執行個體備份還原單一磁碟,會發生下列行為:

  • 預設行為:從備份建立的新磁碟會嘗試使用與原始 Compute Engine 執行個體來源磁碟相同的加密金鑰。

    • 如果來源磁碟使用 Google 代管的加密機制,還原的磁碟也會使用 Google 代管的加密機制。

    • 如果來源磁碟使用特定 CMEK,還原的磁碟會嘗試使用相同的 CMEK。

  • 金鑰無法使用:如果來源磁碟使用的原始 CMEK 無法在目標專案或區域中存取 (例如金鑰刪除、權限變更或跨區域還原),除非您覆寫加密設定,否則還原作業會失敗。

  • 覆寫加密設定:在還原過程中,您可以按照下列操作說明,變更還原磁碟的加密設定:

    控制台

    • 在還原精靈的「Target Disk Properties」(目標磁碟屬性) 區段中,您可以使用下列任一選項修改「Encryption」(加密) 設定:

      • 選取其他客戶自行管理的加密金鑰 (CMEK)。

      • 改用 Google 代管的加密機制。

    gcloud

    • 使用 gcloud backup-dr backups restore disk 指令搭配 --source-instance-boot-disk 或 --source-instance-disk-device-name 旗標時:

      • 如要為還原的磁碟指定其他 CMEK,請使用 --kms-key 旗標:
      --kms-key=projects/MY-KEY-PROJECT/locations/us-central1/keyRings/MY-RING/cryptoKeys/MY-NEW-KEY
      
      • 如要強制還原的磁碟使用 Google 代管的加密機制,請使用 --clear-encryption-key 旗標。
  • CMEK 覆寫權限:

    • 如果覆寫加密設定,改用「新」或「不同」的 CMEK,請務必確認目標專案的 Compute Engine 服務代理,對指定的 KMS 金鑰具備 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。服務代理帳戶格式為:service-TARGET_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com。

    • Compute Engine 必須具備這項權限,才能建立以所選金鑰加密的新磁碟。

如要進一步瞭解磁碟還原作業和旗標用法,請參閱「從備份保存庫還原永久磁碟」。

從已啟用 CMEK 的 backup vault 還原備份

從已啟用 CMEK 的 backup vault 還原備份時,還原資源的加密方式取決於來源的加密方式:

  • 如果來源資源受 CMEK 保護:還原的資源預設會使用與來源相同的 CMEK 金鑰。例如:
    • 使用金鑰 K1 加密的 Compute Engine 永久磁碟,會還原為使用 K1 加密的磁碟。
    • 如果 VM 有多個磁碟,還原 VM 中的每個磁碟都會沿用對應來源磁碟的加密方式 (以 CMEK 加密的磁碟仍會以原始金鑰加密,Google 代管的加密磁碟仍由 Google 代管)。
  • 如果來源資源使用 Google 代管的加密機制:還原的資源預設會使用 Google 代管的加密機制。

使用 API 或 gcloud CLI 還原 Compute Engine 永久磁碟或 Compute Engine 執行個體時,可以覆寫這項預設行為。舉例來說,您可以將受 CMEK 保護的資源備份還原至使用 Google 代管加密的新資源,或受其他 CMEK 金鑰保護的新資源。如要還原至受新 CMEK 金鑰保護的資源,請確認目的地專案的相關服務代理 (例如 Compute Engine 服務代理) 具備新目的地金鑰的 roles/cloudkms.cryptoKeyEncrypterDecrypter 權限。

使用 CMEK 執行跨區域還原

Cloud Key Management Service 金鑰為區域性,因此執行跨區域還原 (例如將執行個體從 asia-south1 還原至 asia-south2) 時,如果使用預設行為,還原作業會失敗。還原的 VM 磁碟無法使用來源區域的 KMS 金鑰加密。

這是 Google Cloud 控制台目前的限制。如要對受 CMEK 保護的 VM 執行跨區域還原,您必須使用 gcloud CLI、API 或 Terraform 覆寫加密設定,並在目標區域指定新的 KMS 金鑰。

如要還原至受新 CMEK 金鑰保護的資源,請按照下列步驟操作:

  1. 確認目標區域中有金鑰:確認您在還原 VM 的區域 (目標專案或共用 KMS 專案) 中有 Cloud Key Management Service 金鑰,如果沒有,請建立一個。
  2. 授予 KMS 權限:將這個目標金鑰的 Cloud KMS CryptoKey 加密者/解密者 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色,授予要還原 VM 的目標專案 Compute Engine 服務代理。

  3. 執行還原作業:使用下列任一方法執行還原作業,覆寫每個磁碟的 KMS 金鑰:

gcloud

  1. 取得備份詳細資料:使用 gcloud backup-dr backups list 指令,從備份中擷取備份名稱和磁碟的裝置名稱:

    gcloud backup-dr backups list \
      --project=PROJECT_ID \
      --location=SOURCE_REGION \
      --backup-vault=BACKUP_VAULT_NAME \
      --filter="computeInstanceBackupProperties.sourceInstance~SOURCE_INSTANCE_NAME"
    

    更改下列內容:

    • PROJECT_ID:備份 vault 所在的專案名稱。
    • SOURCE_REGION:backup vault 的位置。
    • BACKUP_VAULT_NAME:要還原資料的 backup vault 名稱。
    • SOURCE_INSTANCE_NAME:來源 Compute Engine 執行個體的名稱。
  2. 執行還原指令:執行還原指令,並使用 --create-disk 參數覆寫每個磁碟的 KMS 金鑰。

    1. 還原具有單一磁碟的 VM:

      gcloud backup-dr backups restore compute BACKUP_ID \
        --project=PROJECT_ID \
        --location=SOURCE_REGION \
        --backup-vault=BACKUP_VAULT_NAME \
        --data-source=DATA_SOURCE \
        --name=RESTORED_VM_NAME \
        --target-zone=TARGET_ZONE \
        --target-project=TARGET_PROJECT_ID \
        --create-disk=device-name=DEVICE_NAME,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME
      

      更改下列內容:

      • BACKUP_ID:要還原的備份 ID。
      • PROJECT_ID:備份 vault 所在的專案名稱。
      • SOURCE_REGION:backup vault 的位置。
      • BACKUP_VAULT_NAME:要還原資料的 backup vault 名稱。
      • DATA_SOURCE:要還原資料的資料來源 ID。
      • RESTORED_VM_NAME:還原 VM 的名稱。
      • TARGET_ZONE:還原 VM 的可用區。
      • TARGET_PROJECT_ID:還原 VM 的專案。
      • DEVICE_NAME:磁碟的裝置名稱。
      • KMS_PROJECT_ID:Cloud Key Management Service 金鑰所在的專案 ID。
      • TARGET_REGION:Cloud Key Management Service 金鑰所在的區域。
      • KEYRING:Cloud Key Management Service 金鑰環的名稱。
      • KEY_NAME:磁碟 1 的 Cloud Key Management Service 金鑰名稱。
    2. 還原具有多個磁碟的 VM:為每個磁碟提供獨立的 --create-disk 旗標:

      gcloud backup-dr backups restore compute BACKUP_ID \
        --project=PROJECT_ID \
        --location=SOURCE_REGION \
        --backup-vault=BACKUP_VAULT_NAME \
        --data-source=DATA_SOURCE \
        --name=RESTORED_VM_NAME \
        --target-zone=TARGET_ZONE \
        --target-project=TARGET_PROJECT_ID \
        --create-disk=device-name=DEVICE_NAME_1,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1 \
        --create-disk=device-name=DEVICE_NAME_2,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2
      

      更改下列內容:

      • BACKUP_ID:要還原的備份 ID。
      • PROJECT_ID:備份 vault 所在的專案名稱。
      • SOURCE_REGION:backup vault 的位置。
      • BACKUP_VAULT_NAME:要還原資料的 backup vault 名稱。
      • DATA_SOURCE:要還原資料的資料來源 ID。
      • RESTORED_VM_NAME:還原 VM 的名稱。
      • TARGET_ZONE:還原 VM 的可用區。
      • TARGET_PROJECT_ID:還原 VM 的專案。
      • DEVICE_NAME_1:磁碟 1 的裝置名稱。
      • KMS_PROJECT_ID:Cloud Key Management Service 金鑰所在的專案 ID。
      • TARGET_REGION:Cloud Key Management Service 金鑰所在的區域。
      • KEYRING:Cloud Key Management Service 金鑰環的名稱。
      • KEY_NAME_1:磁碟 1 的 Cloud Key Management Service 金鑰名稱。
      • DEVICE_NAME_2:磁碟 2 的裝置名稱。
      • KEY_NAME_2:磁碟 2 的 Cloud Key Management Service 金鑰名稱。

API

  1. 取得備份詳細資料:傳送 GET 要求列出備份,擷取備份名稱和磁碟的裝置名稱:

    GET https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups
    
  2. 執行還原 API:傳送 POST 要求至備份的 restore URI。

    1. 還原具有單一磁碟的 VM:

      POST https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups/BACKUP_ID:restore
      

      酬載:

      {
        "computeInstanceTargetEnvironment": {
          "project": "TARGET_PROJECT_ID",
          "zone": "TARGET_ZONE"
        },
        "computeInstanceRestoreProperties": {
          "name": "RESTORED_VM_NAME",
          "machineType": "projects/TARGET_PROJECT_ID/zones/TARGET_ZONE/machineTypes/e2-medium",
          "disks": [
            {
              "deviceName": "DEVICE_NAME",
              "diskEncryptionKey": {
              "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME"
              }
            }
          ]
        }
      }
      
    2. 還原具有多個磁碟的 VM:

      POST https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups/BACKUP_ID:restore
      

      酬載:

      {
        "computeInstanceTargetEnvironment": {
          "project": "TARGET_PROJECT_ID",
          "zone": "TARGET_ZONE"
        },
        "computeInstanceRestoreProperties": {
          "name": "RESTORED_VM_NAME",
          "machineType": "projects/TARGET_PROJECT_ID/zones/TARGET_ZONE/machineTypes/e2-medium",
          "disks": [
            {
              "deviceName": "DEVICE_NAME_1",
              "diskEncryptionKey": {
                "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1"
              }
            },
            {
              "deviceName": "DEVICE_NAME_2",
              "diskEncryptionKey": {
                "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2"
              }
            }
          ]
        }
      }
      

Terraform

使用 google_backup_dr_restore_workload 資源

  1. 還原具有單一磁碟的 VM:

    resource "google_backup_dr_restore_workload" "restore_single" {
      location         = "SOURCE_REGION"
      backup_vault_id  = "BACKUP_VAULT_NAME"
      data_source_id   = "DATA_SOURCE"
      backup_id        = "BACKUP_ID"
    
      compute_instance_target_environment {
        project = "TARGET_PROJECT_ID"
        zone = "TARGET_ZONE"
      }
    
      compute_instance_restore_properties {
        name = "RESTORED_VM_NAME"
        machine_type = "zones/TARGET_ZONE/machineTypes/e2-medium"
        disks {
          device_name = "DEVICE_NAME"
          disk_encryption_key {
            kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME"
          }
        }
      }
    }
    
  2. 還原具有多個磁碟的 VM:

    resource "google_backup_dr_restore_workload" "restore_multi" {
      location         = "SOURCE_REGION"
      backup_vault_id  = "BACKUP_VAULT_NAME"
      data_source_id   = "DATA_SOURCE"
      backup_id        = "BACKUP_ID"
    
      compute_instance_target_environment {
        project = "TARGET_PROJECT_ID"
        zone = "TARGET_ZONE"
      }
    
      compute_instance_restore_properties {
        name = "RESTORED_VM_NAME"
        machine_type = "zones/TARGET_ZONE/machineTypes/TARGET_MACHINETYPE"
        disks {
          device_name = "DEVICE_NAME_1"
          disk_encryption_key {
            kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1"
          }
        }
    
        disks {
          device_name = "DEVICE_NAME_2"
          disk_encryption_key {
            kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2"
          }
        }
      }
    }
    

如果保護來源工作負載的 Cloud Key Management Service 金鑰在還原作業期間無法使用,還原作業預設會失敗。在這種情況下,您必須使用 API 或 gcloud CLI 覆寫加密設定,方法是指定新的 CMEK 金鑰,或將還原資源的加密類型變更為 Google 代管加密。

如果用於加密 backup vault 資料的 Cloud Key Management Service 金鑰版本已停用或刪除,您就無法從該備份還原。

備份和災難復原 Compute Engine 指南

後續步驟