Backup Vault から Compute Engine インスタンスを復元する

このページでは、 Backup Vault から Compute Engine インスタンスを Google Cloud コンソールで復元する方法について説明します。

始める前に

  • 復元を実行するターゲット プロジェクトの Vault の Backup and DR Compute Engine オペレータ(roles/backupdr.computeEngineOperator) IAM ロールを Backup Vault サービス エージェント に付与します。

  • 共有 VPC を使用している場合は、VPC ホスト プロジェクトの Vault の Backup Vault サービス エージェントに Compute Network ユーザー(roles/compute.networkUser)IAM ロールを付与します。

  • Backup Vault プロジェクトで復元を実行するユーザーに、次の IAM ロールを付与します。

    • Backup Vault とターゲット プロジェクトの両方に対する Backup and DR 復元ユーザー(roles/backupdr.restoreUser)。
    • ターゲットのみに対する Compute 閲覧者(roles/compute.viewer)。

    これらの事前定義ロールには、Compute Engine プロジェクトの Backup Vault にアクセスするために必要な権限が含まれています。具体的な権限については、次のリストをご覧ください。

    • 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 CLI CLI または API を使用してインスタンスを復元するには、ユーザーに次の権限が必要です。

    • バックアップ リソースに対する backupdr.bvbackups.restore
    • インスタンスが復元されるターゲット プロジェクトに対する backupdr.compute.restoreFromBackupVault

コンソール用の追加権限 Google Cloud

コンソールを使用してインスタンスを復元する場合、ユーザーには CLI 権限に加えて次の権限が必要です。 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. コンソールで、[Vault に保存されているバックアップ] ページに移動します。 Google Cloud

    [Vault に保存されているバックアップ] に移動

    Vault に保存されているバックアップを含むすべての Compute Engine インスタンスがここに一覧表示されます。

  2. アクション アイコンをクリックして、[復元] アクションを選択します。[復元ページ] が表示されます。ここで、次の復元オプションを選択します。

    • [リソース名] を選択します。
    • [バックアップの作成日時] を選択します。
    • VM を復元するプロジェクト名 を選択します。
  3. [続行] をクリックします。

    • 次のページ [バックアップから新しい VM インスタンスを作成する] が表示されます。ここでは、ソース VM のプロパティに基づいて VM プロパティが事前入力されます。プロパティを変更して新しい VM を作成できます。たとえば、[リージョン] または [マシンタイプ] の選択を変更します。
  4. [作成] をクリックして、選択したバックアップから新しい VM を作成します。

gcloud

  1. まだ付与されていない場合は、VM が復元される復旧プロジェクトの Backup Vault サービス エージェントに Backup and DR Compute Engine オペレータ(roles/backupdr.computeEngineOperator)IAM ロールを付与します。

  2. Backup Vault サービス アカウントを取得するには、次のコマンドを使用します。

      gcloud backup-dr backup-vaults describe BACKUPVAULT_NAME
      --location=REGION
    

    次のように置き換えます。

    • BACKUPVAULT_NAME: データの復元元となる Backup Vault の名前。
    • REGION: Backup Vault のリージョン。
  3. Compute Engine インスタンスを復元する前に、次のコマンドを使用してデータソース ID と必要なバックアップの ID を取得します。

    1. データソース ID を確認する

        gcloud backup-dr data-sources list \
        --project=PROJECT \
        --location=REGION \
        --backup-vault=BACKUPVAULT_NAME \
        "--filter=dataSourceGcpResource.computeInstanceDatasourceProperties.name:(DATA_SOURCE)" \
        "--format=get(name)")
      
    2. データソースの既存のバックアップを一覧表示して、正しい 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)"
      
  4. 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
      
    • バックアップの完全なリソース URL を使用して、ワークロード プロジェクトと同じプロジェクト内の 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: Backup Vault プロジェクトの名前。
      • REGION: Backup Vault のロケーション。
      • BACKUPVAULT_NAME: データの復元元となる Backup Vault の名前。
      • DATA_SOURCE: データの復元元となるデータソースの名前。
      • NAME: 復元された VM の名前。
      • TARGET_ZONE: VM が復元されるリージョン。
      • TARGET_PROJECT: VM が復元されるプロジェクト。
      • NETWORK: VM のネットワーク URI。
      • SUBNET: VM のサブネット URI。
      • SERVICE_ACCOUNT:復元された VM のサービス アカウント。
      • SCOPE: サービス アカウントの承認スコープ。

他の VM プロパティをオーバーライドするには、Backup and DR サービス Google Cloud CLI コマンドの概要をご覧ください。

CMEK 対応の Backup Vault から復元する

CMEK 対応の Backup Vault からバックアップを復元する場合、復元されたリソースの暗号化はソースの暗号化によって異なります。

  • ソースリソースが CMEK で保護されていた場合: 復元されたリソースは、デフォルトでソースと同じ CMEK 鍵を使用します。例:
    • K1 で暗号化された Compute Engine 永続ディスクは、K1 で暗号化されたディスクに復元されます。
    • VM に複数のディスクがある場合、復元された VM の各ディスクは、対応するソースディスクの暗号化を継承します(CMEK で暗号化されたディスクは元の鍵で暗号化されたままになり、Google マネージドで暗号化されたディスクは Google マネージドのままになります)。
  • ソースリソースで Google マネージド暗号化が使用されていた場合: 復元されたリソースは、デフォルトで Google マネージド暗号化を使用します。

API または Google Cloud 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 のクロスリージョン復元を実行するには、Google Cloud 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: Backup 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: Backup 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: Backup 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 を実行する: バックアップの restore URI に POST リクエストを送信します。

    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 または Google Cloud CLI を使用して、新しい CMEK 鍵を指定するか、復元されたリソースの暗号化タイプを Google マネージド暗号化に変更して、暗号化設定をオーバーライドする必要があります。

Backup Vault でデータの暗号化に使用される Cloud Key Management Service 鍵バージョンが無効になっているか破棄されている場合、そのバックアップから復元することはできません。

Backup and DR Compute Engine ガイド