インスタンスの作成

Bigtable インスタンスは、Bigtable クラスタのコンテナです。複数のクラスタがあるインスタンスは、レプリケーションを使用します。最大 8 つのリージョンにクラスタを作成できます。各リージョンには、ゾーンと同じ数のクラスタを作成できます。

このページでは、インスタンスを作成する方法について説明します。 このページを読む前に、Bigtable の概要を理解する必要があります。また、インスタンス、クラスタ、ノードの概要についても理解する必要があります。

始める前に

環境の準備:

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Bigtable API, Cloud Bigtable Admin API APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Bigtable API, Cloud Bigtable Admin API APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 次のコマンドを実行して cbt CLI をインストールします。
    gcloud components install cbt

構成の計画:

  1. レプリケーションを有効にする場合は、次の操作を行います。

  2. オプション: デフォルトの Google 管理の暗号化の代わりに顧客管理の暗号鍵(CMEK)を使用する場合は、CMEK 対応インスタンスの作成を完了し、新しいインスタンスを作成する前に CMEK 鍵 ID を用意しておきます。作成後のインスタンスに CMEK による保護を追加することはできません。また、インスタンスの作成後に CMEK 鍵の変更や置換を行うことはできません。

インスタンスの作成

Bigtable インスタンスを作成するには:

コンソール

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

    [インスタンスの作成] に移動

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

    Google Cloud コンソールには、この名前がインスタンスの識別のために表示されます。

  3. インスタンス ID を入力します。

    インスタンス ID は、インスタンスの永続的な識別子です。

  4. [続行] をクリックします。

  5. クラスタで使用するディスクタイプ(SSD または HDD)を選択します。ほとんどの場合、SSD が最適です。この選択は永続的に適用されます。詳細

  6. [続行] をクリックします。

  7. 最初のクラスタのクラスタ ID を入力します。

    クラスタ ID は、クラスタの永続的な識別子です。

  8. 最初のクラスタを実行するリージョンとゾーンを選択します。

  9. クラスタのノード スケーリング モードを選択します。ほとんどの場合、自動スケーリングを選択する必要があります。スケーリングのガイダンスについては、自動スケーリングをご覧ください。

    1. [手動ノード割り当て] で、最初のクラスタの Bigtable ノード数を入力します。必要なノードの数がわからない場合は、デフォルトの設定を使用します。後でノードを追加することもできます。
    2. [自動スケーリング] に次の値を入力します。
      • ノードの最小
      • ノードの最大
      • CPU 使用率の目標値
      • ストレージ使用率の目標値
  10. (省略可)デフォルトの Google 管理の暗号化ではなく CMEK を使用してインスタンスを保護する場合は、次の操作を行います。

    1. [暗号化オプションを表示する] をクリックします。
    2. [顧客管理の暗号鍵(CMEK)] の横にあるラジオボタンを選択します。
    3. クラスタに使用する CMEK 鍵のリソース名を選択または入力します。これは後から追加できません。
    4. CMEK 鍵のサービス アカウントに権限を付与するように求められたら、[付与] をクリックします。このタスクを完了するには、ユーザー アカウントに Cloud KMS 管理者のロールが付与されている必要があります。
    5. [保存] をクリックします。
  11. (省略可)レプリケーションを直ちに有効にするには、次の追加の手順を行います。

    1. [詳細設定を表示] をクリックします。
    2. [クラスタを追加] をクリックし、クラスタの設定を入力して、[追加] をクリックします。この手順を繰り返して、インスタンスに追加のクラスタを作成します。また、クラスタを追加してレプリケーションを有効にすることもできます。

    リージョン内の各ゾーンにはクラスタを 1 つしか含めることができません。[クラスタを追加] ボタンが無効になっている場合は、最初のクラスタのゾーンを変更します。

    6 つ以上のクラスタが含まれるインスタンスを作成するには、6 つのクラスタを持つインスタンスを作成してから、そのインスタンスにさらにクラスタを追加します。

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

  13. デフォルトのアプリ プロファイルでレプリケーションの設定を見直して、それらの設定がレプリケーションのユースケースに適しているかどうかを確認します。デフォルトのアプリ プロファイルの更新カスタムアプリ プロファイルの作成が必要になることがあります。

