本頁面說明如何從 Google Cloud 控制台的備份保管庫還原 Compute Engine 執行個體,目標可以是新的 Compute Engine 執行個體或新的永久磁碟。如要選擇性地將個別磁碟還原至新的永久磁碟,請參閱「從 Compute Engine 執行個體備份執行選擇性磁碟還原」。
必要的角色
如要取得從 backup vault 還原 Compute Engine 執行個體所需的權限,請要求管理員在專案、目標專案、備份和災難復原服務代理,以及虛擬私有雲主專案中,授予您下列 IAM 角色:
-
還原 Compute Engine 執行個體:
- 備份和災難復原還原使用者 (
roles/backupdr.restoreUser) - Compute 檢視者 (
roles/compute.viewer)
- 備份和災難復原還原使用者 (
-
將角色授予服務代理:備份和災難復原 Compute Engine 操作者 (
roles/backupdr.computeEngineOperator) -
使用 Shared VPC (選用):Compute 網路使用者 (
roles/compute.networkUser) -
從 Compute Engine 執行個體備份執行選擇性磁碟還原作業:備份和災難復原磁碟操作者 (
roles/backupdr.diskOperator) -
使用跨專案服務帳戶 (選用):服務帳戶使用者 (
roles/iam.serviceAccountUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備從 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 執行個體。
控制台
前往 Google Cloud 控制台的「Vaulted backups」(已建立 vault 的備份) 頁面。
前往「Vaulted backups」(vault 中的備份) 頁面
這裡會列出所有具備 vault 備份的 Compute Engine 執行個體。
按一下動作圖示,選取「還原」動作。「Restore」(還原) 頁面會顯示下列還原選項:
- 選取「Resource name」(資源名稱)。
- 選取「備份建立時間」。
- 選取「Restore scope」(還原範圍),可以是整個 Compute Engine 執行個體或個別磁碟。如要還原個別磁碟,請參閱「從 Compute Engine 執行個體備份執行選擇性磁碟還原」。
- 選取要還原 VM 的專案名稱。
按一下 [繼續]。
系統會顯示「Create a new Compute Engine instance from a backup」(從備份建立新的 Compute Engine 執行個體) 頁面,其中會根據來源 Compute Engine 執行個體屬性,預先填入 Compute Engine 執行個體屬性。您可以修改屬性來建立新的 Compute Engine 執行個體,例如變更「Region」(區域) 或「Machine Type」(機器類型) 的選項。
點選「建立」,即可使用所選備份建立新的 VM。
gcloud
使用
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 的區域。
還原 Compute Engine 執行個體前,請使用下列指令取得資料來源 ID 和所需備份的 ID:
使用
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)"
使用
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)"
如要還原 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 覆寫權限:
如果覆寫加密設定,改用「新」或「不同」的 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 金鑰保護的資源,請按照下列步驟操作:
- 確認目標區域中有金鑰:確認您在還原 VM 的區域 (目標專案或共用 KMS 專案) 中有 Cloud Key Management Service 金鑰,如果沒有,請建立一個。
授予 KMS 權限:將這個目標金鑰的 Cloud KMS CryptoKey 加密者/解密者 (
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:備份 vault 所在的專案名稱。
- SOURCE_REGION:backup vault 的位置。
- BACKUP_VAULT_NAME:要還原資料的 backup vault 名稱。
- 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:備份 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 金鑰名稱。
還原具有多個磁碟的 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
取得備份詳細資料:傳送
GET要求列出備份,擷取備份名稱和磁碟的裝置名稱:GET https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups執行還原 API:傳送
POST要求至備份的restoreURI。還原具有單一磁碟的 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 代管加密。
如果用於加密 backup vault 資料的 Cloud Key Management Service 金鑰版本已停用或刪除,您就無法從該備份還原。
備份和災難復原 Compute Engine 指南
- 建立及管理 Vault 備份的備份方案
- 檢查雲端憑證
- 探索及保護 Compute Engine 執行個體
- 掛接 Compute Engine 永久磁碟的備份映像檔
- 還原 Compute Engine 執行個體
- 匯入 Persistent Disk 快照映像檔