Creazione di un'istanza

Un'istanza Bigtable è un container per i cluster Bigtable. Un'istanza con più cluster utilizza la replica. Puoi creare cluster in un massimo di 8 regioni, con un numero di cluster in ogni regione uguale al numero di zone.

In questa pagina viene spiegato come creare un'istanza. Prima di leggere questa pagina, dovresti acquisire familiarità con la panoramica di Bigtable. Dovresti leggere anche la panoramica su istanze, cluster e nodi.

Prima di iniziare

Prepara l'ambiente:

  1. Accedi al tuo Account Google.

    Se non ne hai già uno, crea un nuovo account.

  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Cloud Bigtable API, Cloud Bigtable Admin API.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Abilita le API Cloud Bigtable API, Cloud Bigtable Admin API.

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  12. Esegui questo comando per installare l'interfaccia a riga di comando cbt:
    gcloud components install cbt

Pianifica la configurazione:

  1. (Facoltativo) Se prevedi di abilitare la replica:

  2. (Facoltativo) Se vuoi utilizzare chiavi di crittografia gestite dal cliente (CMEK) anziché la crittografia predefinita gestita da Google, completa le attività descritte in Creazione di un'istanza abilitata per CMEK e tieni a portata di mano l'ID chiave CMEK prima di creare la nuova istanza. Non puoi aggiungere la protezione CMEK a un'istanza dopo la creazione e non puoi modificare o sostituire la chiave CMEK dopo la creazione dell'istanza.

Creazione di un'istanza

Per creare un'istanza Bigtable:

Console

  1. Nella console Google Cloud, vai alla pagina Crea istanza.

    Vai a Crea istanza

  2. Inserisci un nome per l'istanza.

    La console Google Cloud mostra questo nome per identificare l'istanza.

  3. Inserisci un ID istanza.

    L'ID istanza è un identificatore permanente dell'istanza.

  4. Fai clic su Continua.

  5. Scegli se utilizzare un disco SSD o HDD per i tuoi cluster. Nella maggior parte dei casi, SSD è l'opzione migliore. Questa scelta è definitiva. Scopri di più.

  6. Fai clic su Continua.

  7. Inserisci un ID per il primo cluster.

    L'ID cluster è un identificatore permanente del cluster.

  8. Scegli la regione e la zona in cui verrà eseguito il primo cluster.

  9. Scegli una modalità di scalabilità dei nodi per il cluster. Per indicazioni sulla scalabilità, consulta Scalabilità automatica.

    1. In Allocazione manuale dei nodi, inserisci il numero di nodi Bigtable per il primo cluster. Se non sai quanti nodi hai bisogno, utilizza il valore predefinito. Puoi aggiungere altri nodi in un secondo momento.
    2. In Scalabilità automatica, inserisci i valori seguenti:
      • Numero minimo di nodi
      • Numero massimo di nodi
      • Target di utilizzo CPU
      • Target di utilizzo dello spazio di archiviazione
  10. (Facoltativo) Per proteggere l'istanza con CMEK anziché con la crittografia predefinita gestita da Google, completa quanto segue:

    1. Fai clic su Mostra opzioni di crittografia.
    2. Seleziona il pulsante di opzione accanto a Chiave di crittografia gestita dal cliente (CMEK).
    3. Seleziona o inserisci il nome della risorsa per la chiave CMEK che vuoi utilizzare per il cluster. Non potrai aggiungerlo in un secondo momento.
    4. Se ti viene chiesto di concedere l'autorizzazione all'account di servizio della chiave CMEK, fai clic su Concedi. Per completare questa attività è necessario concedere al tuo account utente il ruolo Amministratore Cloud KMS.
    5. Fai clic su Salva.
  11. (Facoltativo) Per abilitare subito la replica, completa questi passaggi aggiuntivi:

    1. Fai clic su Mostra opzioni avanzate.
    2. Fai clic su Aggiungi cluster, inserisci le impostazioni per il cluster e fai clic su Aggiungi. Ripeti questo passaggio per creare altri cluster nell'istanza. Puoi anche abilitare la replica in un secondo momento aggiungendo un cluster.

    Ogni zona di una regione può contenere un solo cluster. Se il pulsante Aggiungi cluster è disabilitato, modifica la zona per il tuo primo cluster.

    Per creare un'istanza con più di sei cluster, devi prima creare un'istanza con sei cluster, quindi aggiungere altri cluster all'istanza.

  12. Fai clic sul pulsante Crea per creare l'istanza.

  13. Esamina le impostazioni di replica nel profilo dell'app predefinito per verificare se sono adatte al tuo caso d'uso di replica. Potresti dover aggiornare il profilo dell'app predefinito o creare profili di app personalizzati.

