ストレージ プールから VM にディスクを追加する


Hyperdisk ストレージ プールにディスクを作成してから、そのディスクを仮想マシン(VM)インスタンスにアタッチできます。また、VM の作成時にストレージ プールにディスクを作成することもできます。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、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 を使用して認証するをご覧ください。

必要なロールと権限

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

  • Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1
  • サービス アカウントとして実行できる VM インスタンスに接続する: サービス アカウント ユーザー(v1)(roles/iam.serviceAccountUser ロール)

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

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

必要な権限

ストレージ プールに Hyperdisk Balanced ディスクまたは Hyperdisk Throughput ディスクを作成するには、次の権限が必要です。

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

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

インスタンスの作成に必要な権限については、必要な権限をご覧ください。

制限事項

Hyperdisk ストレージ プールにディスクを作成する場合には、次の制限事項があります。

  • Hyperdisk Balanced ストレージ プールには Hyperdisk Balanced ディスクのみを作成できます。Hyperdisk Throughput ストレージ プールには Hyperdisk Throughput ディスクのみを作成できます。
  • ストレージ プールの新しいディスクは、同じプロジェクトとゾーン内にのみ作成できます。
  • ストレージ プールにブートディスクを作成するには、Hyperdisk Balanced ストレージ プールを使用する必要があります。
  • ストレージ プール内外にディスクを移動することはできません。ストレージ プール内外にディスクを移動するには、スナップショットからディスクを再作成する必要があります。詳細については、ディスクタイプを変更するをご覧ください。
  • ストレージ プールには最大 1,000 個のディスクを作成できます。
  • ストレージ プールはリージョン ディスクをサポートしていません。

プロビジョニングのオプション

Hyperdisk ストレージ プールのプロビジョニング タイプに応じて、ストレージ プールに作成する各ディスクの容量とパフォーマンスをプロビジョニングする方法を選択できます。

ディスク容量のプロビジョニング

大容量のストレージ プールを作成する場合は、シン プロビジョニングを使用できます。ストレージ プールには、プールのプロビジョニング容量を超えるサイズのディスクを作成できます。ストレージ プールの使用量は、プロビジョニングしたディスク容量ではなく、使用中のデータの合計量で定義されます。ディスクの合計容量は、大容量のストレージ プールのプロビジョニング容量の 500% までプロビジョニングできます。

標準容量のストレージ プールにディスクを作成する場合は、ストレージ プール内のすべてのディスクの合計サイズがストレージ プールのプロビジョニング容量に達するまでストレージ プールにディスクを作成します。標準容量のストレージ プール内のディスクは、ディスクの作成時に容量が消費される非プールディスクと同様に動作します。

プロビジョニングのパフォーマンス

高パフォーマンスのストレージ プールを作成する場合は、シン プロビジョニングを使用できます。ストレージ プールには、プールにプロビジョニングされたパフォーマンスを超える IOPS とスループットの合計量のディスクを作成できます。ストレージ プールで使用されるパフォーマンスは、各ディスクにプロビジョニングされたパフォーマンスの量ではなく、ディスクで使用される合計パフォーマンスによって定義されます。ディスクの合計パフォーマンスは、高パフォーマンスのストレージ プールにプロビジョニングされたパフォーマンスの 500% までプロビジョニングできます。

標準パフォーマンスのストレージ プールにディスクを作成する場合、ディスクにプロビジョニングする IOPS またはスループットは、Hyperdisk ストレージ プールで使用可能な IOPS またはスループットよりも小さくする必要があります。使用可能な IOPS またはスループットは、ストレージ プールにプロビジョニングされた量から、ストレージ プールで作成されたすべてのディスクで使用される量を差し引いた値になります。

前の段落のいずれかの条件を満たしていない場合、ストレージ プールに対するディスク作成リクエストは失敗し、ディスクは作成されません。

プロビジョニングされた IOPS が 100,000 の Hyperdisk Balanced ストレージ プールがあるとします。

