Crea una instancia

Una instancia de Bigtable es un contenedor para Bigtable entre los clústeres de Kubernetes. Una instancia que tiene más de un clúster usa la replicación. Puedes crear clústeres en hasta 8 regiones, con tantos clústeres en cada región como zonas haya.

En esta página se explica cómo crear una instancia. Antes de leer esta página, debes familiarizarte con la descripción general de Bigtable. Además, te recomendamos que leas la descripción general de instancias, clústeres y nodos.

Antes de comenzar

Prepara el entorno:

  1. Accede a tu cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

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

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  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. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  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. Ejecuta el siguiente comando para instalar CLI de cbt :
    gcloud components install cbt

Planifica tu configuración:

  1. Opcional: si planeas habilitar la replicación, sigue estos pasos:

  2. Opcional: Si deseas usar claves de encriptación administradas por el cliente (CMEK) en lugar de la encriptación predeterminada administrada por Google, completa las tareas de Crea una instancia habilitada para CMEK y ten el ID de clave de CMEK listo antes de crear la instancia nueva. No puedes agregar la protección con CMEK a una instancia después de crearla, tampoco puedes modificar ni reemplazar la clave de CMEK después de crear la instancia.

Crea una instancia

Sigue estos pasos para crear una instancia de Bigtable:

Console

  1. En la consola de Google Cloud, ve a la página Crear instancia.

    Ir a Crear instancia

  2. Ingresa un nombre para la instancia.

    La consola de Google Cloud muestra este nombre para identificar tu instancia.

  3. Ingresa un ID de instancia.

    El ID de instancia es un identificador permanente de la instancia.

  4. Haga clic en Continuar.

  5. Elige si deseas usar un disco SSD o HDD para tus clústeres. En la mayoría de los casos, el SSD es la mejor opción. Esta elección es permanente. Más información.

  6. Haga clic en Continuar.

  7. Ingresa el ID del clúster para el primer clúster.

    El ID del clúster es un identificador permanente del clúster.

  8. Elige la región y zona en la que se ejecutará el primer clúster.

  9. Elige un modo de escalamiento de nodos para el clúster. En la mayoría de los casos, deberías elige el ajuste de escala automático. Para obtener orientación sobre el escalamiento, consulta Ajuste de escala automático.

    1. En Asignación de nodos manual, ingresa la cantidad de nodos de Bigtable del primer clúster. Si no estás seguro de cuántos nodos necesitas, usa el valor predeterminado. Posteriormente, puedes agregar más nodos.
    2. En Ajuste de escala automático, ingresa los valores de lo siguiente:
      • Cantidad mínima de nodos
      • Cantidad máxima de nodos
      • Objetivo de uso de CPU
      • Objetivo de uso de almacenamiento
  10. Para proteger tu instancia con CMEK en lugar de la encriptación predeterminada administrada por Google, completa lo siguiente (opcional):

    1. Haz clic en Mostrar opciones de encriptación.
    2. Elige el botón de selección junto a Clave de encriptación administrada por el cliente (Customer-managed encryption key) (CMEK).
    3. Selecciona o ingresa el nombre del recurso para la clave de CMEK que deseas usar para el clúster. No podrás agregar esto más adelante.
    4. Si se te solicita que otorgues permiso a la cuenta de servicio de la clave CMEK, haz clic en Otorgar. Tu cuenta de usuario debe tener la función de administrador de Cloud KMS para completar esta tarea.
    5. Haz clic en Guardar.
  11. Para habilitar la replicación ahora, completa los siguientes pasos adicionales (opcional):

    1. Haz clic en Show advanced options.
    2. Haz clic en Agregar clúster, ingresa la configuración del clúster y, luego, haz clic en Agregar. Repite este paso para crear clústeres adicionales en la instancia. También puedes habilitar la replicación más adelante si agregas un clúster.

    Cada zona de una región puede contener solo un clúster. Si el botón Agregar clúster está inhabilitado, cambia la zona de tu primer clúster.

    Para crear una instancia que tenga más de seis clústeres, primero crea una instancia que tenga seis clústeres y, luego, agrega más clústeres a la instancia.

  12. Haga clic en Crear para crear la instancia.

  13. Revisa la configuración de la replicación en el perfil de app predeterminado a fin de comprobar si funciona para tu caso de uso de replicación. Es posible que debas actualizar el perfil de app predeterminado o crear perfiles de app personalizados.

