リージョン ディスクの作成と管理


リージョン Persistent DiskHyperdisk Balanced High Availability は、Compute Engine に高可用性(HA)サービスを実装できるストレージ オプションです。リージョン Persistent Disk と Hyperdisk Balanced の高可用性は、同じリージョン内の 2 つのゾーン間でデータを同期的にレプリケートし、1 つのゾーンの障害に対してディスクデータの HA を確保します。 リージョン ディスクは、ブートディスクまたはブートディスク以外のディスクです。

このドキュメントでは、リージョン ディスクに対して次のタスクを行う方法について説明します。

始める前に

  • ディスク ストレージ オプションの種類の違いを確認します。
  • ディスクの同期レプリケーションの基本を確認します。
  • リージョン ディスクのフェイルオーバーについて確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロールと権限

リージョン ディスクの作成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

これらの事前定義ロールには、リージョン ディスクの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

リージョン ディスクを作成するには、次の権限が必要です。

  • compute.disks.create
  • compute.instances.attachDisk
  • compute.disks.use
  • ディスクのスナップショットを作成する: compute.disks.createSnapshot
  • ディスクの詳細を表示する: compute.disks.get
  • ディスクのリストを取得する: compute.disks.list
  • ディスクのサイズを変更する: compute.disks.update

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

制限事項

  • メキシコ、大阪、モントリオールは、1 つまたは 2 つの 物理的なデータセンターに 3 つのゾーンがあります。これらのリージョンに保存されたデータは、まれなケースですが、データセンターの破壊によって失われる可能性があります。データ保護を強化するため、ビジネスに不可欠なデータを別のリージョンにバックアップすることを検討してください。
  • リージョン永続ディスク をアタッチできるのは、E2N1N2N2Dのマシンタイプを使用する VM のみです。
  • Hyperdisk Balanced High Availability は、サポートされているマシンタイプにのみ接続できます。
  • リージョン Persistent Disk をイメージから作成することはできません。イメージから作成されたディスクから作成することもできません。
  • 読み取り専用モードを使用すると、最大 10 個の VM インスタンスにリージョン バランス Persistent Disk をアタッチできます。
  • リージョン標準永続ディスクの最小サイズは 200 GiB です。
  • リージョン Persistent Disk またはHyperdisk Balanced High Availability ボリュームのサイズを増やすことはできますが、縮小はできません。
  • リージョン Persistent Disk と Hyperdisk Balanced High Availability ボリュームのパフォーマンス特性は、対応するゾーンディスクとは異なります。詳細については、ブロック ストレージのパフォーマンスをご覧ください。
  • マルチライター モードの Hyperdisk Balanced High Availability ボリュームをブートディスクとして使用することはできません。
  • ゾーンディスクのクローンを作成してリージョン Persistent Disk を作成する場合、2 つのゾーンレプリカは作成時には完全には同期しません。作成後、リージョン ディスクのクローンは平均で 3 分以内に使用できるようになります。ただし、ディスクが完全にレプリケートされた状態になり、目標復旧時点(RPO)がゼロに近くなるまで、数十分かかる場合があります。詳細については、レプリケートされたディスクが完全にレプリケートされたかどうかを確認する方法をご覧ください。

リージョン ディスクをインスタンスのブートディスクとして使用する方法

本番環境のワークロードをプロビジョニングする前に、事前にプロビジョニングされたステートフル ワークロードのブートディスクとして、リージョン Persistent Disk または Hyperdisk Balanced High Availability ディスクをアタッチできます。リージョン ブートディスクは 2 つのコンピューティング インスタンスに同時にアタッチできないため、リージョン ブートディスクはホット スタンバイ用ではありません。

スナップショットから作成できるのは、 リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームのみで、イメージからリージョン ディスクを作成することはできません。

リージョン ディスクをインスタンスのブートディスクとして使用するには、次のいずれかの方法を使用します。

  1. リージョン ブートディスクを使用して新しいインスタンスを作成する
  2. リージョン ブートディスクを作成し、インスタンスにアタッチします。
    1. ブートディスクのスナップショットからリージョン ディスクを作成します。
    2. リージョン ブートディスクをインスタンスにアタッチします