標準パフォーマンスのプロビジョニング:

  • ストレージ プールに Hyperdisk Balanced ディスクを作成するときに、最大 100,000 の合計 IOPS をプロビジョニングできます。
  • Hyperdisk Balanced ストレージ プールのプロビジョニング済みパフォーマンスの 100,000 IOPS に対して課金されます。
  • ストレージ プールの外部で作成されたディスクと同様に、標準パフォーマンス ストレージ プールの Hyperdisk Balanced ディスクは、最大 3,000 のベースライン IOPS と 140 MiB/秒のベースライン スループットで自動的にプロビジョニングされます。このベースライン パフォーマンスは、ストレージ プールのプロビジョニング済みパフォーマンスにはカウントされません。ベースラインを超えるプロビジョニング済みのパフォーマンスでディスクをストレージ プールに追加した場合にのみ、ストレージ プールのプロビジョニング済みパフォーマンスに対してカウントされます。次に例を示します。

    • 3,000 IOPS でプロビジョニングされたディスクはプール IOPS を 0 個使用します。プールには他のディスクに使用できるプロビジョニング済みの IOPS が 100,000 個残っています。
    • 13,000 IOPS でプロビジョニングされたディスクは 10,000 プール IOPS を使用し、プールには 90,000 のプロビジョニング済み IOPS が残っており、ストレージ プールの他のディスクに割り当てることができます。

高パフォーマンス プロビジョニング:

  • ストレージ プールにディスクを作成するときに、最大 500,000 IOPS の Hyperdisk パフォーマンスをプロビジョニングできます。
  • ストレージ プールでプロビジョニングされた 100,000 IOPS に対して課金されます。
  • ストレージ プールに 5,000 IOPS の単一ディスク(Disk1)を作成した場合、ストレージ プールでプロビジョニングされた IOPS から IOPS は消費されません。ただし、ストレージ プールに作成された新しいディスクにプロビジョニングできる IOPS の量は 495,000 に増えています。
  • Disk1 がデータの読み取りと書き込みを開始し、1 分間に最大 5,000 IOPS を使用する場合、ストレージ プールのプロビジョニング済み IOPS から 5,000 IOPS が消費されます。同じストレージ プールで作成された他のディスクは、競合が発生することなく、同じ 1 分間に最大 95,000 IOPS の合計を使用できます。

ストレージ プールにディスクを作成する

ストレージ プールにディスクを作成するには、Google Cloud コンソール、Google Cloud CLI、または REST を使用します。

コンソール

Google Cloud コンソールの [ストレージ プール] ページまたは [ディスク] ページで、ストレージ プールに新しいディスクを作成できます。

[ストレージ プール] ページで次の操作を行います。

  1. Google Cloud コンソールで、[ストレージ プール] ページに移動します。

    [ストレージ プール] ページに移動

  2. ディスクを作成するストレージ プールの名前をクリックします。

  3. [ストレージ プールの管理] ページで、[+ ディスクの新規作成] をクリックします。

  4. [新しいディスクを追加] パネルで、ディスクの名前を入力します。

  5. デフォルト値を使用しない場合は、値を指定または変更します。

  6. ディスク プロパティの指定が終わったら、[保存] をクリックします。

  7. [ストレージ プールの管理] ページの [ストレージ プール ディスク] セクションに、新しいディスクが表示されます。

[ディスクの作成] ページで、次の操作を行います。

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

    [ディスクの作成] ページに移動

  2. ディスクの名前を入力します。

  3. ディスクを作成するストレージ プールを含むゾーンを選択します。

  4. [ディスクタイプ] で、Hyperdisk ストレージ プールに一致するディスクタイプ(Hyperdisk Throughput または Hyperdisk Balanced)を選択します。

  5. 必要に応じて、[サイズ]、[プロビジョニングされた IOPS]、[プロビジョニングされたスループット] の値を変更します。

  6. [ストレージ プール] セクションで、[ストレージ プールを有効にする] を選択し、ディスクを作成するストレージ プールの名前を選択します。選択したゾーンに存在するストレージ プールのみがリストに表示されます。

  7. ディスク情報の指定が完了したら、[作成] をクリックします。

