Membuat instance

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

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

Menyiapkan lingkungan Anda:

  1. Login ke Akun Google Anda.

    Jika Anda belum memilikinya, Daftar untuk membuat akun baru.

  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the APIs

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the APIs

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. Jalankan perintah berikut untuk menginstal CLI cbt:
    gcloud components install cbt

Rencanakan konfigurasi Anda:

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

  2. Opsional: Jika Anda ingin menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) dan bukan enkripsi yang dikelola Google secara default, selesaikan tugas di bagian Membuat instance yang mendukung CMEK dan siapkan ID kunci CMEK Anda sebelum membuat instance baru. Anda tidak dapat menambahkan perlindungan CMEK ke instance setelah instance tersebut dibuat, dan 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 Create instance

  2. Masukkan nama untuk instance.

    Konsol Google Cloud akan 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 kebanyakan 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. 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 Anda perlukan, gunakan default. Anda dapat menambahkan node lainnya nanti.
    2. Untuk Autoscaling, masukkan nilai untuk berikut ini:
      • Jumlah node minimum
      • Jumlah node Maksimum
      • Target penggunaan CPU
      • Target pemanfaatan penyimpanan
  10. (Opsional) Untuk melindungi instance Anda dengan CMEK, bukan enkripsi default yang dikelola Google, lakukan 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 Admin Cloud KMS untuk menyelesaikan tugas ini.
    5. Klik Save.
  11. (Opsional) Untuk mengaktifkan replikasi sekarang, selesaikan langkah-langkah tambahan berikut:

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

    Setiap zona dalam satu region hanya dapat berisi satu cluster. Jika tombol Add 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 Create untuk membuat instance.

  13. Tinjau setelan replikasi di profil aplikasi default untuk melihat apakah setelan tersebut cocok untuk kasus penggunaan replikasi 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 dan mengidentifikasi instance di konsol Google Cloud.
    • CLUSTER_ID: ID permanen untuk cluster.
    • CLUSTER_ZONE: Zona tempat cluster berjalan.

    Anda harus mengonfigurasi setidaknya satu cluster untuk instance tersebut, menggunakan tanda --cluster-config. Untuk membuat instance yang memiliki beberapa cluster, ulangi tanda --cluster-config untuk setiap cluster.

    Untuk alokasi node manual, menyetel nodes di tanda --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 otomatis node ini memiliki dampak harga. Jika Anda ingin mengontrol jumlah node dalam cluster, ganti NODES dengan jumlah node yang Anda inginkan dalam cluster. Pelajari node lebih lanjut.

    Untuk penskalaan otomatis, berikan opsi autoscaling- dalam tanda --cluster-config (autoscaling-storage-target bersifat opsional) dan jangan gunakan nodes. Lihat Penskalaan otomatis untuk mengetahui panduan memilih nilai untuk setelan penskalaan otomatis. Ganti kode 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 sampai 80.
    • AUTOSCALING_STORAGE_TARGET: (Opsional) Target penggunaan penyimpanan dalam GiB yang dipertahankan 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 dapat menambahkan cluster CMEK hanya 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. Pada umumnya, 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 replikasi di profil aplikasi default untuk melihat apakah setelan tersebut cocok untuk kasus penggunaan replikasi 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 dan 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 secara otomatis akan 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 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 satu region hanya dapat berisi satu cluster. Misalnya, jika instance memiliki cluster di us-east1-b, Anda dapat menambahkan cluster pada zona berbeda 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 secara otomatis akan 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 bukan nol.

      Dalam banyak kasus, setiap cluster dalam sebuah instance harus memiliki jumlah node yang sama, tetapi terdapat 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