リージョン ブートディスクをレプリカゾーンで実行中のスタンバイ インスタンスにフェイルオーバーする必要がある場合は、リージョン ブートディスクをインスタンスにアタッチするの手順を使用します。

リージョン ディスクを作成する

リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームを作成します。ディスクは、アタッチするコンピューティング インスタンスと同じリージョンに存在する必要があります。

Hyperdisk Balanced High Availability ボリュームを作成する場合は、ディスク アクセス モードを設定して、異なるインスタンスがディスクに同時にアクセスできるようにすることもできます。詳細については、インスタンス間でディスクを共有するをご覧ください。

リージョン Persistent Disk の場合、Google Cloud コンソールでディスクを作成すると、デフォルトのディスクタイプpd-balanced です。gcloud CLI または REST を使用してディスクを作成する場合、デフォルトのディスクタイプは pd-standard です。

コンソール

  1. Google Cloud コンソールで、[ディスク] ページに移動します。

    [ディスク] に移動

  2. 必要なプロジェクトを選択します。

  3. [ディスクを作成] をクリックします。

  4. [名前] でディスクの名前を指定します。

  5. [ロケーション] で [リージョン] を選択します。

  6. リージョンゾーンを選択します。インスタンスの作成時に同じリージョンを選択する必要があります。

  7. 同じリージョン内の [レプリカゾーン] を選択します。いずれかのゾーンのインスタンスにディスクを接続する必要があるため、選択したゾーンをメモしておきます。

  8. [ディスクソースのタイプ] を選択します。

  9. ディスクタイプサイズを選択します。

  10. [作成] をクリックしてディスクの作成を終了します。

gcloud

compute disks create コマンドを使用してリージョン ディスクを作成します。

スループットや IOPS を上げるためにリージョン SSD 永続ディスクが必要な場合は、--type フラグで pd-ssd を指定します。