gcloud

ストレージ プールに 1 つ以上のディスクを作成するには、gcloud compute disks create コマンドを使用します。

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --storage-pool=STORAGE_POOL_NAME \
    --size=SIZE \
    --type=DISK_TYPE \
    --provisioned-iops=PROVISIONED_IOPS \
    --provisioned-throughput=PROVISIONED_THROUGHPUT

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

  • DISK_NAME: ディスクの一意の名前。スペースで区切られたディスク名のリストを指定して、同じ属性を持つ複数のディスクを作成できます。
  • ZONE: ストレージ プールが作成されたゾーン。この値は、リージョン-ゾーン形式(us-central1-a など)で指定します。
  • STORAGE_POOL_NAME: ディスクを作成するストレージ プールの名前
  • SIZE: 省略可。新しいディスクのプロビジョニングされる容量。この値は整数で、その後に GiB(ギビバイト)または TiB(テビバイト)のサイズ単位が続きます。サイズが指定されていない場合、デフォルト値として 100 GB が使用されます。
  • DISK_TYPE: 作成するディスクのタイプ。これは、Hyperdisk ストレージ プールのタイプ(hyperdisk-balanced または hyperdisk-throughput)と一致する必要があります。
  • PROVISIONED_IOPS: 省略可。ディスクのプロビジョニングされる IOPS。このフラグは、Hyperdisk Balanced ディスクでのみ使用できます。
  • PROVISIONED_THROUGHPUT: 省略可。ディスクにプロビジョニングされるスループット。単位は、1 秒あたりのメビバイト(MiB)です。

REST

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks

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

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: ストレージ プールが配置されているゾーン(例: us-central1-a)。これはディスクが作成されるゾーンです。
  • DISK_NAME: ディスクの一意の名前。
  • DESCRIPTION: 省略可。ディスクを説明するテキスト文字列。
  • DISK_TYPE: ディスクのタイプ。ストレージ プールのタイプと一致する必要があります。hyperdisk-throughput または hyperdisk-balanced を使用します。
  • DISK_SIZE: 省略可。新しいディスクのサイズ。この値は整数で、その後に GiB(ギビバイト)または TiB(テビバイト)のサイズ単位が続きます。サイズが指定されていない場合、デフォルト値として 100 GB が使用されます。
  • STORAGE_POOL_NAME: ディスクを作成するストレージ プールの名前。
  • IOPS_LIMIT: 省略可。ディスクのプロビジョニングされる IOPS。このフラグは、Hyperdisk Balanced ディスクでのみ使用できます。
  • THROUGHPUT_LIMIT: 省略可。ディスクにプロビジョニングされるスループット。単位は MiB/秒です。

Go


