Crea suscripciones de Bigtable

En este documento, se describe cómo crear una suscripción de Bigtable en Pub/Sub. Las suscripciones de Bigtable te permiten escribir mensajes de Pub/Sub directamente en una tabla de Bigtable.

Para obtener más información sobre este tipo de suscripción, consulta Suscripciones de Bigtable.

Antes de comenzar

  • La tabla de Bigtable en la que deseas escribir mensajes de Pub/Sub ya debe existir. Para obtener más información, consulta Crea y administra tablas.

  • La tabla debe tener una familia de columnas llamada data. Puedes agregar la familia de columnas cuando creas la tabla.

  • Si deseas escribir metadatos de mensajes en la tabla, esta también debe tener una familia de columnas llamada pubsub_metadata.

Roles y permisos requeridos

Para obtener los permisos que necesitas para crear una suscripción de Bigtable, pídele a tu administrador que te otorgue el rol de IAM Editor de Pub/Sub (roles/pubsub.editor) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear una suscripción de Bigtable. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear una suscripción de Bigtable:

  • pubsub.subscriptions.create en el proyecto
  • pubsub.topics.attachSubscription en el tema

También puedes obtener estos permisos con roles personalizados o otros roles predefinidos.

Suscripciones entre proyectos

Si creas una suscripción en un proyecto para un tema en otro proyecto, debes tener el permiso pubsub.subscriptions.create en el proyecto en el que creas la suscripción y el permiso pubsub.topics.attachSubscription en el tema.

Otorga roles de IAM a la cuenta de servicio

Pub/Sub usa una cuenta de servicio de Identity and Access Management (IAM) para acceder a los Google Cloud recursos. Para permitir que Pub/Sub escriba en Bigtable, debes otorgar el rol de Usuario de Bigtable (roles/bigtable.user) a esta cuenta de servicio.

De forma predeterminada, Pub/Sub usa el agente de servicio de Pub/Sub
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com). También puedes especificar una cuenta de servicio administrada por el usuario cuando creas la suscripción de Bigtable.

Usa el agente de servicio de Pub/Sub

Para otorgar el rol requerido al agente de servicio de Pub/Sub, sigue estos pasos. Puedes otorgar el rol en el proyecto o en la instancia de Bigtable que contiene la tabla.

Proyecto

  1. En la Google Cloud consola de, dirígete a la página IAM.

    Ir a IAM

  2. Selecciona Incluir asignaciones de roles proporcionadas por Google.

  3. Busca la fila de Cuenta de servicio de Cloud Pub/Sub y haz clic en Editar principal.

  4. Haz clic en Agregar otro rol y selecciona el rol Usuario de Bigtable.

Para obtener más información, consulta Otorga un rol de IAM mediante la consola.

Instancia

  1. En la Google Cloud consola de, ve a la página de Bigtable > Instancias.

    Ir a Instancias

  2. En la página Instancias, selecciona la casilla de verificación junto al nombre de la instancia.

  3. Si el panel de información no está visible, haz clic en Mostrar panel de información.

  4. Haz clic en Agregar principal y, luego, ingresa el identificador de la cuenta de servicio en el siguiente formato:

    service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.

  5. En la lista Asignar roles, selecciona Usuario de Bigtable.

  6. Haz clic en Guardar. A la principal se le otorga la función en el recurso.

Usar una cuenta de servicio personalizada

Si otorgas el rol de Usuario de Bigtable al agente de servicio de Pub/Sub, cualquier usuario con permiso para crear una suscripción en tu proyecto puede escribir en la tabla de Bigtable. Si deseas proporcionar permisos más detallados, configura una cuenta de servicio administrada por el usuario en su lugar.

Se requieren los siguientes permisos para configurar una cuenta de servicio administrada por el usuario para escribir en Bigtable:

  • La cuenta de servicio administrada por el usuario debe tener el rol de Usuario de Bigtable.

  • La cuenta de servicio de Cloud Pub/Sub debe tener el permiso iam.serviceAccounts.getAccessToken en la cuenta de servicio administrada por el usuario.

  • El usuario que crea la suscripción debe tener el permiso iam.serviceAccounts.actAs en la cuenta de servicio administrada por el usuario.

Cuando crees la suscripción, especifica la cuenta de servicio administrada por el usuario. Para obtener más información, consulta Crea una suscripción de Bigtable.

Escrituras de tablas de Bigtable

En esta sección, se describe cómo una suscripción de Bigtable escribe mensajes de Pub/Sub en una tabla.

Datos de mensajes

Una suscripción de Bigtable escribe los datos del mensaje de Pub/Sub en una familia de columnas llamada data.

  • Cada fila contiene los datos de un mensaje.

  • La clave de fila es una concatenación del ID de suscripción, un prefijo de sal del ID de mensaje y el ID de mensaje, en el siguiente formato:

    "projects/PROJECT_NUMBER/subscriptions/SUBSCRIPTION_ID#SALT_PREFIX#MESSAGE_ID"

  • Los datos del mensaje se escriben en una sola columna de la familia de columnas data. La columna tiene un calificador de columna de cadena vacía ("").

  • Los datos se escriben como un BYTES tipo.

  • La marca de tiempo de la celda es la hora de publicación del mensaje.

