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.createen el proyecto -
pubsub.topics.attachSubscriptionen 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
En la Google Cloud consola de, dirígete a la página IAM.
Selecciona Incluir asignaciones de roles proporcionadas por Google.
Busca la fila de Cuenta de servicio de Cloud Pub/Sub 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 mediante la consola.
Instancia
En la Google Cloud consola de, ve a la página de 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 en el siguiente formato:
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.En 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 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.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 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
BYTEStipo.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 proyectoINSTANCE_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 llamadadata.
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.
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=1Reemplaza ZONE por la zona donde 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 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-1Reemplaza PROJECT_ID por el ID de tu Google Cloud proyecto.
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 Google Cloud consola de, 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 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?
- Obtén más información sobre las suscripciones de Bigtable.
- Elige un tipo de suscripción.
- Soluciona problemas de suscripciones de Bigtable.