// createDiskInStoragePool creates a new Hyperdisk in the specified storage pool.
func createDiskInStoragePool(w io.Writer, projectId, zone, diskName, storagePoolName, diskType string) error {
	// Example usage:
	//   projectID := "your_project_id"
	//   zone := "europe-central2-b"
	//   diskName := "your_disk_name"
	//   storagePoolName := "https://www.googleapis.com/compute/v1/projects/your_project_id/zones/europe-central2-b/storagePools/your_storage_pool"
	//   diskType := "zones/europe-central2-b/diskTypes/hyperdisk-balanced"

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

	// Create the disk resource
	disk := &computepb.Disk{
		Name:                  proto.String(diskName),
		Type:                  proto.String(diskType),
		SizeGb:                proto.Int64(50),
		Zone:                  proto.String(zone),
		StoragePool:           proto.String(storagePoolName),
		ProvisionedIops:       proto.Int64(10000),
		ProvisionedThroughput: proto.Int64(1024),
	}

	// Create the insert disk request
	req := &computepb.InsertDiskRequest{
		Project:      projectId,
		Zone:         zone,
		DiskResource: disk,
	}

	// Send the insert disk request
	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, "Disk created in storage pool: %v\n", disk.Name)
	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 CreateDiskInStoragePool {
  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";
    // Link to the storagePool you want to use. Use format :
    // https://www.googleapis.com/compute/v1/projects/%s/zones/%s/storagePools/%s"
    String storagePoolName = "YOUR_STORAGE_POOL_LINK";
    // The type of disk you want to create. This value uses the following format:
    // "zones/{zone}/diskTypes/(hyperdisk-balanced|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: the IOPS to provision for the disk.
    // You can use this flag only with Hyperdisk Balanced disks.
    long provisionedIops = 3000;
    // Optional: the throughput in mebibyte (MB) per second to provision for the disk.
    long provisionedThroughput = 140;

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

  // Creates a hyperdisk in the storage pool
  public static Disk createDiskInStoragePool(String projectId, String zone, String diskName,
                                             String storagePoolName, String diskType,
                                             long diskSizeGb, long iops, long throughput)
          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)
              .setStoragePool(storagePoolName)
              .setProvisionedIops(iops)
              .setProvisionedThroughput(throughput)
              .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 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.
const zone = 'us-central1-a';
// The name of the new disk
const diskName = 'disk-from-pool-name';
// The name of the storage pool
const storagePoolName = 'storage-pool-name';
// Link to the storagePool you want to use. Use format:
// https://www.googleapis.com/compute/v1/projects/{projectId}/zones/{zone}/storagePools/{storagePoolName}
const storagePool = `https://www.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/storagePools/${storagePoolName}`;
// 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 callCreateComputeHyperdiskFromPool() {
  // Create a disk
  const disk = new compute.Disk({
    sizeGb: diskSizeGb,
    name: diskName,
    type: diskType,
    zone,
    storagePool,
    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(),
    });
  }

  const hyperdisk = (
    await disksClient.get({
      project: projectId,
      zone,
      disk: diskName,
    })
  )[0];

  console.log(JSON.stringify(hyperdisk));
}

await callCreateComputeHyperdiskFromPool();

ディスクを作成したら、ディスクを VM にアタッチできます。

ストレージ プールのディスクを使用する VM を作成する

VM を作成するときにブートディスクを構成します。必要に応じて、VM に自動的にアタッチされる追加のデータディスク(非ブートディスク)を作成できます。以降のセクションでは、VM 作成プロセスの一環としてストレージ プールに各タイプのディスクを作成する方法について説明します。

ストレージ プールに VM のブートディスクを作成する

ストレージ プールのブートディスクを使用する VM を作成するには、まず Hyperdisk Balanced ストレージ プールを作成する必要があります。その後、Hyperdisk Balanced ディスクをサポートするマシンタイプを使用して VM を作成できます。マシンタイプ、ディスクタイプ、ストレージ プールはすべて、選択したゾーンで使用可能である必要があります。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

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

  2. [インスタンスを作成] をクリックします。

  3. インスタンスの名前を入力します。

  4. ストレージ プールが配置されているゾーンを設定します。

  5. Hyperdisk Balanced をサポートするマシンタイプ(H3 など)を選択します。

  6. [ブートディスク] セクションで、[変更] をクリックします。

  7. [ブートディスク] パネルで、[ブートディスクの種類] を [Hyperdisk Balanced] に設定します。

  8. ディスクのプロパティを構成します。

  9. [詳細構成を表示] を開きます。

  10. [ストレージ プール] で、[ストレージ プールを有効にする] を選択します。

  11. ディスクを作成するストレージ プールをリストから選択します。

  12. ディスクの構成が完了したら、[選択] をクリックします。

  13. VM プロパティの構成を完了します。

  14. [作成] をクリックします。

    指定したゾーンに VM が作成され、選択したストレージ プールにブートディスクが作成されます。

gcloud

