VM に Hyperdisk ストレージを追加する


VM で Hyperdisk Extreme ボリュームまたは Hyperdisk Throughput ボリュームを使用するには、次のタスクを行います。

  • 空の非ブート ボリュームとゾーンの Hyperdisk ボリュームを作成し、VM 作成の一環として、または個別のタスクとして VM にアタッチします。
  • ボリュームをフォーマットしてマウントし、データまたはファイル システムにアクセスできるようにします。

Hyperdisk Balanced ボリュームの場合も同じです。ただし、Hyperdisk Balanced タイプのブートディスクも作成できます。

Hyperdisk に関する一般的な情報については、Hyperdisk についてをご覧ください。

準備

  • Hyperdisk ボリュームを VM に追加する前に、Hyperdisk の制限を確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

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

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

必要なロールと権限

VM への Hyperdisk ボリュームの追加に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセス権の管理をご覧ください。

これらの事前定義ロールには、VM への Hyperdisk ボリュームの追加に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

VM に Hyperdisk ボリュームを追加するには、次の権限が必要です。

  • Hyperdisk ボリュームを作成してアタッチするには:
    • プロジェクトに対する compute.disks.create 権限
    • VM に対する compute.instances.attachDisk 権限
    • VM にアタッチするボリュームに対する compute.disks.use 権限
  • アタッチされたボリュームをフォーマットしてマウントするには: VM に対する compute.instances.setMetadata 権限

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

Hyperdisk ボリュームでサポートされる値

Hyperdisk ボリュームを作成または変更するときに使用する値は、ディスクあたりの Hyperdisk の上限で説明されている最大値と最小値の範囲内にする必要があります。

VM にアタッチされている Hyperdisk ボリュームのサイズを変更する場合、新しい値は VM あたりの Hyperdisk の上限を超えることはできません。

Hyperdisk ボリュームにプロビジョニングされる IOPS とスループットは、Hyperdisk の IOPS とスループットのプロビジョニングについてで説明されているルールに沿っている必要があります。

VM に Hyperdisk ボリュームを追加する

Hyperdisk ボリュームを作成してアタッチするには、Google Cloud コンソール、Google Cloud CLI、または REST を使用します。

Hyperdisk ボリュームの作成時に指定するサイズ、スループット、IOPS は、サポートされている値の範囲内にする必要があります。

コンソール

  1. [VM インスタンス] ページに移動します。

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

  2. ディスクを追加する VM の名前をクリックします。

  3. [VM インスタンスの詳細] ページで、[編集] をクリックします。

  4. [追加ディスク] で [新しいディスクを追加] をクリックします。

  5. ディスクの名前を指定し、必要に応じて説明を追加します。[ディスクソースのタイプ] として [空のディスク] を選択します。

  6. [ディスクの設定] で、次のリストからディスクタイプを選択します。指定する値は、サポートされている値の範囲内にする必要があります。

    1. Hyperdisk Balanced。デフォルトのディスクの [サイズ]、[プロビジョニングされた IOPS]、[プロビジョニングされたスループット] の設定を変更することもできます。
    2. Hyperdisk Extreme。デフォルトのディスクの [サイズ] と [プロビジョニングされた IOPS] の設定を変更することもできます。
    3. Hyperdisk ML。デフォルトのディスクの [サイズ] と [プロビジョニングされたスループット] の設定を変更することもできます。
    4. Hyperdisk Throughput。デフォルトのディスクの [サイズ] と [プロビジョニングされたスループット] 設定を変更することもできます。
  7. [保存] をクリックします。

  8. 変更を VM に適用するには、[保存] をクリックします。

gcloud

  1. gcloud compute disks create コマンドを使用して、Hyperdisk ボリュームを作成します。

    gcloud compute disks create DISK_NAME \
       --zone=ZONE \
       --size=DISK_SIZE \
       --type=DISK_TYPE \
       --provisioned-iops=IOPS_LIMIT
       --provisioned-throughput=THROUGHPUT_LIMIT
    

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

    • DISK_NAME: 新しいディスクの名前。
    • ZONE: 新しいディスクが作成されるゾーンの名前。
    • DISK_SIZE: 省略可。新しいディスクのサイズ。この値は整数で、その後に GB(ギビバイト)または TB(テビバイト)のサイズ単位が続きます。サイズ単位が指定されていない場合、デフォルト値として 100 GB が使用されます。ディスクサイズに指定できる値は次のとおりです。
      • Hyperdisk Balanced: 4 GiB から 64 TiB まで(1 GiB 単位で指定します)。
      • Hyperdisk Extreme: 64 GiB から 64 TiB まで(1 GiB 単位で指定します)。
      • Hyperdisk ML: 4 GiB から 64 TiB まで(1 GiB 単位で指定します)。
      • Hyperdisk Throughput: 2 TiB から 32 TiB まで(1 GiB 単位で指定します)。
    • DISK_TYPE: ディスクのタイプ。hyperdisk-balancedhyperdisk-extremehyperdisk-mlhyperdisk-throughput のいずれかの値を使用します。
    • IOPS_LIMIT: 省略可。Hyperdisk Balanced ディスクまたは Hyperdisk Extreme ディスクの場合、これはディスクが処理できる 1 秒あたりの I/O オペレーション(IOPS)の数です。
    • THROUGHPUT_LIMIT: 省略可。Hyperdisk Balanced ボリューム、Hyperdisk ML ボリューム、または Hyperdisk Throughput ボリュームの場合、これはディスクが処理できるスループット(MiB/秒で測定)を表す整数です。
  2. 省略可: gcloud compute disks describe DISK_NAME コマンドを使用して、ディスクの説明を表示します。

  3. ディスクの作成後、ディスクを VM にアタッチできます。

