En este documento, se describe cómo crear una suscripción a Bigtable en Pub/Sub. Las suscripciones a 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 a 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 a 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 a 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:
-
en el proyectopubsub.subscriptions.create -
sobre el temapubsub.topics.attachSubscription
También puedes obtener estos permisos con roles personalizados o con 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 recursos de Google Cloud . 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 a Bigtable.
Usa el agente de servicio de Pub/Sub
Para otorgar el rol necesario 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
En la consola de Google Cloud , dirígete a la página IAM.
Selecciona Incluir asignaciones de roles proporcionadas por Google.
Busca la fila de Cloud Pub/Sub Service Account y haz clic en Editar principal.
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 con la consola.
Instancia
En la consola de Google Cloud , ve a la página Bigtable > Instancias.
En la página Instancias, selecciona la casilla de verificación junto al nombre de la instancia.
Si el panel de información no está visible, haz clic en Mostrar panel de información.
Haz clic en Agregar principal y, luego, ingresa el identificador de la cuenta de servicio con el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.comEn la lista Asignar roles, selecciona Usuario de Bigtable.
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 podrá escribir en la tabla de Bigtable. Si deseas proporcionar permisos más detallados, configura una cuenta de servicio administrada por el usuario.
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.getAccessTokenen la cuenta de servicio administrada por el usuario.El usuario que crea la suscripción debe tener el permiso
iam.serviceAccounts.actAsen 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 en 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 del mensaje
Una suscripción a 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 salt 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 tipo
BYTES.La marca de tiempo de la celda es la hora de publicación del mensaje.
Metadatos del mensaje
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 a 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 |
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 a Bigtable
Para crear una suscripción a Bigtable, usa el comando gcloud beta pubsub subscriptions create:
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: Es un nombre para la suscripción.TOPIC_ID: Es el nombre o el ID del tema del que se leerá.PROJECT_ID: El ID del proyectoINSTANCE_ID: Es el ID de la instancia de Bigtable que contiene la tabla.TABLE_ID: ID de la tabla en la que se escribirá. La tabla debe tener una familia de columnas llamadadata.
Las siguientes marcas son opcionales:
--bigtable-write-metadata: Especifica si se deben escribir metadatos del mensaje. Si omites esta marca, la suscripción no escribirá metadatos. Para obtener más información, consulta Metadatos de mensajes.--bigtable-app-profile-id=APP_PROFILE: Especifica un perfil de aplicación 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 aplicación predeterminado.--bigtable-service-account-email: Especifica una cuenta de servicio para usar cuando se escriba en Bigtable. Si no se especifica, la suscripción usa el agente de servicio de Pub/Sub. Para obtener más información, consulta Cómo usar una cuenta de servicio personalizada.
Ejemplo: Escribe de Pub/Sub a Bigtable
En el siguiente ejemplo, se muestra cómo crear una suscripción a Bigtable, usarla para escribir mensajes de Pub/Sub en una tabla de Bigtable y, luego, consultar la tabla.
Crea una nueva instancia de Bigtable llamada
my-instance.gcloud bigtable instances create my-instance --display-name="My instance" \ --cluster-config=id=my-cluster-1,zone=ZONE,nodes=1Reemplaza ZONE por la zona en la que se ejecuta el clúster. Ejemplo:
us-central1-bCrea una tabla de Bigtable llamada
table-1con una familia de columnas llamadadata.gcloud bigtable instances tables create table-1 \ --instance=my-instance \ --column-families=dataCrea un tema de Pub/Sub llamado
topic-1.gcloud pubsub topics create topic-1Crea una suscripción a Bigtable que lea el tema.
gcloud beta pubsub subscriptions create bigtable-sub \ --topic=topic-1 \ --bigtable-table=projects/PROJECT_ID/instances/my-instance/tables/table-1Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
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:
En la consola de Google Cloud , ve a la página Instancias de Bigtable.
Haz clic en la instancia llamada
my-cluster-1.En el menú de navegación, haz clic en Bigtable Studio.
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 las funciones JSON de GoogleSQL para analizar los datos.
Supervisa una suscripción a 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 supervisión de Pub/Sub.
También puedes supervisar las suscripciones desde Pub/Sub.
¿Qué sigue?
- Obtén más información sobre las suscripciones a Bigtable.
- Elige un tipo de suscripción.
- Soluciona problemas relacionados con las suscripciones a Bigtable