gcloud

  1. Utilizza il comando bigtable instances create per creare un'istanza:

    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]
    

    Sostituisci quanto segue:

    • INSTANCE_ID: l'identificatore permanente dell'istanza.
    • DISPLAY_NAME: un nome leggibile che identifica l'istanza nella console Google Cloud.
    • CLUSTER_ID: l'identificatore permanente del cluster.
    • CLUSTER_ZONE: la zona in cui viene eseguito il cluster.

    Devi configurare almeno un cluster per l'istanza, utilizzando il flag --cluster-config. Per creare un'istanza con più cluster, ripeti il flag --cluster-config per ogni cluster.

    Per l'allocazione manuale dei nodi, l'impostazione di nodes nel flag --cluster-config è facoltativa. Se non viene impostato alcun valore, Bigtable alloca automaticamente i nodi al cluster in base all'ingombro dei dati e ottimizza per il 50% di utilizzo dello spazio di archiviazione. Questa allocazione automatica dei nodi ha un impatto sui prezzi. Se vuoi controllare il numero di nodi in un cluster, sostituisci NODES con il numero di nodi che vuoi nel cluster. Scopri di più sui nodi.

    Per la scalabilità automatica, specifica le opzioni autoscaling- nel flag --cluster-config (autoscaling-storage-target è facoltativo) e non utilizzare nodes. Consulta Scalabilità automatica per linee guida su come scegliere i valori per le impostazioni di scalabilità automatica. Sostituisci quello seguente per le chiavi di opzione cluster-config:

    • AUTOSCALING_MIN_NODES: il numero minimo di nodi per il cluster.
    • AUTOSCALING_MAX_NODES: il numero massimo di nodi per il cluster.
    • AUTOSCALING_CPU_TARGET: la percentuale di utilizzo target della CPU per il cluster. Questo valore deve essere compreso tra 10 e 80.
    • AUTOSCALING_STORAGE_TARGET: (facoltativo) il target di utilizzo dello spazio di archiviazione, espresso in GiB, gestito da Bigtable aggiungendo o rimuovendo nodi.
    • KMS_KEY: la chiave CMEK per il cluster.

      Il valore KMS_KEY deve essere impostato nel seguente formato:

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

      Sostituisci quanto segue:

      • PROJECT: l'identificatore permanente del progetto
      • LOCATION: la località del cluster
      • KEYRING: il nome del keyring che contiene la chiave
      • KEY: il nome della chiave

      Ecco un esempio:

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

      Se l'istanza è protetta da CMEK, ogni cluster deve trovarsi nella stessa regione della chiave CMEK. Puoi aggiungere cluster CMEK solo alle istanze già protette da CMEK. Scopri di più.

    Il comando accetta i seguenti flag facoltativi:

    • --cluster-storage-type=CLUSTER_STORAGE_TYPE: il tipo di archiviazione da utilizzare per l'istanza. Il valore predefinito è SSD. Nella maggior parte dei casi, il valore predefinito è il migliore. Questa scelta è definitiva. Scopri di più.

    • --project=PROJECT: il progetto in cui creare il cluster, se diverso dal progetto attuale.

  2. Esamina le impostazioni di replica nel profilo dell'app predefinito per verificare se sono adatte al tuo caso d'uso di replica. Potresti dover aggiornare il profilo dell'app predefinito o creare profili di app personalizzati.

cbt

  1. Per iniziare, crea un'istanza con un singolo cluster. Utilizza il comando createinstance per creare un'istanza:

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

    Fornisci quanto segue:

    • INSTANCE_ID: l'identificatore permanente dell'istanza.
    • DISPLAY_NAME: un nome leggibile che identifica l'istanza nella console Google Cloud.
    • CLUSTER_ID: l'identificatore permanente del cluster.
    • CLUSTER_ZONE: la zona in cui viene eseguito il cluster.
    • CLUSTER_NUM_NODES: questo campo è facoltativo. Se non viene impostato alcun valore, Bigtable assegna automaticamente i nodi in base all'ingombro dei dati e ottimizza per un utilizzo dello spazio di archiviazione del 50%. Se vuoi controllare il numero di nodi in un cluster, aggiorna il valore CLUSTER_NUM_NODES. Assicurati che il numero di nodi sia impostato su un valore diverso da zero. Scopri di più sui nodi.
    • CLUSTER_STORAGE_TYPE: il tipo di archiviazione da utilizzare per il cluster. Ogni cluster in un'istanza deve utilizzare lo stesso tipo di archiviazione. Accetta i valori SSD e HDD. Nella maggior parte dei casi, SSD è l'opzione migliore. Questa scelta è definitiva. Scopri di più.
  2. Per abilitare la replica, usa il comando createcluster per aggiungere un cluster:

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

    Fornisci quanto segue:

    • INSTANCE_ID: l'identificatore permanente per l'istanza appena creata.
    • CLUSTER_ID: l'identificatore permanente del cluster.
    • ZONE: la zona in cui viene eseguito il cluster.

      Ogni zona di una regione può contenere un solo cluster. Ad esempio, se un'istanza ha un cluster in us-east1-b, puoi aggiungere un cluster in una zona diversa nella stessa regione, come us-east1-c, o in una zona in una regione separata, ad esempio europe-west2-a.

    • NUM_NODES: questo campo è facoltativo. Se non viene impostato alcun valore, Bigtable assegna automaticamente i nodi in base all'ingombro dei dati e ottimizza per un utilizzo dello spazio di archiviazione del 50%. Se vuoi controllare il numero di nodi in un cluster, aggiorna il valore NUM_NODES. Assicurati che il numero di nodi sia impostato su un valore diverso da zero.

      In molti casi, ogni cluster di un'istanza dovrebbe avere lo stesso numero di nodi, ma esistono delle eccezioni. Scopri di più su nodi e replica.

    • STORAGE_TYPE: il tipo di archiviazione da utilizzare per il cluster. Ogni cluster in un'istanza deve utilizzare lo stesso tipo di archiviazione. Accetta i valori SSD e HDD.

  3. (Facoltativo) Rivedi le impostazioni di replica nel profilo dell'app predefinito per verificare se sono adatte al tuo caso d'uso della replica. Potresti dover aggiornare il profilo dell'app predefinito o creare profili di app personalizzati.

C++

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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#

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Bigtable, consulta Librerie client di Bigtable.

Per eseguire l'autenticazione in Bigtable, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Passaggi successivi