gcloud

  1. bigtable instances create コマンドを使用して、インスタンスを作成します。

    gcloud bigtable instances create INSTANCE_ID \
        --display-name=DISPLAY_NAME \
        [--cluster-storage-type=CLUSTER_STORAGE_TYPE] \
        [--cluster-config=id=CLUSTER_ID,zone=CLUSTER_ZONE, \
        nodes=NODES] \
        [--cluster-config=id=CLUSTER_ID,zone=CLUSTER_ZONE, \
        autoscaling-min-nodes=AUTOSCALING_MIN_NODES, \
        autoscaling-max-nodes=AUTOSCALING_MAX_NODES, \
        autoscaling-cpu-target=AUTOSCALING_CPU_TARGET, \
        autoscaling-storage-target=AUTOSCALING_STORAGE_TARGET, \
        kms-key=KMS_KEY]
    

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

    • INSTANCE_ID: インスタンスの永続的な識別子。
    • DISPLAY_NAME: Google Cloud コンソールでインスタンスを識別するための判読可能な名前。
    • CLUSTER_ID: クラスタの永続的な識別子。
    • CLUSTER_ZONE: クラスタが実行されるゾーン

    --cluster-config フラグを使用して、インスタンスに対して少なくとも 1 つのクラスタを構成する必要があります。複数のクラスタを持つインスタンスを作成するには、クラスタごとに --cluster-config フラグを繰り返し指定します。

    手動ノード割り当ての場合、--cluster-config フラグでの nodes の設定は任意です。値が設定されていない場合、Bigtable はデータ フットプリントに基づいてノードをクラスタに自動的に割り当て、ストレージ使用率が 50% になるように最適化します。このノードの自動割り当ては料金に影響します。クラスタ内のノード数を制御する場合は、NODES をクラスタに含めるノード数に置き換えます。ノードの詳細をご確認ください

    ほとんどの場合、手動ノード割り当てではなく自動スケーリングを選択します。 自動スケーリングの場合は、--cluster-config フラグに autoscaling- オプションを指定します(autoscaling-storage-target は省略可能)。nodes は使用しません。自動スケーリング設定の値の選択方法については、自動スケーリングをご覧ください。cluster-config オプションキーを次のように置き換えます。

    • AUTOSCALING_MIN_NODES: クラスタの最小ノード数。
    • AUTOSCALING_MAX_NODES: クラスタノードの最大数。
    • AUTOSCALING_CPU_TARGET: クラスタのターゲット CPU 使用率(パーセント)。値は 10~80 にする必要があります。
    • AUTOSCALING_STORAGE_TARGET: (省略可)ノードを追加または削除することで Bigtable が維持するストレージ使用率の目標値(GiB 単位)。
    • KMS_KEY: クラスタの CMEK 鍵。

      KMS_KEY 値は次の形式にする必要があります。

      projects/PROJECT/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY
      
      

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

      • PROJECT: プロジェクトの永続的な識別子
      • LOCATION: クラスタのロケーション
      • KEYRING: 鍵を含むキーリングの名前
      • KEY: 鍵の名前

      次に例を示します。

      projects/examplestore.com:dev/locations/us-east1/keyRings/devt-cmek-2/cryptoKeys/key2

      インスタンスが CMEK で保護されている場合、各クラスタは CMEK 鍵と同じリージョンに存在する必要があります。CMEK クラスタは、すでに CMEK で保護されているインスタンスにのみ追加できます。詳細

    コマンドには、以下の任意のフラグを指定できます。

    • --cluster-storage-type=CLUSTER_STORAGE_TYPE: インスタンスで使用するストレージのタイプ。 デフォルト値は SSD です。ほとんどの場合、デフォルト値が最適です。この選択は永続的に適用されます。詳細

    • --project=PROJECT: クラスタを作成するプロジェクト(現在のプロジェクトと異なる場合)。

  2. デフォルトのアプリ プロファイルでレプリケーションの設定を見直して、それらの設定がレプリケーションのユースケースに適しているかどうかを確認します。デフォルトのアプリ プロファイルの更新カスタムアプリ プロファイルの作成が必要になることがあります。

