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

このページでは、コンソール Google Cloud で Backup Vault から Compute Engine インスタンスを復元する方法について説明します。 復元先は、新しい Compute Engine インスタンスまたは新しい Persistent Disk になります。 個々のディスクを選択して新しい Persistent Disk に復元するには、 Compute Engine インスタンスのバックアップからディスクを選択して復元するをご覧ください。

必要なロール

Backup Vault から Compute Engine インスタンスを復元するために必要な権限を取得するには、プロジェクト、ターゲット プロジェクト、Backup and DR サービス エージェント、VPC ホスト プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

これらの事前定義ロールには Backup Vault から Compute Engine インスタンスを復元するために必要な権限が含まれています。必要とされる正確な権限については、必要な権限セクションを開いてご確認ください。

必要な権限

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 で、[Vault に保存されているバックアップ] ページに移動します。

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

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

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

  3. [続行] をクリックします。

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

  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 コマンドを使用して、ワークロード プロジェクトと同じプロジェクト内の Compute Engine インスタンスをバックアップ ID で復元します。

      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 インスタンスをバックアップの完全なリソース URL で復元します。

      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 インスタンスのプロパティをオーバーライドするには、 Backup and DR サービス gcloud CLI コマンドの概要をご覧ください。

ディスクを選択してバックアップする場合の復元の制限事項

ディスクを選択してバックアップ を使用して作成されたバックアップから Compute Engine インスタンスを復元すると、 バックアップ 時に保護されていたディスクのみが復元され、新しい仮想マシン(VM)インスタンスに接続されます。 Google Cloud コンソールでは、概要セクションにバックアップに含まれる保護された ディスクがハイライト表示されます(例: Protected disks: 2 out of 3)。

除外されたディスクを含む VM を復元する際にブートエラーが発生しないようにするには、ソース VM のブート構成で、欠落しているディスクを無視するように構成します(たとえば、/etc/fstabnofail マウント オプションを追加します)。この Compute Engine の制限の詳細については、Persistent Disk の復元の制限事項と注意事項をご覧ください。

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 のコンセプトで説明されているように、Backup and DR サービス エージェントに 付与されます。

個々のディスクの復元における CMEK の処理

Compute Engine インスタンスのバックアップから単一のディスクを復元するために [個々のディスク] 復元スコープを選択すると、次の動作が発生します。

  • デフォルトの動作: バックアップから作成された新しいディスクは、元の Compute Engine インスタンスのソースディスクと同じ暗号鍵 を使用しようとします。

    • ソースディスクで Google 管理の暗号化が使用されている場合、復元されたディスクでも Google 管理の暗号化が使用されます。

    • ソースディスクで特定の CMEK が使用されている場合、復元されたディスクはその同じ CMEK を使用しようとします。

  • 鍵が使用できない: 鍵の削除、権限の変更、クロスリージョン復元などの理由で、ソースディスクで使用されている元の CMEK にターゲット プロジェクトまたはリージョンでアクセスできない場合、暗号化設定をオーバーライドしない限り、復元オペレーションは失敗します。

  • 暗号化設定のオーバーライド: 復元プロセス中に、次の手順で復元されたディスクの暗号化設定を変更できます。

    コンソール

    • 復元ウィザードの [ターゲット ディスクのプロパティ] セクションで、次のいずれかのオプションを使用して [暗号化] 設定を変更できます。

      • 別の顧客管理の暗号鍵(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 が選択した鍵で暗号化された新しいディスクを作成するために必要です。

ディスクの復元オペレーションとフラグの使用方法の詳細については、Backup Vault から Persistent Disk を復元する をご覧ください。

CMEK 対応の Backup Vault からバックアップを復元する

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

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

API または gcloud CLI を使用して Compute Engine Persistent Disk または 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 Encrypter/Decrypterroles/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 または gcloud CLI を使用して、新しい CMEK 鍵を指定するか、復元されたリソースの暗号化タイプを Google 管理の暗号化に変更して、暗号化設定をオーバーライドする必要があります。

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

Backup and DR Compute Engine ガイド

次のステップ