gcloud

  1. Usa el comando bigtable instances create para crear una instancia:

    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]
    

    Reemplaza lo siguiente:

    • INSTANCE_ID: El identificador permanente de la instancia.
    • DISPLAY_NAME: Un nombre legible que identifique la instancia en la consola de Google Cloud.
    • CLUSTER_ID: El identificador permanente del clúster.
    • CLUSTER_ZONE: La zona donde se ejecuta el clúster.

    Debes configurar al menos un clúster para la instancia con la marca --cluster-config. Si deseas crear una instancia que tenga varios clústeres, repite la marca --cluster-config para cada clúster.

    Para la asignación manual de nodos, configurar nodes en la marca --cluster-config es opcional. Si no se configura ningún valor, Bigtable asigna nodos al clúster automáticamente según tu huella de datos y se optimiza para un uso del almacenamiento del 50%. Esta asignación automática de de los nodos tiene un impacto en los precios. Si quieres controlar la cantidad de nodos En un clúster, reemplaza NODES por la cantidad de nodos que que deseas en el clúster. Obtén más información sobre los nodos.

    En la mayoría de los casos, elige el ajuste de escala automático en lugar de la asignación manual de nodos. Para for_autoscaling, proporciona opciones autoscaling- en la marca --cluster-config (autoscaling-storage-target es opcional) y no uses nodes. Consulta Ajuste de escala automático para obtener orientación sobre cómo elegir los valores para tu configuración de ajuste de escala automático. Reemplaza lo siguiente por las teclas de opción cluster-config:

    • AUTOSCALING_MIN_NODES: La cantidad mínima de nodos para el clúster.
    • AUTOSCALING_MAX_NODES: La cantidad máxima de nodos para el clúster.
    • AUTOSCALING_CPU_TARGET: el porcentaje de uso de CPU objetivo para el clúster. Este valor debe ser de 10 a 80.
    • AUTOSCALING_STORAGE_TARGET: Es el uso del almacenamiento (opcional). objetivo en GiB que Bigtable mantiene cuando agregas o quitando nodos.
    • KMS_KEY: es la clave CMEK para el clúster.

      El valor KMS_KEY se debe configurar en el siguiente formato:

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

      Reemplaza lo siguiente:

      • PROJECT: El identificador permanente del proyecto
      • LOCATION: Es la ubicación del clúster.
      • KEYRING: Es el nombre del llavero de claves que contiene la clave.
      • KEY: el nombre de la clave.

      A continuación, se muestra un ejemplo:

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

      Si la instancia está protegida por CMEK, cada clúster debe estar en la misma región que la clave CMEK. Puedes agregar clústeres de CMEK solo a instancias que ya estén protegidas por CMEK Más información

    El comando acepta las siguientes marcas opcionales:

    • --cluster-storage-type=CLUSTER_STORAGE_TYPE: El tipo de almacenamiento que se usará en la instancia. El valor predeterminado es SSD. En la mayoría de los casos, el valor predeterminado es el mejor. Esta elección es permanente. Obtén más información.

    • --project=PROJECT: El proyecto en el que se crea el clúster si es diferente al proyecto actual.

  2. Revisa la configuración de la replicación en el perfil de app predeterminado a fin de comprobar si funciona para tu caso de uso de replicación. Es posible que debas actualizar el perfil de app predeterminado o crear perfiles de app personalizados.

cbt

  1. Comienza por crear una instancia con un solo clúster. Usa el comando createinstance para crear una instancia:

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

    Proporcione lo siguiente:

    • INSTANCE_ID: Es el identificador permanente de la instancia.
    • DISPLAY_NAME: Un nombre legible que identifique la instancia en la consola de Google Cloud.
    • CLUSTER_ID: El identificador permanente del clúster.
    • CLUSTER_ZONE: La zona donde se ejecuta el clúster.
    • CLUSTER_NUM_NODES: Este campo es opcional. Si no se establece ningún valor, Bigtable asigna automáticamente nodos en función de tu espacio en datos y realiza optimizaciones para lograr un 50% de utilización de almacenamiento. Si quieres controlar la cantidad de nodos en un clúster, actualiza el Valor CLUSTER_NUM_NODES. Asegúrate de que la cantidad de nodos esté configurada en un valor distinto de cero. Más información sobre los nodos.
    • CLUSTER_STORAGE_TYPE: El tipo de almacenamiento que se usará en el clúster. Todos los clústeres de una instancia deben usar el mismo tipo de almacenamiento. Acepta los valores SSD y HDD. En la mayoría de los casos, SSD es la mejor opción. Esta elección es permanente. Más información.
  2. Para habilitar la replicación, usa el comando createcluster y agrega un clúster:

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

    Proporcione lo siguiente:

    • INSTANCE_ID: Es el identificador permanente de la instancia que acabas de crear.
    • CLUSTER_ID: El identificador permanente del clúster.
    • ZONE: La zona donde se ejecuta el clúster.

      Cada zona de una región puede contener solo un clúster. Por ejemplo, si una instancia tiene un clúster en us-east1-b, puedes agregar un clúster en una zona diferente en la misma región, como us-east1-c, o una zona en una región distinta, como europe-west2-a.

    • NUM_NODES: Este campo es opcional. Si no se configura ningún valor, Bigtable asigna nodos en función de tu huella de datos y los optimiza para obtener un 50% de almacenamiento en la nube. Si quieres controlar la cantidad de nodos de un clúster, actualiza el valor de NUM_NODES. Asegúrate de que la cantidad de nodos esté configurada en un valor distinto de cero.

      En muchos casos, todos los clústeres de una instancia deben tener la misma cantidad de nodos, pero hay excepciones. Más información sobre los nodos y la replicación.

    • STORAGE_TYPE: El tipo de almacenamiento que se usará en el clúster. Todos los clústeres de una instancia deben usar el mismo tipo de almacenamiento. Acepta los valores SSD y HDD.

  3. Revisa la configuración de la replicación en el perfil de app predeterminado a fin de comprobar si funciona para tu caso de uso de replicación (opcional). Es posible que debas actualizar el perfil de app predeterminado o crear perfiles de app personalizados.

C++

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta las bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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#

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta las bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta las bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente de Bigtable, consulta las bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

Para aprender a instalar y usar la biblioteca cliente de Bigtable, consulta Bibliotecas cliente de Bigtable.

Para autenticarte en Bigtable, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

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

¿Qué sigue?