cbt

  1. 最初に、クラスタが 1 つのインスタンスを作成します。createinstance コマンドを使用して、インスタンスを作成します。

    cbt createinstance INSTANCE_ID \
        DISPLAY_NAME \
        CLUSTER_ID \
        CLUSTER_ZONE \
        CLUSTER_NUM_NODES \
        CLUSTER_STORAGE_TYPE
    

    次のフィールドを入力します。

    • INSTANCE_ID: インスタンスの永続的な識別子。
    • DISPLAY_NAME: Google Cloud コンソールでインスタンスを識別するための判読可能な名前。
    • CLUSTER_ID: クラスタの永続的な識別子。
    • CLUSTER_ZONE: クラスタが実行されるゾーン
    • CLUSTER_NUM_NODES: このフィールドは省略可能です。値が設定されていない場合、Bigtable はデータ使用量に基づいてノードを自動的に割り当て、50% のストレージ使用率になるよう最適化します。クラスタ内のノード数を制御する場合は、CLUSTER_NUM_NODES の値を更新します。ノード数がゼロ以外の値に設定されていることを確認します。ノードの詳細をご確認ください
    • CLUSTER_STORAGE_TYPE: クラスタで使用するストレージのタイプ。インスタンス内の各クラスタは、同じストレージ タイプを使用する必要があります。指定できる値は SSDHDD です。ほとんどの場合、SSD が最適です。この選択は永続的に適用されます。詳細
  2. レプリケーションを有効にするには、createcluster コマンドを使用してクラスタを追加します。

    
    cbt -instance=INSTANCE_ID \
    createcluster CLUSTER_ID \
    ZONE \
    NUM_NODES \
    STORAGE_TYPE
    
    

    次のフィールドを入力します。

    • INSTANCE_ID: 作成したインスタンスの永続的な識別子。
    • CLUSTER_ID: クラスタの永続的な識別子。
    • ZONE: クラスタが実行されるゾーン

      各リージョン内のそれぞれのゾーンに配置できるクラスタは 1 つのみです。 たとえば、インスタンスのクラスタが us-east1-b にある場合は、同じリージョン内の別のゾーン(例 us-east1-c)、または別のリージョンのゾーン(例: europe-west2-a)にクラスタを追加できます。

    • NUM_NODES: このフィールドは省略可能です。値が設定されていない場合、Bigtable はデータ使用量に基づいてノードを自動的に割り当て、50% のストレージ使用率になるよう最適化します。クラスタ内のノード数を制御する場合は、NUM_NODES の値を更新します。ノード数がゼロ以外の値に設定されていることを確認します。

      多くの場合、インスタンス内の各クラスタのノード数は同じである必要がありますが、例外もあります。ノードとレプリケーションの詳細をご覧ください。

    • STORAGE_TYPE: クラスタで使用するストレージのタイプ。インスタンス内の各クラスタは、同じストレージ タイプを使用する必要があります。指定できる値は SSDHDD です。

  3. (省略可) デフォルトのアプリ プロファイルでレプリケーションの設定を見直して、それらの設定がレプリケーションのユースケースに適しているかどうかを確認します。デフォルトのアプリ プロファイルの更新カスタムアプリ プロファイルの作成が必要になることがあります。

C++

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

namespace cbta = ::google::cloud::bigtable_admin;
using ::google::cloud::future;
using ::google::cloud::Location;
using ::google::cloud::Project;
using ::google::cloud::StatusOr;
[](cbta::BigtableInstanceAdminClient instance_admin,
   std::string const& project_id, std::string const& instance_id,
   std::string const& zone) {
  auto const project = Project(project_id);
  std::string project_name = project.FullName();
  std::string cluster_id = instance_id + "-c1";

  google::bigtable::admin::v2::Instance in;
  in.set_type(google::bigtable::admin::v2::Instance::PRODUCTION);
  in.set_display_name("Put description here");

  google::bigtable::admin::v2::Cluster cluster;
  cluster.set_location(Location(project, zone).FullName());
  cluster.set_serve_nodes(3);
  cluster.set_default_storage_type(google::bigtable::admin::v2::HDD);

  std::map<std::string, google::bigtable::admin::v2::Cluster> cluster_map = {
      {cluster_id, std::move(cluster)}};

  future<StatusOr<google::bigtable::admin::v2::Instance>> instance_future =
      instance_admin.CreateInstance(project_name, instance_id, std::move(in),
                                    std::move(cluster_map));
  // Show how to perform additional work while the long running operation
  // completes. The application could use future.then() instead.
  std::cout << "Waiting for instance creation to complete " << std::flush;
  instance_future.wait_for(std::chrono::seconds(1));
  std::cout << '.' << std::flush;
  auto instance = instance_future.get();
  if (!instance) throw std::move(instance).status();
  std::cout << "DONE, details=" << instance->DebugString() << "\n";
}