Metadatos de mensajes

De forma predeterminada, la suscripción no escribe metadatos de mensajes en la tabla. De manera opcional, puedes habilitar la escritura de metadatos cuando creas una suscripción de Bigtable.

Si la escritura de metadatos está habilitada, la suscripción escribe los metadatos del mensaje en una familia de columnas llamada pubsub_metadata. Antes de crear la suscripción, asegúrate de que tu tabla tenga una familia de columnas con este nombre.

Para cada mensaje, la suscripción escribe una fila nueva con las siguientes columnas en la familia de columnas pubsub_metadata.

Columna Valor Tipo de datos
subscription_name El nombre de la suscripción String
message_id El ID del mensaje String
attributes Un objeto JSON que contiene los atributos del mensaje String

Crea una suscripción de Bigtable

Para crear una suscripción de Bigtable, usa el gcloud beta pubsub subscriptions create comando:

gcloud beta pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --bigtable-table=projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_ID

Reemplaza lo siguiente:

  • SUBSCRIPTION_ID: Un nombre para la suscripción.
  • TOPIC_ID: El nombre o el ID del tema desde el que se leerá.
  • PROJECT_ID: El ID del proyecto
  • INSTANCE_ID: El ID de la instancia de Bigtable que contiene la tabla.
  • TABLE_ID: El ID de la tabla en la que se escribirá. La tabla debe tener una familia de columnas llamada data.

Las siguientes marcas son opcionales:

  • --bigtable-write-metadata: Especifica si se deben escribir metadatos de mensajes. Si omites esta marca, la suscripción no escribe metadatos. Para obtener más información, consulta Metadatos de mensajes.

  • --bigtable-app-profile-id=APP_PROFILE: Especifica un perfil de app para usar en las escrituras de Bigtable. El perfil de la app debe usar el enrutamiento de un solo clúster. Si no se especifica esta marca, la suscripción usa el perfil de la app predeterminado.

  • --bigtable-service-account-email: Especifica una cuenta de servicio para usar cuando se escribe en Bigtable. Si no se especifica, la suscripción usa el agente de servicio de Pub/Sub. Para obtener más información, consulta Usar una cuenta de servicio personalizada.

Ejemplo: Escribe desde Pub/Sub a Bigtable

En el siguiente ejemplo, se muestra cómo crear una suscripción de Bigtable, usar la suscripción para escribir mensajes de Pub/Sub en una tabla de Bigtable y, luego, consultar la tabla.

  1. Crea una instancia nueva de Bigtable llamada my-instance.

    gcloud bigtable instances create my-instance --display-name="My instance" \
      --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1
    

    Reemplaza ZONE por la zona donde se ejecuta el clúster. Ejemplo: us-central1-b

  2. Crea una tabla de Bigtable llamada table-1 con una familia de columnas llamada data.

    gcloud bigtable instances tables create table-1 \
      --instance=my-instance \
      --column-families=data
    
  3. Crea un tema de Pub/Sub llamado topic-1.

    gcloud pubsub topics create topic-1
    
  4. Crea una suscripción de Bigtable que lea desde el tema.

    gcloud beta pubsub subscriptions create bigtable-sub \
      --topic=topic-1 \
      --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1
    

    Reemplaza PROJECT_ID por el ID de tu Google Cloud proyecto.

  5. Publica un mensaje en el tema.

    gcloud pubsub topics publish topic-1 --message='{"name":"Alice"}'
    

    Si el mensaje se publica correctamente, el resultado es el ID del mensaje:

    messageIds:
    - 'MESSAGE_ID'
    

La suscripción de Bigtable escribe los datos del mensaje en la familia de columnas data. Para consultar los datos, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página Instancias de Bigtable.

    Ir a Instancias

  2. Haz clic en la instancia llamada my-cluster-1.

  3. En el menú de navegación, haz clic en Bigtable Studio.

  4. En el editor de consultas, ejecuta la siguiente consulta en SQL.

    SELECT _key, JSON_VALUE(CAST(data[''] AS STRING), '$.name') AS name FROM table-1;
    

    El resultado de la consulta se ve de la siguiente manera:

    +-------------------+
    | _key      | name  |
    +-----------|-------+
    | "ROW_KEY" | Alice |
    +-------------------+
    

    Los datos del mensaje se almacenan como un tipo BYTES. En este ejemplo, los datos son una cadena JSON, por lo que la consulta puede usar funciones JSON de GoogleSQL para analizarlos.

Supervisa una suscripción de Bigtable

Cloud Monitoring proporciona varias métricas para supervisar las suscripciones.

Para obtener una lista de todas las métricas disponibles relacionadas con Pub/Sub y sus descripciones, consulta la documentación de Monitoring para Pub/Sub.

También puedes supervisar las suscripciones desde Pub/Sub.

¿Qué sigue?