Membuat instance

Instance Bigtable adalah penampung untuk cluster Bigtable. Instance yang memiliki lebih dari satu cluster menggunakan replikasi. Anda dapat membuat cluster di hingga delapan region, dengan jumlah cluster di setiap region sebanyak zona.

Halaman ini menjelaskan cara membuat instance. Sebelum membaca halaman ini, Anda harus sudah memahami ringkasan Bigtable. Anda juga harus membaca ringkasan instance, cluster, dan node.

Sebelum memulai

Siapkan lingkungan Anda:

  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. Jalankan perintah berikut untuk menginstal cbt CLI:
    gcloud components install cbt

Merencanakan konfigurasi Anda:

  1. Opsional: Jika Anda berencana mengaktifkan replikasi, lakukan tindakan berikut:

  2. Opsional: Jika Anda ingin menggunakan kunci enkripsi yang dikelola pelanggan (CMEK), bukan enkripsi default yang dikelola Google, selesaikan tugas di bagian Membuat instance yang mengaktifkan CMEK dan siapkan ID kunci CMEK sebelum Anda membuat instance baru. Anda tidak dapat menambahkan perlindungan CMEK ke instance setelah dibuat, dan Anda tidak dapat mengubah atau mengganti kunci CMEK setelah instance dibuat.

Membuat instance

Untuk membuat instance Bigtable:

Konsol

  1. Di konsol Google Cloud, buka halaman Create instance.

    Buka Buat instance

  2. Masukkan nama untuk instance.

    Konsol Google Cloud menampilkan nama ini untuk mengidentifikasi instance Anda.

  3. Masukkan ID instance.

    ID instance adalah ID permanen untuk instance.

  4. Klik Lanjutkan.

  5. Pilih apakah akan menggunakan disk SSD atau HDD untuk cluster Anda. Dalam sebagian besar kasus, SSD adalah yang terbaik. Pilihan ini bersifat permanen. Pelajari lebih lanjut.

  6. Klik Lanjutkan.

  7. Masukkan ID cluster untuk cluster pertama.

    ID cluster adalah ID permanen untuk cluster.

  8. Pilih region dan zona tempat cluster pertama akan dijalankan.

  9. Pilih mode penskalaan node untuk cluster. Dalam sebagian besar kasus, Anda harus memilih penskalaan otomatis. Untuk panduan penskalaan, lihat Penskalaan otomatis.

    1. Untuk Alokasi node manual, masukkan jumlah node Bigtable untuk cluster pertama. Jika Anda tidak yakin berapa banyak node yang diperlukan, gunakan default. Anda dapat menambahkan node lainnya nanti.
    2. Untuk Autoscaling, masukkan nilai untuk hal berikut:
      • Jumlah node minimum
      • Jumlah node maksimum
      • Target penggunaan CPU
      • Target penggunaan penyimpanan
  10. (Opsional) Untuk melindungi instance Anda dengan CMEK, bukan enkripsi default yang dikelola Google, selesaikan langkah-langkah berikut:

    1. Klik Tampilkan opsi enkripsi.
    2. Pilih tombol pilihan di samping Kunci enkripsi yang dikelola pelanggan (CMEK).
    3. Pilih atau masukkan nama resource untuk kunci CMEK yang ingin Anda gunakan untuk cluster. Anda tidak dapat menambahkannya nanti.
    4. Jika Anda diminta untuk memberikan izin ke akun layanan kunci CMEK, klik Berikan. Akun pengguna Anda harus diberi peran Cloud KMS Admin untuk menyelesaikan tugas ini.
    5. Klik Simpan.
  11. (Opsional) Untuk mengaktifkan replikasi sekarang, selesaikan langkah tambahan berikut:

    1. Klik Tampilkan opsi lanjutan.
    2. Klik Tambahkan cluster, masukkan setelan untuk cluster, lalu klik Tambahkan. Ulangi langkah ini untuk membuat cluster tambahan di instance. Anda juga dapat mengaktifkan replikasi nanti dengan menambahkan cluster.

    Setiap zona dalam region hanya dapat berisi satu cluster. Jika tombol Tambahkan cluster dinonaktifkan, ubah zona untuk cluster pertama Anda.

    Untuk membuat instance yang memiliki lebih dari enam cluster, pertama-tama buat instance yang memiliki enam cluster, lalu tambahkan lebih banyak cluster ke instance tersebut.

  12. Klik Buat untuk membuat instance.

  13. Tinjau setelan replika di profil aplikasi default untuk melihat apakah setelan tersebut sesuai untuk kasus penggunaan replika Anda. Anda mungkin perlu memperbarui profil aplikasi default atau membuat profil aplikasi kustom.