C#

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// Creates a production instance with "<intanceId>-prod" instance ID,
// with cluster ID "ssd-cluster1", 3 nodes and location us-east1-b.
displayName += " Prod"; // Display name is for display purposes only. It doesn't have to equal instanceId and can be amended after instance is created.
string instanceId = Regex.Replace(displayName, @"[^A-Za-z0-9_\.~]+", "-").ToLower();

// Please refer to the link below for the full list of available locations:
// https://cloud.google.com/bigtable/docs/locations
string zone1 = "us-east1-b";

// The instance to create.
Instance myInstance = new Instance
{
    DisplayName = displayName,
    // You can choose DEVELOPMENT or PRODUCTION type here.
    // If not set, will default to PRODUCTION type.
    // Instance type can be upgraded from DEVELOPMENT to PRODUCTION but cannot be dowgraded after the instance is created.
    Type = Instance.Types.Type.Production,
    Labels = { { "prod-label", "prod-label" } }
};

// The first cluster to be created within the instance.
Cluster myCluster1 = new Cluster
{
    // You can choose SSD or HDD storage type here: StorageType.Ssd or StorageType.Hdd.
    // Cluster storage type can not be changed after the instance is created.
    // If not set will default to SSD type.
    DefaultStorageType = StorageType.Ssd,
    LocationAsLocationName = new LocationName(projectId, zone1),
    // Serve Nodes count can only be set if PRODUCTION type instance is being created.
    // Minimum count of 3 serve nodes must be specified.
    // Serve Nodes count can be increased and decreased after an instance is created.
    ServeNodes = 3
};

// Initialize request argument(s).
CreateInstanceRequest request = new CreateInstanceRequest
{
    ParentAsProjectName = new ProjectName(projectId),
    Instance = myInstance,
    InstanceId = instanceId,
    // Must specify at lease one cluster.
    // Only PRODUCTION type instance can be created with more than one cluster.
    // Currently all clusters must have the same storage type.
    // Clusters must be set to different locations.
    Clusters = { { "ssd-cluster1", myCluster1 } }
};

try
{
    // Make a request.
    Operation<Instance, CreateInstanceMetadata> createInstanceResponse =
        bigtableInstanceAdminClient.CreateInstance(request);
    Console.WriteLine("Waiting for operation to complete...");

    // Poll until the returned long-running operation is complete
    Operation<Instance, CreateInstanceMetadata> completedResponse =
        createInstanceResponse.PollUntilCompleted();
}
catch (Exception ex)
{
    Console.WriteLine($"Exception while creating {displayName} instance");
    Console.WriteLine(ex.Message);
}

Java

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// Creates a Production Instance with the ID "ssd-instance",
// cluster id "ssd-cluster", 3 nodes and location "us-central1-f".
CreateInstanceRequest createInstanceRequest =
    CreateInstanceRequest.of(instanceId)
        .addCluster(clusterId, "us-central1-f", 3, StorageType.SSD)
        .setType(Instance.Type.PRODUCTION)
        .addLabel("department", "accounting");
// Creates a production instance with the given request.
try {
  Instance instance = adminClient.createInstance(createInstanceRequest);
  System.out.printf("PRODUCTION type instance %s created successfully%n", instance.getId());
} catch (Exception e) {
  System.err.println("Failed to create instance: " + e.getMessage());
  throw e;
}

Node.js

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// Creates a Production Instance with the ID "ssd-instance"
// with cluster id "ssd-cluster", 3 nodes and location us-central1-f

const instanceOptions = {
  clusters: [
    {
      id: clusterID,
      nodes: 3,
      location: 'us-central1-f',
      storage: 'ssd',
    },
  ],
  type: 'PRODUCTION', // Optional as default type is PRODUCTION
  labels: {'prod-label': 'prod-label'},
};