gcloud compute disks create DISK_NAME \
   --size=DISK_SIZE \
   --type=DISK_TYPE \
   --region=REGION \
   --replica-zones=ZONE1,ZONE2
   --access-mode=DISK_ACCESS_MODE

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

  • DISK_NAME: 新しいディスクの名前
  • DISK_SIZE: 新しいディスクのサイズ(GiB)
  • DISK_TYPE:リージョン Persistent Disk の場合、これはリージョン ディスクのタイプです。デフォルト値は pd-standard です。 Hyperdisk の場合は、値 hyperdisk-balanced-high-availability を指定します。
  • REGION: リージョン ディスクを配置するリージョン(例: europe-west1
  • ZONE1ZONE2: 2 つのディスク レプリカが配置されるリージョン内のゾーン(例: europe-west1-b,europe-west1-c
  • DISK_ACCESS_MODE: 省略可。インスタンスがディスク上のデータにアクセスする方法。サポートされている値は次のとおりです。

    • READ_WRITE_SINGLE: 1 つのインスタンスからの読み取り / 書き込みアクセス。これがデフォルトです。
    • READ_WRITE_MANY: 複数のインスタンスからの読み取り / 書き込みアクセス。

    アクセスモードを設定できるのは、Hyperdisk Balanced High Availability ディスクに対してのみです。

Terraform

リージョン Persistent Disk または Hyperdisk Balanced High Availability を作成するには、google_compute_region_disk リソースを使用します。

resource "google_compute_region_disk" "regiondisk" {
  name                      = "region-disk-name"
  snapshot                  = google_compute_snapshot.snapdisk.id
  type                      = "pd-ssd"
  region                    = "us-central1"
  physical_block_size_bytes = 4096
  size                      = 11

  replica_zones = ["us-central1-a", "us-central1-f"]
}

REST

リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームを作成するには、compute.regionDisks.insert メソッドPOST リクエストを作成します。

空のディスクを作成するには、スナップショット ソースを指定しないでください。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks
{
  "name": "DISK_NAME",
  "region": "projects/PROJECT_ID/regions/REGION",
  "replicaZones": [
    "projects/PROJECT_ID/zones/ZONE1",
    "projects/PROJECT_ID/zones/ZONE2"
  ],
  "sizeGb": "DISK_SIZE",
  "type": "projects/PROJECT_ID/regions/REGION/diskTypes/DISK_TYPE",
  "accessMode": "DISK_ACCESS_MODE"
}

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

  • PROJECT_ID: プロジェクト ID
  • REGION: リージョン ディスクを配置するリージョン(例: europe-west1
  • DISK_NAME: 新しいディスクの名前
  • ZONE1ZONE2: 新しいディスクのレプリカが配置されるゾーン。
  • DISK_SIZE: 新しいディスクのサイズ(GiB)
  • DISK_TYPE:リージョン Persistent Disk の場合、これは Persistent Disk のタイプです。 Hyperdisk の場合は、値 hyperdisk-balanced-high-availability を指定します。
  • DISK_ACCESS_MODE: インスタンスがディスク上のデータにアクセスする方法。サポートされている値は次のとおりです。

    • READ_WRITE_SINGLE: 1 つのインスタンスからの読み取り / 書き込みアクセス。これがデフォルトです。
    • READ_WRITE_MANY: 複数のインスタンスからの読み取り / 書き込みアクセス。

    アクセスモードを設定できるのは、Hyperdisk Balanced High Availability ディスクに対してのみです。

リージョン ディスクをインスタンスに接続する

ブートディスク以外のディスクの場合は、リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームを作成した後、インスタンスにアタッチできます。インスタンスは、ディスクと同じリージョンに存在する必要があります。

リージョン ブートディスクをインスタンスにアタッチするには、リージョン ブートディスクをインスタンスにアタッチするをご覧ください。

ディスクを複数のインスタンスにアタッチするには、インスタンスごとにこのセクションの手順を繰り返します。

コンソール

  1. ディスクをインスタンスにアタッチするには、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [名前] 列で、インスタンスの名前をクリックします。

  3. [編集] をクリックします。

  4. [既存のディスクを接続] をクリックします。

  5. 以前に作成したリージョン ディスクを選択してインスタンスに追加します。

  6. 選択したディスクがすでに別のインスタンスに接続されているという警告が表示された場合は、[ディスクを強制接続する] ボックスを選択して、編集しているインスタンスにディスクを強制的にアタッチします。

    リージョン ディスクのフェイルオーバーで、リージョン ディスクを強制的にアタッチするユースケースを確認します。

  7. [保存] をクリックします。

  8. [VM の編集] ページで、[保存] をクリックします。

gcloud

実行中または停止中のインスタンスにリージョン ディスクをアタッチするには、--disk-scope フラグを regional に設定して compute instances attach-disk コマンドを使用します。

gcloud compute instances attach-disk INSTANCE_NAME \
    --disk=DISK_NAME \
    --disk-scope=regional

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

  • INSTANCE_NAME: リージョン ディスクを追加するインスタンスの名前
  • DISK_NAME: インスタンスにアタッチする新しいディスクの名前。

Terraform

リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームをインスタンスにアタッチするには、google_compute_attached_disk リソースを使用します。

resource "google_compute_instance" "test_node" {
  name         = "test-node"
  machine_type = "f1-micro"
  zone         = "us-west1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  attached_disk {
    source      = google_compute_disk.default.id
    device_name = google_compute_disk.default.name
  }

  network_interface {
    network = "default"
    access_config {
      # Ephemeral IP
    }
  }

  # Ignore changes for persistent disk attachments
  lifecycle {
    ignore_changes = [attached_disk]
  }


}

REST

実行中または停止中のインスタンスにリージョン ディスクをアタッチするには、compute.instances.attachDisk メソッドPOST リクエストを作成し、作成したリージョン ディスクの URL を指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk
{
  "source": "/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME"
}

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: インスタンスの場所
  • INSTANCE_NAME: 新しいリージョン ディスクを追加するインスタンスの名前
  • REGION: リージョン ディスクが配置されるリージョン
  • DISK_NAME: リージョン ディスクの名前

ブートディスク以外のディスクの場合は、空のリージョン ディスクを作成してインスタンスにアタッチした後、ディスクをフォーマットしてマウントする必要があります。これにより、オペレーティング システムが使用可能なストレージ空間を使用できるようになります。

ゾーンディスクをリージョン ディスクに変更する

既存のゾーン Persistent Disk をリージョン Persistent Disk に変換するには、既存のゾーンディスクのクローンを作成して新しいディスクを作成します。詳細については、ゾーンディスクからリージョン ディスクのクローンを作成するをご覧ください。

Hyperdisk をリージョン ディスクに変換するには、ゾーンディスクを Hyperdisk Balanced High Availability ディスクに変換するの説明に従って、既存のディスクのスナップショットから新しい Hyperdisk Balanced High Availability ディスクを作成します。

リージョン ディスクを使用して新しいインスタンスを作成する

インスタンスを作成するときに、必要に応じて、リージョン Persistent Disk ボリュームまたはHyperdisk Balanced High Availability ボリュームを追加のディスクとして含めることができます。

リージョン Persistent Disk またはHyperdisk Balanced High Availability ボリュームを作成してインスタンスの作成時にインスタンスにアタッチするには、次のいずれかをご覧ください。

リージョン ブートディスクを使用して新しいインスタンスを作成する

高可用性コンピューティング インスタンスを設定する場合は、リージョン ブートディスクを使用してプライマリ インスタンスを作成できます。ゾーンが停止した場合、新しいインスタンスを作成する代わりに、セカンダリ ゾーンでインスタンスを再起動できます。

ブートデバイスがリージョン ディスクである高可用性設定では、スタンバイ インスタンスの事前作成と開始は行わないことをおすすめします。代わりに、フェイルオーバー段階でスタンバイ インスタンスを作成するときに、forceAttach オプションを使用して既存のリージョン ディスクをアタッチします。

リージョン ディスクであるブートディスクを使用してインスタンスを作成するには、次のいずれかの方法を使用します。

gcloud

gcloud compute instances create コマンドを使用してインスタンスを作成し、--create-disk フラグを使用してリージョン ディスクを指定します。

gcloud compute instances create PRIMARY_INSTANCE_NAME  \
 --zone=ZONE  \
 --create-disk=^:^name=REGIONAL_DISK_NAME:scope=regional:boot=true:type=DISK_TYPE:source-snapshot=SNAPSHOT_NAME:replica-zones=ZONE,REMOTE_ZONE

disk パラメータを指定する際、文字 ^:^ はパラメータ間の区切り文字がコロン(:)であることを示します。これにより、replica-zones パラメータを指定する際にカンマ(,)を使用できます。

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

  • PRIMARY_INSTANCE_NAME: インスタンスの名前
  • ZONE: インスタンスを作成するゾーンの名前
  • REGIONAL_DISK_NAME: リージョン ディスクの名前
  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced-high-availabilitypd-balanced
  • SNAPSHOT_NAME: ブートディスク用に作成したスナップショットの名前
  • REMOTE_ZONE: リージョン ディスクの代替ゾーン

REST

instances.insert メソッドPOST リクエストを作成し、boot: 'true' プロパティと replicaZones プロパティを指定します。例:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
 "name": "INSTANCE_NAME",
 "disks": [{
    "boot": true,
    "initializeParams": {
       "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME",
       "replicaZones": [
           "projects/PROJECT_ID/zones/ZONE",
           "projects/PROJECT_ID/zones/REMOTE_ZONE"
       ],
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
    }
  }],
 "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ]
}

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: インスタンスを作成するゾーンの名前
  • INSTANCE_NAME: インスタンスの名前
  • BOOT_SNAPSHOT_NAME: ブートディスク スナップショットの名前
  • REMOTE_ZONE: リージョン ディスクのリモートゾーン
  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced-high-availability、 、pd-balanced

リージョン ブートディスクをインスタンスにアタッチする

手順は次のとおりです。

  • 既存のインスタンスのブートディスクをリージョン ブートディスクに置き換えます。
  • リージョン ブートディスクを、バックアップ ゾーンで実行されているホット スタンバイ インスタンスにフェイルオーバーします。これを行うには、リージョン ディスクをブートディスクとしてインスタンスにアタッチします。

以下の手順では、リージョン ディスクとインスタンスがすでに存在することを前提としています。

gcloud

  1. インスタンスを停止します。
    gcloud compute instances stop INSTANCE_NAME  --zone=ZONE
    
  2. 現在のブートディスクをインスタンスから切断します。
    gcloud compute instances detach-disk INSTANCE_NAME \
     --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME
    
  3. リージョン ブートディスクをインスタンスにアタッチします。
    gcloud compute instances attach-disk INSTANCE_NAME  \
     --zone=ZONE  \
     --disk=REGIONAL_DISK_NAME  \
     --disk-scope=regional --force-attach \
     --boot
    
  4. インスタンスを再起動します。

    gcloud compute instances start INSTANCE_NAME
    

上記のコマンドの変数を次のように置き換えます。

  • INSTANCE_NAME: リージョン ブートディスクをアタッチするインスタンスの名前
  • ZONE: インスタンスが配置されているゾーン
  • CURRENT_BOOT_DEVICE_NAME: インスタンスで使用されているブートディスクの名前。通常、これはインスタンスの名前と同じです。
  • REGIONAL_DISK_NAME: ブートディスクとしてインスタンスにアタッチするリージョン ディスクの名前

省略可: 停止または障害によって、プライマリ インスタンスからリージョン ブートディスクを正常に切断できない場合は、--force-attach フラグを含めます。

REST

  1. インスタンスを停止します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/stop
    
  2. 現在のブートディスクをインスタンスから切断します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/detachDisk?deviceName=CURRENT_BOOT_DEVICE_NAME
    
  3. リージョン ブートディスクをインスタンスにアタッチします。

    compute.instances.attachDisk メソッドに対する POST リクエストを作成し、リージョン ブートディスクへの URL を指定します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk
    {
    "source": "compute/v1/projects/PROJECT_ID/regions/REGION/disks/REGIONAL_DISK_NAME",
    "boot": true
    }
  4. インスタンスを再起動します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/start
    

上記のコマンドの変数を次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_NAME: リージョン ディスクをアタッチするインスタンスの名前
  • ZONE: インスタンスが配置されているゾーン
  • CURRENT_BOOT_DEVICE_NAME: インスタンスで使用されているブートディスクの名前。通常、これはインスタンスの名前と同じです。
  • REGION: リージョン ディスクが配置されているリージョン
  • REGIONAL_DISK_NAME: ブートディスクとしてインスタンスにアタッチするリージョン ディスクの名前

省略可: 停止または障害のために、最初にアタッチしたインスタンスからリージョン ブートディスクを正常に切断できない場合は、リクエストの本文に "forceAttach": true を含めます。

リージョン ディスクの一覧と説明を取得する

構成したすべてのリージョン ディスクの一覧と、次のようなプロパティに関する情報を表示できます。次に例を示します。

  • ディスク ID
  • ディスク名
  • サイズ
  • ディスクタイプ
  • リージョン
  • ゾーンレプリカ

リージョン ディスクの詳細情報を表示するには、次のコマンドを使用します。

リージョン ディスクのサイズを変更する

リージョン ディスクを使用するインスタンスで追加の保存容量が必要な場合は、ディスクのサイズを変更できます。実行中のインスタンスにディスクが接続しているかどうにかかわらず、いつでもディスクのサイズを変更できます。データを固有のボリュームに分離する必要がある場合は、インスタンス用に複数のセカンダリ ディスクを作成します。Hyperdisk Balanced High Availability では、ディスクの IOPS とスループットの上限を増やすこともできます。

リージョン ディスクのサイズ変更コマンドは、ゾーンディスクのサイズ変更コマンドと非常によく似ています。ただし、ディスクのロケーションにはゾーンではなくリージョンを指定する必要があります。

ディスクサイズの拡張のみを行うことができ、縮小することはできません。ディスクサイズを縮小するには、小さいサイズの新しいディスクを作成する必要があります。サイズの大きい元のディスクを削除するまで、両方のディスクに対して課金されます。

リージョン ディスクを変更する手順については、以下をご覧ください。

次のステップ