本頁面說明如何透過 Google Cloud 控制台,從備份保存庫還原 Compute Engine 執行個體。
事前準備
在執行還原作業的目標專案中,將備份和災難復原 Compute Engine 操作者 (
roles/backupdr.computeEngineOperator) IAM 角色授予備份儲存庫的備份儲存庫服務代理。如果您使用共用虛擬私有雲,請在虛擬私有雲主專案中,為備份儲存空間的備份儲存空間服務代理程式授予 Compute 網路使用者 (
roles/compute.networkUser) IAM 角色。為在備份保存庫專案中執行還原作業的使用者授予下列 IAM 角色。
- 備份和災難復原還原使用者 (
roles/backupdr.restoreUser),適用於備份儲存空間和目標專案。 - 僅限目標的 Compute 檢視者 (
roles/compute.viewer)。
這些預先定義的角色具備存取 Compute Engine 專案中備份保存庫所需的權限。如需特定權限,請參閱下列清單。
backupdr.bvbackups.restorebackupdr.compute.restoreFromBackupVaultbackupdr.backupVaults.getbackupdr.backupVaults.listbackupdr.bvbackups.listbackupdr.bvdataSources.getbackupdr.bvdataSources.listbackupdr.bvbackups.get
如要使用 gcloud CLI 或 API 還原執行個體,使用者必須具備下列權限:
- 備份資源的
backupdr.bvbackups.restore。 backupdr.compute.restoreFromBackupVault,目標專案是執行個體還原位置。
- 備份和災難復原還原使用者 (
Google Cloud 控制台的其他權限
使用 Google Cloud 控制台還原執行個體時,使用者需要 CLI 權限和下列權限。主控台需要這些額外權限,才能列出並顯示必要 Compute Engine 資源,供使用者介面選取:
compute.acceleratorTypes.listcompute.disks.listcompute.machineTypes.listcompute.projects.getcompute.regions.listcompute.zones.list
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
還原 Compute Engine 執行個體
請按照下列指示還原 Compute Engine 執行個體。
控制台
前往 Google Cloud 控制台的「Vaulted backups」(已封存備份) 頁面。
這裡會列出所有具有封存備份的 Compute Engine 執行個體。
按一下動作圖示,選取「還原」動作。「還原頁面」會顯示下列還原選項:
- 選取資源名稱。
- 選取「備份建立時間」。
- 選取要還原 VM 的專案名稱。
按一下 [繼續]。
- 系統會顯示「透過備份建立新的 VM 執行個體」頁面,並根據來源 VM 屬性預先填入 VM 屬性。您可以修改屬性來建立新的 VM,例如變更「區域」或「機型」的選取項目。
按一下「建立」,從所選備份建立新的 VM。
gcloud
如果尚未授予,請在要還原 VM 的復原專案中,將 Backup and DR Compute Engine 運算子 (
roles/backupdr.computeEngineOperator) IAM 角色授予備份儲存空間服務代理。如要取得備份儲存空間服務帳戶,請使用下列指令。
gcloud backup-dr backup-vaults describe BACKUPVAULT_NAME --location=REGION更改下列內容:
- BACKUPVAULT_NAME:要從中還原資料的備份保存庫名稱。
- REGION:備份保存庫的區域。
如要還原 Compute Engine 執行個體,請先使用下列指令取得資料來源 ID 和所需備份的 ID。
找出資料來源 ID
gcloud backup-dr data-sources list \ --project=PROJECT \ --location=REGION \ --backup-vault=BACKUPVAULT_NAME \ "--filter=dataSourceGcpResource.computeInstanceDatasourceProperties.name:(DATA_SOURCE)" \ "--format=get(name)")列出資料來源的現有備份,找出正確的 BACKUP_ID。
gcloud backup-dr backups list \ --location=REGION \ --backup-vault=BACKUPVAULT_NAME \ --data-source=DATA_SOURCE \ "--format=yaml(backupType,computeInstanceBackupProperties.sourceInstance,consistencyTime,enforcedRetentionEndTime,expireTime,name)"
如要還原 Compute Engine 執行個體,請使用下列指令。
使用備份 ID,在與工作負載專案相同的專案中還原 VM。
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使用備份完整資源網址,在與工作負載專案相同的專案中還原 VM。
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還原具備自訂服務帳戶和網路設定的 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:備份保存庫專案的名稱。
- REGION:備份保存庫的位置。
- BACKUPVAULT_NAME:要從中還原資料的備份保存庫名稱。
- DATA_SOURCE:要從中還原資料的資料來源名稱。
- NAME:還原的 VM 名稱。
- TARGET_ZONE:VM 還原所在的區域。
- TARGET_PROJECT:VM 還原所在的專案。
- NETWORK:VM 的網路 URI。
- SUBNET:VM 的子網路 URI。
- SERVICE_ACCOUNT:還原的 VM 服務帳戶。
- SCOPE:服務帳戶的授權範圍。
如要覆寫其他 VM 屬性,請參閱「備份與 DR 服務總覽 」一文中的 gcloud CLI 指令。
從已啟用 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 金鑰保護的資源,請按照下列步驟操作:
- 確認目標區域中有金鑰:確認您在還原 VM 的區域中 (目標專案或共用 KMS 專案),有 Cloud Key Management Service 金鑰,如果沒有,請建立一個。
授予 KMS 權限:將目標金鑰的「Cloud KMS CryptoKey Encrypter/Decrypter」 (
roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色,授予要還原 VM 的目標專案 Compute Engine 服務代理人。執行還原作業:使用下列其中一種方法執行還原作業,並覆寫每個磁碟的 KMS 金鑰:
gcloud
取得備份詳細資料:使用
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:備份保存庫所在的專案名稱。
- SOURCE_REGION:備份保存庫的位置。
- BACKUP_VAULT_NAME:要從中還原資料的備份保存庫名稱。
- SOURCE_INSTANCE_NAME:來源 Compute Engine 執行個體的名稱。
執行還原指令:執行還原指令,並使用
--create-disk參數覆寫每個磁碟的 KMS 金鑰。還原具有單一磁碟的 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:備份保存庫所在的專案名稱。
- SOURCE_REGION:備份保存庫的位置。
- BACKUP_VAULT_NAME:要從中還原資料的備份保存庫名稱。
- 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 金鑰名稱。
還原有多個磁碟的 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:備份保存庫所在的專案名稱。
- SOURCE_REGION:備份保存庫的位置。
- BACKUP_VAULT_NAME:要從中還原資料的備份保存庫名稱。
- 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
取得備份詳細資料:傳送
GET要求列出備份,即可擷取備份名稱和磁碟的裝置名稱:GET https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups執行還原 API:向備份的
restoreURI 傳送POST要求。還原具有單一磁碟的 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" } } ] } }還原具有多個磁碟的 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 資源
還原具有單一磁碟的 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" } } } }還原具有多個磁碟的 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 代管的加密機制。
如果用於加密備份保存庫資料的 Cloud Key Management Service 金鑰版本已停用或刪除,您就無法從該備份還原資料。
備份和災難復原 Compute Engine 指南
- 建立及管理封存備份的備份方案
- 檢查雲端憑證
- 探索及保護 Compute Engine 執行個體
- 掛接 Compute Engine 永久磁碟的備份映像檔
- 還原 Compute Engine 執行個體
- 匯入 Persistent Disk 快照映像檔