インスタンスを作成する

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

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

始める前に

環境の準備:

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Bigtable API, Cloud Bigtable Admin API API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. Cloud Bigtable API, Cloud Bigtable Admin API API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

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

次のステップ