// Create production instance with given options
const [prodInstance, operation] = await instance.create(instanceOptions);
await operation.promise();
console.log(`Created Instance: ${prodInstance.id}`);

PHP

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

use Exception;
use Google\ApiCore\ApiException;
use Google\Cloud\Bigtable\Admin\V2\Client\BigtableInstanceAdminClient;
use Google\Cloud\Bigtable\Admin\V2\Cluster;
use Google\Cloud\Bigtable\Admin\V2\CreateInstanceRequest;
use Google\Cloud\Bigtable\Admin\V2\GetInstanceRequest;
use Google\Cloud\Bigtable\Admin\V2\Instance;
use Google\Cloud\Bigtable\Admin\V2\Instance\Type as InstanceType;
use Google\Cloud\Bigtable\Admin\V2\StorageType;

/**
 * Create a production Bigtable instance
 *
 * @param string $projectId The Google Cloud project ID
 * @param string $instanceId The ID of the Bigtable instance to be generated
 * @param string $clusterId The ID of the cluster to be generated
 * @param string $locationId The Bigtable region ID where you want your instance to reside
 */
function create_production_instance(
    string $projectId,
    string $instanceId,
    string $clusterId,
    string $locationId = 'us-east1-b'
): void {
    $instanceAdminClient = new BigtableInstanceAdminClient();

    $projectName = $instanceAdminClient->projectName($projectId);
    $instanceName = $instanceAdminClient->instanceName($projectId, $instanceId);

    $serveNodes = 3;
    $storageType = StorageType::SSD;
    $production = InstanceType::PRODUCTION;
    $labels = ['prod-label' => 'prod-label'];

    $instance = new Instance();
    $instance->setDisplayName($instanceId);

    $instance->setLabels($labels);
    $instance->setType($production);

    $cluster = new Cluster();
    $cluster->setDefaultStorageType($storageType);
    $locationName = $instanceAdminClient->locationName($projectId, $locationId);
    $cluster->setLocation($locationName);
    $cluster->setServeNodes($serveNodes);
    $clusters = [
        $clusterId => $cluster
    ];
    try {
        $getInstanceRequest = (new GetInstanceRequest())
            ->setName($instanceName);
        $instanceAdminClient->getInstance($getInstanceRequest);
        printf('Instance %s already exists.' . PHP_EOL, $instanceId);
        throw new Exception(sprintf('Instance %s already exists.' . PHP_EOL, $instanceId));
    } catch (ApiException $e) {
        if ($e->getStatus() === 'NOT_FOUND') {
            printf('Creating an Instance: %s' . PHP_EOL, $instanceId);
            $createInstanceRequest = (new CreateInstanceRequest())
                ->setParent($projectName)
                ->setInstanceId($instanceId)
                ->setInstance($instance)
                ->setClusters($clusters);
            $operationResponse = $instanceAdminClient->createInstance($createInstanceRequest);
            $operationResponse->pollUntilComplete();
            if (!$operationResponse->operationSucceeded()) {
                print('Error: ' . $operationResponse->getError()->getMessage());
            } else {
                printf('Instance %s created.', $instanceId);
            }
        } else {
            throw $e;
        }
    }
}

Python

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

cluster = instance.cluster(
    cluster_id,
    location_id=location_id,
    serve_nodes=serve_nodes,
    default_storage_type=storage_type,
)
if not instance.exists():
    print("\nCreating an instance")
    # Create instance with given options
    operation = instance.create(clusters=[cluster])
    # Ensure the operation completes.
    operation.result(timeout=480)
    print("\nCreated instance: {}".format(instance_id))

Ruby

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

# instance_id      = "my-instance"
# cluster_id       = "my-cluster"
# cluster_location = "us-east1-b"
puts "Creating a PRODUCTION Instance"
job = bigtable.create_instance(
  instance_id,
  display_name: "Sample production instance",
  labels:       { "env": "production" },
  type:         :PRODUCTION # Optional as default type is :PRODUCTION
) do |clusters|
  clusters.add cluster_id, cluster_location, nodes: 3, storage_type: :SSD
end

job.wait_until_done!
instance = job.instance
puts "Created Instance: #{instance.instance_id}"

次のステップ