Hyperdisk ストレージ プールを作成する


Hyperdisk ストレージ プールは、Hyperdisk ブロック ストレージの集約管理に役立つ新しいブロック ストレージ リソースです。Hyperdisk ストレージ プールには Hyperdisk Throughput ストレージ プールと Hyperdisk Balanced ストレージ プールがあります。

ストレージ プールを作成するときに、次のプロパティを指定する必要があります。

  • ゾーン
  • ストレージ プールのタイプ
  • 容量のプロビジョニングの種類
  • プールにプロビジョニングされた容量
  • パフォーマンス プロビジョニング タイプ
  • プールにプロビジョニングされた IOPS とスループット

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 を使用して認証するをご覧ください。

    必要なロールと権限

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

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

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

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

    必要な権限

    ストレージ プールを作成するには、次の権限が必要です。

    • プロジェクトに対する compute.storagePools.create
    • プロジェクトに対する compute.storagePools.setLabels

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

    制限事項

    Hyperdisk ストレージ プールを作成する際は、次の制限事項に注意してください。

    リソースの上限:

    • 作成する Hyperdisk ストレージ プールにプロビジョニングされる容量は最大 1 PiB です。
    • 1 時間あたり最大 5 つのストレージ プールを作成できます。
    • 1 日に作成できるストレージ プールは 10 個までです。
    • プロジェクトごとに最大 10 個のストレージ プールを作成できます。
    • プールのプロビジョニング モデルは変更できません。標準容量のストレージ プールを大容量のストレージ プールに変更したり、大容量のストレージ プールを標準パフォーマンスのストレージ プールに変更することはできません。
    • ストレージ プールはゾーンリソースです。
    • ストレージ プールには最大 1,000 個のディスクを作成できます。
    • Hyperdisk ストレージ プールは Compute Engine でのみ使用できます。Cloud SQL インスタンスは Hyperdisk ストレージ プールを使用できません。
    • ストレージ プールのプロビジョニング容量またはパフォーマンスは 24 時間に 2 回まで変更できます。

    ストレージ プールのディスクの上限:

    • ストレージ プールの新しいディスクは、同じプロジェクトとゾーン内にのみ作成できます。
    • ストレージ プール内外にディスクを移動することはできません。ストレージ プール内外にディスクを移動するには、スナップショットからディスクを再作成する必要があります。詳細については、ディスクタイプを変更するをご覧ください。
    • ストレージ プールにブートディスクを作成するには、Hyperdisk Balanced ストレージ プールを使用する必要があります。
    • ストレージ プールはリージョン ディスクをサポートしていません。
    • ストレージ プールにディスクのクローンは作成できません。また、ディスクのインスタント スナップショットを作成することや、Persistent Disk の非同期レプリケーションを構成することもできません。
    • ストレージ プール内の Hyperdisk Balanced ディスクは、複数のコンピューティング インスタンスにアタッチできません。

    容量の範囲とプロビジョニングされたパフォーマンスの上限

    ストレージ プールを作成する際、プロビジョニングされた容量、IOPS、スループットはストレージ プールの上限で説明されている制限の対象となります。

    Hyperdisk ストレージ プールを作成する

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

    コンソール

    1. Google Cloud コンソールで [ストレージ プールの作成] ページに移動します。
      [ストレージ プールの作成] ページに移動
    2. [名前] フィールドに、ストレージ プールの一意の名前を入力します。
    3. 省略可: [説明] フィールドに、ストレージ プールの説明を入力します。
    4. ストレージ プールを作成するリージョンゾーンを選択します。
    5. [ストレージ プールのタイプ] の値を選択します。
    6. [容量のタイプ] フィールドでプロビジョニング タイプを選択し、ストレージ プールにプロビジョニングする容量を [ストレージ プール容量] フィールドで指定します。サイズは 10 TiB~1 PiB の範囲で指定できます。

      大容量のストレージ プールを作成するには、割り当ての増加をリクエストする必要があります。

    7. [パフォーマンス タイプ] フィールドでプロビジョニング タイプを選択します。

    8. Hyperdisk Balanced ストレージ プールの場合、[プロビジョニングされた IOPS] フィールドに、ストレージ プールにプロビジョニングする IOPS を入力します。

    9. Hyperdisk Throughput ストレージ プールまたは Hyperdisk Balanced Storage プールの場合、[プロビジョニングされたスループット] フィールドに、ストレージ プールにプロビジョニングするスループットを入力します。

    10. [送信] をクリックして、ストレージ プールを作成します。

    gcloud

    Hyperdisk ストレージ プールを作成するには、gcloud compute storage-pools create コマンドを使用します。

    gcloud compute storage-pools create NAME  \
        --zone=ZONE   \
        --storage-pool-type=STORAGE_POOL_TYPE   \
        --capacity-provisioning-type=CAPACITY_TYPE \
        --provisioned-capacity=POOL_CAPACITY   \
        --performance-provisioning-type=PERFORMANCE_TYPE \
        --provisioned-iops=IOPS   \
        --provisioned-throughput=THROUGHPUT   \
        --description=DESCRIPTION
    

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

    • NAME: 一意のストレージ プール名。
    • ZONE: ストレージ プールを作成するゾーン(例: us-central1-a)。
    • STORAGE_POOL_TYPE: ストレージ プールに保存するディスクのタイプ。指定できる値は hyperdisk-throughputhyperdisk-balanced です。
    • CAPACITY_TYPE: 省略可。ストレージ プール容量のプロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。
    • POOL_CAPACITY: 新しいストレージ プールにプロビジョニングする合計容量。デフォルトでは GiB で指定します。
    • PERFORMANCE_TYPE: 省略可。ストレージ プール容量のパフォーマンス プロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。
    • IOPS: ストレージ プールにプロビジョニングする IOPS。このフラグは、Hyperdisk Balanced ストレージ プールでのみ使用できます。
    • THROUGHPUT: ストレージ プールにプロビジョニングするスループット(Mbps)。
    • DESCRIPTION: 省略可。ストレージ プールを説明するテキスト文字列。

    REST

    storagePools.insert メソッドを使用して POST リクエストを作成し、Hyperdisk ストレージ プールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools
    
    {
        "name": "NAME",
        "description": "DESCRIPTION",
        "poolProvisionedCapacityGb": "POOL_CAPACITY",
        "storagePoolType": "projects/PROJECT_ID/zones/ZONE/storagePoolTypes/STORAGE_POOL_TYPE",
        "poolProvisionedIops": "IOPS",
        "poolProvisionedThroughput": "THROUGHPUT",
        "capacityProvisioningType": "CAPACITY_TYPE",
        "performanceProvisioningType": "PERFORMANCE_TYPE"
    }
    

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

    • PROJECT_ID: プロジェクト ID
    • ZONE: ストレージ プールを作成するゾーン(例: us-central1-a)。
    • NAME: ストレージ プールの名前。
    • DESCRIPTION: 省略可。ストレージ プールを説明するテキスト文字列。
    • POOL_CAPACITY: 新しいストレージ プールにプロビジョニングする合計容量。デフォルトでは GiB で指定します。
    • STORAGE_POOL_TYPE: ストレージ プールに保存するディスクのタイプ。指定できる値は hyperdisk-throughputhyperdisk-balanced です。
    • IOPS: 省略可。ストレージ プールにプロビジョニングする IOPS。このフラグは、Hyperdisk Balanced ストレージ プールでのみ使用できます。
    • THROUGHPUT: 省略可。ストレージ プールにプロビジョニングするスループット(Mbps)。
    • CAPACITY_TYPE: 省略可。ストレージ プール容量のプロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。
    • PERFORMANCE_TYPE: 省略可。ストレージ プール容量のパフォーマンス プロビジョニング タイプ。指定できる値は advancedstandard です。指定しない場合、値 advanced が使用されます。

    Go

    
    // createHyperdiskStoragePool creates a new Hyperdisk storage pool in the specified project and zone.
    func createHyperdiskStoragePool(w io.Writer, projectId, zone, storagePoolName, storagePoolType string) error {
    	// projectID := "your_project_id"
    	// zone := "europe-west4-b"
    	// storagePoolName := "your_storage_pool_name"
    	// storagePoolType := "projects/**your_project_id**/zones/europe-west4-b/diskTypes/hyperdisk-balanced"
    
    	ctx := context.Background()
    	client, err := compute.NewStoragePoolsRESTClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewStoragePoolsRESTClient: %v", err)
    	}
    	defer client.Close()
    
    	// Create the storage pool resource
    	resource := &computepb.StoragePool{
    		Name:                        proto.String(storagePoolName),
    		Zone:                        proto.String(zone),
    		StoragePoolType:             proto.String(storagePoolType),
    		CapacityProvisioningType:    proto.String("advanced"),
    		PerformanceProvisioningType: proto.String("advanced"),
    		PoolProvisionedCapacityGb:   proto.Int64(10240),
    		PoolProvisionedIops:         proto.Int64(10000),
    		PoolProvisionedThroughput:   proto.Int64(1024),
    	}
    
    	// Create the insert storage pool request
    	req := &computepb.InsertStoragePoolRequest{
    		Project:             projectId,
    		Zone:                zone,
    		StoragePoolResource: resource,
    	}
    
    	// Send the insert storage pool request
    	op, err := client.Insert(ctx, req)
    	if err != nil {
    		return fmt.Errorf("Insert storage pool request failed: %v", err)
    	}
    
    	// Wait for the insert storage pool operation to complete
    	if err = op.Wait(ctx); err != nil {
    		return fmt.Errorf("unable to wait for the operation: %w", err)
    	}
    
    	// Retrieve and return the created storage pool
    	storagePool, err := client.Get(ctx, &computepb.GetStoragePoolRequest{
    		Project:     projectId,
    		Zone:        zone,
    		StoragePool: storagePoolName,
    	})
    	if err != nil {
    		return fmt.Errorf("Get storage pool request failed: %v", err)
    	}
    
    	fmt.Fprintf(w, "Hyperdisk Storage Pool created: %v\n", storagePool.GetName())
    	return nil
    }
    

    Java

    
    import com.google.cloud.compute.v1.InsertStoragePoolRequest;
    import com.google.cloud.compute.v1.Operation;
    import com.google.cloud.compute.v1.StoragePool;
    import com.google.cloud.compute.v1.StoragePoolsClient;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    
    public class CreateHyperdiskStoragePool {
      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 storagePool.
        String zone = "europe-central2-b";
        // Name of the storagePool you want to create.
        String storagePoolName = "YOUR_STORAGE_POOL_NAME";
        // The type of disk you want to create. This value uses the following format:
        // "projects/%s/zones/%s/storagePoolTypes/hyperdisk-throughput|hyperdisk-balanced"
        String storagePoolType = "hyperdisk-balanced";
        // Optional: the capacity provisioning type of the storage pool.
        // The allowed values are advanced and standard. If not specified, the value advanced is used.
        String capacityProvisioningType = "advanced";
        // The total capacity to provision for the new storage pool, specified in GiB by default.
        long provisionedCapacity = 128;
        // the IOPS to provision for the storage pool.
        // You can use this flag only with Hyperdisk Balanced Storage Pools.
        long provisionedIops = 3000;
        // the throughput in MBps to provision for the storage pool.
        long provisionedThroughput = 140;
    
        createHyperdiskStoragePool(projectId, zone, storagePoolName, storagePoolType,
                capacityProvisioningType, provisionedCapacity, provisionedIops, provisionedThroughput);
      }
    
      // Creates a hyperdisk storagePool in a project
      public static StoragePool createHyperdiskStoragePool(String projectId, String zone,
                                                    String storagePoolName, String storagePoolType,
                                                    String capacityProvisioningType, long capacity,
                                                    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 (StoragePoolsClient client = StoragePoolsClient.create()) {
          // Create a storagePool.
          StoragePool resource = StoragePool.newBuilder()
                  .setZone(zone)
                  .setName(storagePoolName)
                  .setStoragePoolType(storagePoolType)
                  .setCapacityProvisioningType(capacityProvisioningType)
                  .setPoolProvisionedCapacityGb(capacity)
                  .setPoolProvisionedIops(iops)
                  .setPoolProvisionedThroughput(throughput)
                  .build();
    
          InsertStoragePoolRequest request = InsertStoragePoolRequest.newBuilder()
                  .setProject(projectId)
                  .setZone(zone)
                  .setStoragePoolResource(resource)
                  .build();
    
          // Wait for the insert disk operation to complete.
          Operation operation = client.insertAsync(request).get(1, TimeUnit.MINUTES);
    
          if (operation.hasError()) {
            System.out.println("StoragePool creation failed!");
            throw new Error(operation.getError().toString());
          }
    
          // Wait for server update
          TimeUnit.SECONDS.sleep(10);
    
          StoragePool storagePool = client.get(projectId, zone, storagePoolName);
    
          System.out.printf("Storage pool '%s' has been created successfully", storagePool.getName());
    
          return storagePool;
        }
      }
    }

    Node.js

    // Import the Compute library
    const computeLib = require('@google-cloud/compute');
    const compute = computeLib.protos.google.cloud.compute.v1;
    
    // Instantiate a storagePoolClient
    const storagePoolClient = new computeLib.StoragePoolsClient();
    // 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 storagePoolClient.getProjectId();
    // Name of the zone in which you want to create the storagePool.
    const zone = 'us-central1-a';
    // Name of the storagePool you want to create.
    // storagePoolName = 'storage-pool-name';
    // The type of disk you want to create. This value uses the following format:
    // "projects/{projectId}/zones/{zone}/storagePoolTypes/(hyperdisk-throughput|hyperdisk-balanced)"
    const storagePoolType = `projects/${projectId}/zones/${zone}/storagePoolTypes/hyperdisk-balanced`;
    // Optional: The capacity provisioning type of the storage pool.
    // The allowed values are advanced and standard. If not specified, the value advanced is used.
    const capacityProvisioningType = 'advanced';
    // The total capacity to provision for the new storage pool, specified in GiB by default.
    const provisionedCapacity = 10240;
    // The IOPS to provision for the storage pool.
    // You can use this flag only with Hyperdisk Balanced Storage Pools.
    const provisionedIops = 10000;
    // The throughput in MBps to provision for the storage pool.
    const provisionedThroughput = 1024;
    // Optional: The performance provisioning type of the storage pool.
    // The allowed values are advanced and standard. If not specified, the value advanced is used.
    const performanceProvisioningType = 'advanced';
    
    async function callCreateComputeHyperdiskPool() {
      // Create a storagePool.
      const storagePool = new compute.StoragePool({
        name: storagePoolName,
        poolProvisionedCapacityGb: provisionedCapacity,
        poolProvisionedIops: provisionedIops,
        poolProvisionedThroughput: provisionedThroughput,
        storagePoolType,
        performanceProvisioningType,
        capacityProvisioningType,
        zone,
      });
    
      const [response] = await storagePoolClient.insert({
        project: projectId,
        storagePoolResource: storagePool,
        zone,
      });
    
      let operation = response.latestResponse;
    
      // Wait for the create storage pool operation to complete.
      while (operation.status !== 'DONE') {
        [operation] = await zoneOperationsClient.wait({
          operation: operation.name,
          project: projectId,
          zone: operation.zone.split('/').pop(),
        });
      }
    
      console.log(`Storage pool: ${storagePoolName} created.`);
    }
    
    await callCreateComputeHyperdiskPool();

    次のステップ