gcloud compute instances create コマンドを使用すると、ブートディスクの storage-pool プロパティを指定して、ストレージ プールに新しい VM 用のブートディスクを作成できます。

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

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

  • VM_NAME: VM の名前。
  • ZONE: VM を作成するリージョンとゾーン(us-central1-a 形式)
  • MACHINE_TYPE: VM のマシンタイプ(例: m3-ultramem-32
  • DISK_SIZE: 新しいディスクのサイズ(GiB 単位)
  • THROUGHPUT: ディスクにプロビジョニングされるスループット
  • IOPS: ディスクにプロビジョニングされる IOPS
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 次のいずれかを指定します。
    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240213
    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/debian-12 を指定すると、Compute Engine は debian-12 イメージ ファミリーの OS イメージの最新バージョンを使用して VM を作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
  • STORAGE_POOL_NAME: 新しいディスクを作成するストレージ プールの名前。

REST

instances.insert メソッドPOST リクエストを作成し、ブートディスクの storagePool プロパティを指定して、ストレージ プールに新しい VM 用のブートディスクを作成できます。

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

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
         "deviceName": "BOOT_DISK_DEVICE_NAME",
         "initializeParams": {
            "diskSizeGb": "DISK_SIZE",
            "diskType": "DISK_TYPE",
            "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            "boot": true,
            "provisionedIops": "IOPS_LIMIT",
            "provisionedThroughput": "THROUGHPUT_LIMIT",
            "storagePool": "POOL_URL"
         }
      }
   ]
}

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: ストレージ プールが配置されているゾーン(例: us-central1-a)。VM とブートディスクが作成されるゾーン。
  • VM_NAME: VM の名前。
  • MACHINE_TYPE: VM のマシンタイプ(例: m3-ultramem-32
  • BOOT_DISK_DEVICE_NAME: ブートディスクのデバイス名
  • DISK_SIZE: 新しいディスクのサイズ(GiB 単位)
  • DISK_TYPE: URI として指定されたディスクタイプ
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 次のいずれかを指定します。
    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240213
    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/debian-12 を指定すると、Compute Engine は debian-12 イメージ ファミリーの OS イメージの最新バージョンを使用して VM を作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
  • IOPS_LIMIT: ディスクにプロビジョニングされる IOPS
  • THROUGHPUT_LIMIT: ディスクにプロビジョニングされるスループット
  • POOL_URL: 新しいディスクが作成されるストレージ プール。リソースの部分 URL または完全 URL として指定できます。たとえば、有効な値は次のとおりです。
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

VM の作成時にストレージ プールに追加ディスクを作成する

VM の作成時にストレージ プールにディスクを作成する場合、選択したゾーンでマシンタイプ、ディスクタイプ、ストレージ プールが使用可能である必要があります。

コンソール

コンソールを使用して、追加の非ブートディスクを含む新しい VM を作成するには、次の操作を行います。

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

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

  2. [インスタンスを作成] をクリックします。

  3. VM の名前を入力します。

  4. ストレージ プールが配置されているゾーンを設定します。

  5. ストレージ プールで使用されるディスクタイプをサポートするマシンタイプを選択します。

  6. [詳細オプション] セクションを開きます。

  7. [ディスク] を開きます。

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

  9. [新しいディスクを追加] パネルで、ディスクに関する情報を入力します。[ディスクタイプ] をストレージ プールのタイプに合わせて設定します。

  10. [ストレージ プール] セクションで、[ストレージ プールを有効にする] を選択します。

  11. [ストレージ プールの選択] フィールドで、ディスクを作成するストレージ プールを選択します。

  12. ディスクの構成が完了したら、[保存] をクリックします。

  13. VM プロパティの構成を完了します。

  14. [作成] をクリックします。

    指定したゾーンに VM が作成され、選択したストレージ プールに非ブートディスクが作成されます。

gcloud

VM の作成時にストレージ プールに新しいディスクを作成するには、gcloud compute instances create コマンドを使用して、ディスクの storage-pool プロパティを指定します。

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=auto-delete=yes,boot=yes,device-name=BOOT_DISK_DEVICE_NAME,image=IMAGE_NAME, \
    size=BOOT_DISK_SIZE,type=BOOT_DISK_TYPE
    --create-disk=auto-delete=yes,boot=no,device-name=DATA_DISK_DEVICE_NAME,size=DATA_DISK_SIZE, \
    type=DATA_DISK_TYPE,provisioned-iops=IOPS,provisioned-throughput=THROUGHPUT, \
    storage_pool=STORAGE_POOL_NAME

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

  • VM_NAME: VM の名前。
  • ZONE: VM を作成するリージョンとゾーン(us-central1-a 形式)
  • MACHINE_TYPE: 新しい VM のマシンタイプ
  • BOOT_DISK_DEVICE_NAME: ブートディスクのデバイス名
  • IMAGE_NAME: ブートディスクにインストールするオペレーティング システム イメージの名前(例: debian-12-bookworm-v20240213
  • BOOT_DISK_SIZE: 新しいディスクのサイズ(GiB 単位)
  • BOOT_DISK_TYPE: ディスクタイプ
  • DATA_DISK_DEVICE_NAME: データディスクのディスク デバイス名
  • DATA_DISK_SIZE: ブートディスクのサイズ(GiB 単位)
  • DATA_DISK_TYPE: データディスクのタイプ(hyperdisk-balanced または hyperdisk-throughput
  • IOPS: ディスクにプロビジョニングされる IOPS
  • THROUGHPUT: ディスクにプロビジョニングされるスループット
  • STORAGE_POOL_NAME: ディスクを作成するストレージ プールの一意の名前。

REST

VM の作成時にストレージ プールに新しいディスクを作成するには、instances.insert メソッドに対する POST リクエストを作成し、追加ディスクの storagePool プロパティを指定します。

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

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
        "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
        },
        "boot":true
      },
      {
        "deviceName": "DEVICE_NAME",
        "boot":false,
        "initializeParams": {
           "diskSizeGb": "DISK_SIZE",
           "diskType": "DISK_TYPE",
           "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
           "provisionedIops": "IOPS_LIMIT",
           "provisionedThroughput": "THROUGHPUT_LIMIT",
           "storagePool": "POOL_URL"
        }
      }
   ]
}

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: ストレージ プールが配置されているゾーン(例: us-central1-a)。VM とブートディスクが作成されるゾーン。
  • VM_NAME: VM の名前。
  • MACHINE_TYPE: VM のマシンタイプ(例: m3-ultramem-32
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 次のいずれかを指定します。
    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240213
    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/debian-12 を指定すると、Compute Engine は debian-12 イメージ ファミリーの OS イメージの最新バージョンを使用して VM を作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
  • DEVICE_NAME: データディスクのデバイス名
  • DISK_SIZE: 新しいデータディスクのサイズ(GiB 単位)
  • DISK_TYPE: URI として指定されたディスクタイプ
  • IOPS_LIMIT: ディスクにプロビジョニングされる IOPS
  • THROUGHPUT_LIMIT: ディスクにプロビジョニングされるスループット
  • POOL_URL: 新しいディスクが作成されるストレージ プール。リソースの部分 URL または完全 URL として指定できます。たとえば、有効な値は次のとおりです。
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

インスタンス テンプレートでストレージ プールを使用する

マネージド インスタンス グループ(MIG)の作成に使用されるインスタンス テンプレートには、ストレージ プール情報を含めることができます。インスタンス テンプレートを使用して作成されたディスクは、指定されたストレージ プールに配置されます。

コンソール

  1. Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. インスタンス テンプレートの名前を入力します。

  4. ロケーションに [リージョン] を選択し、[リージョン] フィールドでストレージ プールが配置されているリージョンを選択します。

  5. Hyperdisk Balanced をサポートするマシンタイプ(C3 など)を選択します。

  6. [ブートディスク] セクションで、[変更] をクリックします。

  7. [ブートディスク] パネルで、[ブートディスクの種類] を [Hyperdisk Balanced] に設定します。

  8. ディスクのプロパティを構成します。

  9. [詳細構成を表示] を開きます。

  10. [ストレージ プール] で、[ストレージ プールを有効にする] を選択します。

  11. ディスクを作成するストレージ プールをリストから選択します。

  12. ディスクの構成が完了したら、[選択] をクリックします。

  13. VM プロパティの構成を完了します。

  14. [作成] をクリックします。

    指定したゾーンに VM が作成され、選択したストレージ プールにブートディスクが作成されます。

gcloud

gcloud compute instance-templates create コマンドを使用し、次の storage-pool プロパティを含めることで、ストレージ プールにブートディスクを作成することをインスタンス テンプレートに指定できます。

gcloud compute instance-templates create TEMPLATE_NAME \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

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

  • TEMPLATE_NAME: インスタンス テンプレートの名前。
  • REGION: リージョン インスタンス テンプレートを作成するリージョン。リージョンには、ストレージ プールが配置されているゾーンが含まれている必要があります。
  • MACHINE_TYPE: VM の作成時に使用するマシンタイプ(例: h3-standard-88)。
  • DISK_SIZE: ディスクのサイズ(GiB 単位)
  • THROUGHPUT: ディスクにプロビジョニングされるスループット
  • IOPS: ディスクにプロビジョニングされる IOPS
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 次のいずれかを指定します。
    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240213
    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/debian-12 を指定すると、Compute Engine は debian-12 イメージ ファミリーの OS イメージの最新バージョンを使用して VM を作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
  • STORAGE_POOL_NAME: 新しいディスクを作成するストレージ プールの名前。

REST

instances.insert メソッドPOST リクエストを作成し、ブートディスクの storagePool プロパティを指定して、ストレージ プールに新しい VM 用のブートディスクを作成できます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
         "deviceName": "BOOT_DISK_DEVICE_NAME",
         "initializeParams": {
            "diskSizeGb": "DISK_SIZE",
            "diskType": "DISK_TYPE",
            "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            "boot": true,
            "provisionedIops": "IOPS_LIMIT",
            "provisionedThroughput": "THROUGHPUT_LIMIT",
            "storagePool": "POOL_URL"
         }
      }
   ]
}

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

  • PROJECT_ID: プロジェクト ID
  • VM_NAME: VM の名前。
  • ZONE: ストレージ プールが配置されているゾーン(例: us-central1-a)。VM とブートディスクが作成されるゾーン。
  • MACHINE_TYPE: VM のマシンタイプ(例: m3-ultramem-32
  • BOOT_DISK_DEVICE_NAME: ブートディスクのデバイス名
  • DISK_SIZE: 新しいディスクのサイズ(GiB 単位)
  • DISK_TYPE: URI として指定されたディスクタイプ
  • IMAGE_PROJECT: イメージを含むプロジェクト
  • IMAGE: 次のいずれかを指定します。
    • OS イメージの特定のバージョン。例: debian-12-bookworm-v20240213
    • イメージ ファミリーfamily/IMAGE_FAMILY の形式にする必要があります。これにより、非推奨ではない最新の OS イメージからインスタンスが作成されます。たとえば、family/debian-12 を指定すると、Compute Engine は debian-12 イメージ ファミリーの OS イメージの最新バージョンを使用してインスタンスを作成します。イメージ ファミリーの使用の詳細については、イメージ ファミリーのベスト プラクティスをご覧ください。
  • IOPS_LIMIT: ディスクにプロビジョニングされる IOPS
  • THROUGHPUT_LIMIT: ディスクにプロビジョニングされるスループット
  • POOL_URL: 新しいディスクが作成されるストレージ プール。リソースの部分 URL または完全 URL として指定できます。たとえば、有効な値は次のとおりです。
    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME