En esta página, se describe el uso de Pub/Sub para enviar mensajes al extremo del servicio de Cloud Run, en el que, luego, se entregan los mensajes a los contenedores como solicitudes HTTP. En esta página, se muestra cómo habilitar el servicio para procesar de manera segura los mensajes enviados desde una suscripción de Pub/Sub en el mismo proyecto de Google Cloud.
Si aprovechas las cuentas de servicio y los permisos de IAM, puedes usar Pub/Sub de manera segura y privada con Cloud Run sin tener que exponer el servicio de Cloud Run de forma pública. Solo la suscripción de Pub/Sub que configuraste puede invocar el servicio.
Plazos de confirmación para Cloud Run
Asegúrate de establecer el plazo de confirmación de suscripción (ackDeadlineSeconds
) de Pub/Sub al máximo permitido de 600 segundos.
Tu servicio de Cloud Run debe confirmar el mensaje de Pub/Sub mediante una respuesta dentro de los 600 segundos siguientes, de lo contrario, Pub/Sub volverá a enviar el mensaje y generará una activación duplicada del servicio de Cloud Run.
Casos de uso
Entre los casos prácticos se incluyen los siguientes:
- Transformación de los datos luego de recibir un evento cuando se sube un archivo a un depósito de Cloud Storage
- Procesamiento de los registros de Google Cloud's operations suite con Cloud Run mediante su exportación a Pub/Sub
- Publicación y procesamiento de tus propios eventos personalizados desde los servicios de Cloud Run
Descripción general de la integración
Para integrar el servicio a Pub/Sub, realiza las siguientes acciones:
- Crea un tema de Pub/Sub.
- Agrega código en el servicio de Cloud Run para responder a los mensajes de Pub/Sub que se enviaron al tema que creaste.
- Crea una cuenta de servicio con los permisos necesarios.
- Crea una suscripción de Pub/Sub y asóciala con la cuenta de servicio. Esta suscripción enviará al servicio cualquier mensaje que se publique en el tema.
Antes de comenzar
- Configura tu entorno como se describe en la página de configuración de Cloud Run si aún no lo hiciste.
- En esta guía, se supone que ya tienes un servicio de Cloud Run y que quieres agregar un código que lo integre en Pub/Sub. Si no tienes ese servicio, considera usar el Instructivo de Cloud Run para Pub/Sub en lugar de seguir esta página.
Agrega código para administrar mensajes de Pub/Sub
Edita el código del servicio existente para agregar el código necesario a fin de admitir Pub/Sub. El servicio debe extraer el mensaje de la solicitud y mostrar un código de éxito esperado. En los siguientes fragmentos para los lenguajes seleccionados (puedes usar cualquier lenguaje), se muestra cómo hacerlo para un mensaje simple de Hello World:
Node.js
Python
Comienza a usarlo
Java
Debes codificar el servicio para mostrar un código de respuesta HTTP preciso. Los códigos de éxito, como HTTP 200
o 204
, confirman la recepción del procesamiento completo del mensaje de Pub/Sub. Los códigos de error, como HTTP 400
o 500
, indican que se volverá a intentar con el mensaje, como se describe en Recibe mensajes mediante suscripciones de envío.
Compila y, luego, implementa el servicio de Cloud Run después de actualizarlo con el código de Pub/Sub anterior.
Crea una cuenta de servicio para la suscripción
Debes crear una cuenta de servicio para asociarla con la suscripción de Pub/Sub y darle permiso a fin de invocar el servicio de Cloud Run. Los mensajes de Pub/Sub enviados al servicio de Cloud Run llevarán la identidad de esta cuenta de servicio.
Puedes usar una cuenta de servicio existente para representar la identidad de la suscripción de Pub/Sub o crear una nueva.
A fin de crear una cuenta de servicio nueva y darle permiso para invocar el servicio de Cloud Run, sigue estos pasos:
Console
En la consola de Google Cloud, ve a la página Cuentas de servicio.
Selecciona un proyecto
Ingresa un nombre de cuenta de servicio para mostrar en la consola de Google Cloud.
La consola de Google Cloud genera un ID de cuenta de servicio a partir de este nombre. Si es necesario, edita el ID. No podrás cambiar el ID más adelante.
Opcional: Ingresa una descripción de la cuenta de servicio.
Haz clic en Crear y continuar.
Opcional: Haz clic en el campo Seleccionar una función.
Selecciona Cloud Run > Invocador de Cloud Run.
Haz clic en Listo.
Línea de comandos
Crea la cuenta de servicio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Reemplaza los siguientes elementos:
- SERVICE_ACCOUNT_NAME por un nombre único en minúscula dentro del proyecto de Google Cloud, por ejemplo,
my-invoker-service-account-name
- DISPLAYED_SERVICE_ACCOUNT_NAME por el nombre que deseas mostrar para esta cuenta de servicio, por ejemplo, en la consola,
My Invoker Service Account
- SERVICE_ACCOUNT_NAME por un nombre único en minúscula dentro del proyecto de Google Cloud, por ejemplo,
En Cloud Run, debes otorgar permiso a la cuenta de servicio para invocar el servicio:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Reemplaza los siguientes elementos:
- SERVICE por el nombre del servicio que deseas que Pub/Sub invoque
- SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio
- PROJECT_ID por el ID del proyecto de Google Cloud.
Otórgale a tu cuenta de servicio acceso al proyecto para que tenga el permiso de completar acciones específicas en los recursos de tu proyecto.
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Reemplaza los siguientes elementos:
RESOURCE_ID es el ID del proyecto de Google Cloud.
PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo,
user:my-user@example.com
Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para crear una cuenta de servicio, agrega lo siguiente al archivo
.tf
existente:A fin de otorgar permiso a tu cuenta de servicio para invocar el servicio, agrega lo siguiente al archivo
.tf
existente:
Crea un tema de Pub/Sub
Las solicitudes al servicio se activan mediante mensajes publicados en un tema de Pub/Sub, por lo que deberás crear uno:
Console
Visita la página de temas de Pub/Sub en la consola de Google Cloud.
Haz clic en Crear un tema.
Ingresa un Nombre único para tu tema, por ejemplo, MyTopic.
Línea de comandos
gcloud pubsub topics create TOPIC-NAME
Reemplaza TOPIC-NAME con un nombre de tema único dentro del proyecto de Google Cloud.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
En esta sección, se muestra cómo usar Terraform para definir tu servicio en una configuración de Terraform mediante el recurso google_pubsub_topic
del proveedor de Google Cloud Platform.
Agrega lo siguiente a tu archivo .tf
:
Crea una suscripción de envío y asóciala con la cuenta de servicio
Después de crear el tema de Pub/Sub, debes suscribirte al servicio para recibir mensajes enviados a un tema y asociar la suscripción con la cuenta de servicio que creaste para el servicio. Puedes usar la consola de Google Cloud o la línea de comandos de gcloud:
Console
Ve a la página Temas de Pub/Sub
Haz clic en el tema al que deseas suscribirte.
Haz clic en Create a subscription (Crear una suscripción) para mostrar el formulario de suscripción:
En el formulario, debes hacer lo siguiente:
- Especificar el tipo de entrega push (envío).
- Para la URL de extremos, especifica la URL del servicio, que se muestra en la página de detalles del servicio.
- En el menú desplegable Cuenta de servicio, selecciona la cuenta de servicio que creaste con los permisos necesarios.
- Establece el vencimiento de la suscripción y un plazo de confirmación de recepción de 600 segundos.
- Haga clic en Crear.
Se completó la suscripción. Los mensajes publicados en el tema ahora se enviarán al servicio.
Línea de comandos
Permite que Pub/Sub cree tokens de autenticación en el proyecto:
gcloud projects add-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Reemplaza los siguientes elementos:
- PROJECT-ID por el ID del proyecto de Google Cloud
PROJECT-NUMBER por tu número de proyecto de Google Cloud
El ID y el número del proyecto se enumeran en el panel Información del proyecto en la consola de Google Cloud para el proyecto.
Crea una suscripción de Pub/Sub con la cuenta de servicio que creaste con los permisos necesarios:
gcloud pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=SERVICE-ACCOUNT-NAME@PROJECT-ID.iam.gserviceaccount.com
Reemplaza los siguientes elementos:
- TOPIC-NAME por el tema que creaste antes
- SERVICE-URL por la URL HTTPS que se proporcionó cuando implementaste el servicio. Puedes encontrarla mediante el comando
gcloud run services describe
y la especificación del nombre del servicio; busca la línea del resultado que comienza condomain
- PROJECT-ID por el ID del proyecto de Google Cloud
La marca
--push-auth-service-account
activa las funciones de envío de Pub/Sub para la autenticación y la autorización.Ten en cuenta que el plazo de confirmación se establece en el máximo de 600 segundos.
Se completó la suscripción. Los mensajes publicados en el tema ahora se enviarán al servicio. Puedes enviar un mensaje de prueba al tema mediante el siguiente comando:
gcloud pubsub topics publish TOPIC --message "hello"
Reemplaza TOPIC por el nombre del tema que creaste.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
-
Permite que Pub/Sub cree tokens de autenticación en el proyecto. Agrega lo siguiente a tu archivo
.tf
: -
Crea una suscripción de Pub/Sub con la cuenta de servicio que creaste con los permisos necesarios. Agrega lo siguiente a tu archivo
.tf
: -
Se completó la suscripción. Los mensajes publicados en el tema ahora se enviarán al servicio. Puedes enviar un mensaje de prueba al tema mediante el siguiente comando:
gcloud pubsub topics publish TOPIC --message "hello"
Reemplaza TOPIC por el nombre del tema que creaste.
¿Qué sigue?
- Consulta Restringe el ingreso con el fin de obtener información sobre cómo aumentar la seguridad de producción mediante el uso de controles de entrada internos para limitar el ingreso.
- Consulta el instructivo de Cloud Run para Pub/Sub a fin de obtener una aplicación de muestra completa.
- Consulta el instructivo de Cloud Run para Cloud Storage a fin de obtener una muestra mediante Pub/Sub para impulsar el procesamiento de imágenes asíncronas.
- Consulta la documentación de Pub/Sub para obtener más detalles sobre Pub/Sub.