REST

  1. disks.insert メソッドを使用して、ゾーン Hyperdisk を作成する POST リクエストを作成します。namesizeGbtypeprovisionedIopsprovisionedThroughput プロパティを含めます。このディスクを空のフォーマットされていない非ブートディスクとして作成する場合、ソースイメージやソース スナップショットを指定しないでください。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
    {
       "name": "DISK_NAME",
       "sizeGb": "DISK_SIZE",
       "type": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
       "provisionedIops": "IOPS_LIMIT",
       "provisionedThroughput": "THROUGHPUT_LIMIT"
    }
    

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

    • PROJECT_ID: プロジェクト ID
    • ZONE: VM と新しいディスクが配置されるゾーン
    • DISK_NAME: 新しいディスクの名前
    • DISK_SIZE: 省略可。新しいディスクのサイズ。この値は整数で、その後に GB(ギビバイト)または TB(テビバイト)のサイズ単位が続きます。
    • DISK_TYPE: ディスクのタイプ。Hyperdisk ボリュームを作成するには、次のいずれかの値を使用します。hyperdisk-balancedhyperdisk-extremehyperdisk-ml、または hyperdisk-throughput
    • IOPS_LIMIT: 省略可。Hyperdisk Balanced と Hyperdisk Extreme の場合、これはディスクが処理できる 1 秒あたりの I/O オペレーションの数です。
    • THROUGHPUT_LIMIT: 省略可。Hyperdisk Balanced ボリューム、Hyperdisk ML ボリューム、または Hyperdisk Throughput ボリュームの場合、これはディスクが処理できるスループット(MiB/秒で測定)を表す整数です。
  2. 省略可: compute.disks.get メソッドを使用して、ディスクの説明を表示します。

  3. ディスクの作成後、実行中または停止中の VM にディスクをアタッチできます。

Java


import com.google.cloud.compute.v1.Disk;
import com.google.cloud.compute.v1.DisksClient;
import com.google.cloud.compute.v1.InsertDiskRequest;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateHyperdisk {
  public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Name of the zone in which you want to create the disk.
    String zone = "europe-central2-b";
    // Name of the disk you want to create.
    String diskName = "YOUR_DISK_NAME";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-throughput)".
    // For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
    String diskType = String.format("zones/%s/diskTypes/hyperdisk-balanced", zone);
    // Size of the new disk in gigabytes.
    long diskSizeGb = 10;
    // Optional: For Hyperdisk Balanced or Hyperdisk Extreme disks,
    // this is the number of I/O operations per second (IOPS) that the disk can handle
    long provisionedIops = 3000;
    // Optional: For Hyperdisk Balanced or Hyperdisk Throughput volumes,
    // this is an integer that represents the throughput,
    // measured in MiB per second, that the disk can handle.
    long provisionedThroughput = 140;

    createHyperdisk(projectId, zone, diskName, diskType, diskSizeGb,
            provisionedIops, provisionedThroughput);
  }

  // Creates a hyperdisk in a project
  public static Disk createHyperdisk(String projectId, String zone, String diskName,
                                     String diskType, long diskSizeGb, long provisionedIops,
                                     long provisionedThroughput)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DisksClient client = DisksClient.create()) {
      // Create a disk.
      Disk disk = Disk.newBuilder()
              .setZone(zone)
              .setName(diskName)
              .setType(diskType)
              .setSizeGb(diskSizeGb)
              .setProvisionedIops(provisionedIops)
              .setProvisionedThroughput(provisionedThroughput)
              .build();

      InsertDiskRequest request = InsertDiskRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setDiskResource(disk)
              .build();

      // Wait for the insert disk operation to complete.
      Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);

      if (operation.hasError()) {
        System.out.println("Disk creation failed!");
        throw new Error(operation.getError().toString());
      }

      // Wait for server update
      TimeUnit.SECONDS.sleep(10);

      Disk hyperdisk = client.get(projectId, zone, diskName);

      System.out.printf("Hyperdisk '%s' has been created successfully", hyperdisk.getName());

      return hyperdisk;
    }
  }
}

ディスクの作成後、実行中または停止中の VM にディスクをアタッチできます。

ディスクをフォーマットしてマウントする

新しいディスクを作成して VM にアタッチしたら、ディスクをフォーマットしてマウントする必要があります。この操作を行うことで、オペレーティング システムが保存容量を使用できるようになります。

次のステップ