新しい Hyperdisk ボリュームを作成する


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

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

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

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

準備

  • Hyperdisk ボリュームを VM に追加する前に、Hyperdisk の制限を確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、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. Go

      ローカル開発環境でこのページの Go サンプルを使用するには、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 をご覧ください。

      Java

      ローカル開発環境でこのページの Java サンプルを使用するには、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 をご覧ください。

      Node.js

      ローカル開発環境でこのページの Node.js サンプルを使用するには、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 を使用して認証するをご覧ください。

必要なロールと権限

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 は、サポートされている値の範囲内にする必要があります。

Hyperdisk Balanced ボリュームまたは Hyperdisk Balanced High Availability(プレビュー)ボリュームを作成する場合は、必要に応じて、マルチライター モードでディスクを作成することによって複数の VM がそのディスクにアクセスできるようにします。

コンソール

  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. 省略可: Hyperdisk Balanced ボリュームまたは Hyperdisk Balanced High Availability(プレビュー)ボリュームの場合は、マルチライター モードでディスクを作成することによってそのディスクを複数の VM にアタッチできます。[アクセスモード] で、[複数の VM の読み取り / 書き込み] を選択します。

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

  9. 変更を 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
       --access-mode=DISK_ACCESS_MODE
    

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

    • 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/秒で測定)を表す整数です。
    • DISK_ACCESS_MODE: 省略可。VM がディスク上のデータにアクセスする方法。サポートされている値は次のとおりです。

      • READ_WRITE_SINGLE: 1 台の VM からの読み取り / 書き込みアクセス。これがデフォルトです。
      • READ_WRITE_MANY: 複数の VM からの読み取り / 書き込みアクセス。
      • READ_ONLY_MANY: 複数の VM からの読み取り専用アクセス。

      アクセスモードは、次のディスクタイプに設定できます。

      • Hyperdisk Balanced
      • Hyperdisk ML
      • Hyperdisk Balanced High Availability(プレビュー
  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",
       "accessMode": "DISK_ACCESS_MODE"
    }
    

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

    • 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/秒で測定)を表す整数です。
    • DISK_ACCESS_MODE: VM がディスク上のデータにアクセスする方法。サポートされている値は次のとおりです。

      • READ_WRITE_SINGLE: 1 台の VM からの読み取り / 書き込みアクセス。これがデフォルトです。
      • READ_WRITE_MANY: 複数の VM からの読み取り / 書き込みアクセス。
      • READ_ONLY_MANY: 複数の VM からの読み取り専用アクセス。

      アクセスモードは、次のディスクタイプに設定できます。

      • Hyperdisk Balanced
      • Hyperdisk ML
      • Hyperdisk Balanced High Availability(プレビュー
  2. 省略可: compute.disks.get メソッドを使用して、ディスクの説明を表示します。

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

Go

// createHyperdisk creates a new Hyperdisk in the specified project and zone.
func createHyperdisk(w io.Writer, projectId, zone, diskName string) error {
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"

	ctx := context.Background()
	client, err := compute.NewDisksRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewDisksRESTClient: %v", err)
	}
	defer client.Close()

	// use format "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-throughput)".
	diskType := fmt.Sprintf("zones/%s/diskTypes/hyperdisk-balanced", zone)

	// Create the disk
	disk := &computepb.Disk{
		Name:   proto.String(diskName),
		Type:   proto.String(diskType),
		SizeGb: proto.Int64(10),
		Zone:   proto.String(zone),
	}

	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	op, err := client.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("Insert disk request failed: %v", err)
	}

	// Wait for the insert disk operation to complete
	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Hyperdisk created: %v\n", diskName)
	return nil
}

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;
    }
  }
}

Node.js

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a diskClient
const disksClient = new computeLib.DisksClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// Project ID or project number of the Google Cloud project you want to use.
const projectId = await disksClient.getProjectId();

// The zone where your VM and new disk are located.
// zone = 'europe-central2-b';

// The name of the new disk
// diskName = 'disk-name';

// The type of disk. This value uses the following format:
// "zones/{zone}/diskTypes/(hyperdisk-balanced|hyperdisk-extreme|hyperdisk-ml|hyperdisk-throughput)".
// For example: "zones/us-west3-b/diskTypes/hyperdisk-balanced"
const diskType = `zones/${zone}/diskTypes/hyperdisk-balanced`;
// Size of the new disk in gigabytes.
const 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.
const 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.
const provisionedThroughput = 140;

async function callCreateComputeHyperdisk() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    zone,
    type: diskType,
    provisionedIops,
    provisionedThroughput,
  });

  const [response] = await disksClient.insert({
    project: projectId,
    zone,
    diskResource: disk,
  });

  let operation = response.latestResponse;

  // Wait for the create disk operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Disk: ${diskName} created.`);
}

await callCreateComputeHyperdisk();

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

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

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

次のステップ