gcloud

  1. Gunakan perintah bigtable instances create untuk membuat instance:

    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]
    

    Ganti kode berikut:

    • INSTANCE_ID: ID permanen untuk instance.
    • DISPLAY_NAME: Nama yang dapat dibaca manusia yang mengidentifikasi instance di konsol Google Cloud.
    • CLUSTER_ID: ID permanen untuk cluster.
    • CLUSTER_ZONE: Zona tempat cluster berjalan.

    Anda harus mengonfigurasi minimal satu cluster untuk instance, menggunakan flag --cluster-config. Untuk membuat instance yang memiliki beberapa cluster, ulangi flag --cluster-config untuk setiap cluster.

    Untuk alokasi node manual, menyetel nodes dalam flag --cluster-config bersifat opsional. Jika tidak ada nilai yang ditetapkan, Bigtable akan mengalokasikan node ke cluster secara otomatis berdasarkan jejak data Anda dan mengoptimalkan penggunaan penyimpanan sebesar 50%. Alokasi node otomatis ini memiliki dampak pada harga. Jika Anda ingin mengontrol jumlah node dalam cluster, ganti NODES dengan jumlah node yang Anda inginkan dalam cluster. Pelajari node lebih lanjut.

    Pada umumnya, pilih penskalaan otomatis, bukan alokasi node manual. Untuk_autoscaling, berikan opsi autoscaling- dalam flag --cluster-config (autoscaling-storage-target bersifat opsional) dan jangan gunakan nodes. Lihat Penskalaan otomatis untuk mengetahui panduan memilih nilai untuk setelan penskalaan otomatis Anda. Ganti hal berikut untuk kunci opsi cluster-config:

    • AUTOSCALING_MIN_NODES: Jumlah minimum node untuk cluster.
    • AUTOSCALING_MAX_NODES: Jumlah maksimum node untuk cluster.
    • AUTOSCALING_CPU_TARGET: Persentase penggunaan CPU target untuk cluster. Nilai ini harus antara 10 hingga 80.
    • AUTOSCALING_STORAGE_TARGET: (Opsional) Target penggunaan penyimpanan dalam GiB yang dikelola Bigtable dengan menambahkan atau menghapus node.
    • KMS_KEY: Kunci CMEK untuk cluster.

      Nilai KMS_KEY harus ditetapkan dalam format berikut:

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

      Ganti kode berikut:

      • PROJECT: ID permanen untuk project
      • LOCATION: lokasi cluster Anda
      • KEYRING: nama key ring yang berisi kunci
      • KEY: nama kunci

      Berikut adalah contohnya:

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

      Jika instance dilindungi CMEK, setiap cluster harus berada di region yang sama dengan kunci CMEK-nya. Anda hanya dapat menambahkan cluster CMEK ke instance yang sudah dilindungi CMEK. Pelajari lebih lanjut.

    Perintah ini menerima flag opsional berikut:

    • --cluster-storage-type=CLUSTER_STORAGE_TYPE: Jenis penyimpanan yang akan digunakan untuk instance. Nilai defaultnya adalah SSD. Dalam sebagian besar kasus, nilai default adalah yang terbaik. Pilihan ini bersifat permanen. Pelajari lebih lanjut.

    • --project=PROJECT: Project tempat membuat cluster jika berbeda dengan project saat ini.

  2. Tinjau setelan replika di profil aplikasi default untuk melihat apakah setelan tersebut sesuai untuk kasus penggunaan replika Anda. Anda mungkin perlu memperbarui profil aplikasi default atau membuat profil aplikasi kustom.

cbt

  1. Mulailah dengan membuat instance dengan satu cluster. Gunakan perintah createinstance untuk membuat instance:

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

    Berikan hal berikut:

    • INSTANCE_ID: ID permanen untuk instance.
    • DISPLAY_NAME: Nama yang dapat dibaca manusia yang mengidentifikasi instance di konsol Google Cloud.
    • CLUSTER_ID: ID permanen untuk cluster.
    • CLUSTER_ZONE: Zona tempat cluster berjalan.
    • CLUSTER_NUM_NODES: Kolom ini bersifat opsional. Jika tidak ada nilai yang ditetapkan, Bigtable akan otomatis mengalokasikan node berdasarkan jejak data Anda dan mengoptimalkan penggunaan penyimpanan sebesar 50%. Jika Anda ingin mengontrol jumlah node dalam cluster, perbarui nilai CLUSTER_NUM_NODES. Pastikan jumlah node ditetapkan ke nilai yang bukan nol. Pelajari node lebih lanjut.
    • CLUSTER_STORAGE_TYPE: Jenis penyimpanan yang akan digunakan untuk cluster. Setiap cluster dalam instance harus menggunakan jenis penyimpanan yang sama. Menerima nilai SSD dan HDD. Dalam sebagian besar kasus, SSD adalah yang terbaik. Pilihan ini bersifat permanen. Pelajari lebih lanjut.
  2. Untuk mengaktifkan replikasi, gunakan perintah createcluster untuk menambahkan cluster:

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

    Berikan hal berikut:

    • INSTANCE_ID: ID permanen untuk instance yang baru saja Anda buat.
    • CLUSTER_ID: ID permanen untuk cluster.
    • ZONE: Zona tempat cluster berjalan.

      Setiap zona dalam region hanya dapat berisi satu cluster. Misalnya, jika instance memiliki cluster di us-east1-b, Anda dapat menambahkan cluster di zona lain di region yang sama, seperti us-east1-c, atau zona di region terpisah, seperti europe-west2-a.

    • NUM_NODES: Kolom ini bersifat opsional. Jika tidak ada nilai yang ditetapkan, Bigtable akan otomatis mengalokasikan node berdasarkan jejak data Anda dan mengoptimalkan penggunaan penyimpanan sebesar 50%. Jika Anda ingin mengontrol jumlah node dalam cluster, perbarui nilai NUM_NODES. Pastikan jumlah node ditetapkan ke nilai yang bukan nol.

      Dalam banyak kasus, setiap cluster dalam instance harus memiliki jumlah node yang sama, tetapi ada pengecualian. Pelajari node dan replikasi.

    • STORAGE_TYPE: Jenis penyimpanan yang akan digunakan untuk cluster. Setiap cluster dalam instance harus menggunakan jenis penyimpanan yang sama. Menerima nilai SSD dan HDD.

  3. (Opsional) Tinjau setelan replikasi di profil aplikasi default untuk melihat apakah setelan tersebut sesuai untuk kasus penggunaan replikasi Anda. Anda mungkin perlu memperbarui profil aplikasi default atau membuat profil aplikasi kustom.

C++

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

// 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

// 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

// 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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Langkah selanjutnya