Descripción general
Pub/Sub permite que las aplicaciones aprovechen las colas de mensajes eficientes.
El servicio es compatible con una variedad de servicios de Google Cloud y, en este lab, aprenderás a integrarlo con Cloud Run.
Este lab se basa en usar una infraestructura sin servidores para resolver el caso de uso de un cliente. Tiene tres secciones generales que resuelven un problema técnico:
- Descripción general de la situación
- Recopilación de requisitos
- Desarrollo de un producto viable mínimo
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Habilitar la API de Cloud Run
- Implementar microservicios en Cloud Run
- Crear un tema de Pub/Sub
- Invocar un servicio de Cloud Run desde una suscripción a Pub/Sub
Requisitos
Estos labs se basan en conocimientos intermedios de Google Cloud. Si bien los pasos necesarios se explican en el contenido, sería útil tener conocimientos sobre cualquiera de los siguientes productos:
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Nota: Lee estas instrucciones.
Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico de Google Skills te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que usarás para acceder a Google Cloud durante todo el lab.
Requisitos
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses para el lab.
Nota: Si usas una Pixelbook, abre una ventana de incógnito para ejecutar el lab.
Cómo iniciar tu lab y acceder a la consola
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu forma de pago.
A la izquierda, verás un panel con las credenciales temporales que debes usar para este lab.

-
Copia el nombre de usuario y, luego, haz clic en Abrir la consola de Google.
El lab inicia los recursos y abre otra pestaña que muestra la página Elige una cuenta.
Sugerencia: Abre las pestañas en ventanas separadas, una junto a la otra.
-
En la página Elige una cuenta, haz clic en Usar otra cuenta. Se abrirá la página de acceso.

-
Pega el nombre de usuario que copiaste del panel Detalles de la conexión. Luego, copia y pega la contraseña.
Nota: Debes usar las credenciales del panel Detalles de la conexión. No uses tus credenciales de Google Skills. Si tienes una cuenta propia de Google Cloud, no la utilices para este lab para no incurrir en cargos.
- Haz clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Cloud en esta pestaña.
Nota: Para ver el menú con una lista de los productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda de la pantalla.
Activa Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
-
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

-
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
- Puedes solicitar el nombre de la cuenta activa con este comando:
gcloud auth list
Resultado:
Credentialed accounts:
- @.com (active)
Resultado de ejemplo:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Puedes solicitar el ID del proyecto con este comando:
gcloud config list project
Resultado:
[core]
project =
Resultado de ejemplo:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Nota:
La documentación completa de gcloud está disponible en la
guía de descripción general de gcloud CLI
.
Descripción general de la situación

En este lab, ayudarás al equipo de desarrollo de Critter Junction a investigar el uso de Pub/Sub para sus requisitos.
El equipo quiere explorar cómo realizar un procesamiento eficiente de colas en sus aplicaciones.
Recopilación de requisitos
El equipo de Critter Junction tiene una aplicación web pública y varios microservicios basados en Google Cloud.
La comunicación entre los microservicios es fundamental y necesita que se establezca una forma de mensajería resiliente entre cada componente de la aplicación.
Los intentos anteriores del equipo de desarrollo no tuvieron éxito porque los microservicios necesitaban saber mucho sobre los demás (acoplamiento alto). Además, si un servicio no estuviera disponible temporalmente, se perderían los mensajes.
El equipo necesita una solución que incluya un nivel de resiliencia sin introducir dependencias de servicio adicionales (acoplamiento bajo) en sus sistemas. Ahora que sabes un poco más sobre Critter Junction y los problemas que enfrenta, intenta priorizar los criterios clave para llegar a una solución.
Define las prioridades de Critter Junction
Para determinar los casos de uso y las prioridades clave, se realizan debates iniciales con las partes interesadas de Critter Junction.
Los resultados de los debates se muestran a continuación:
|
Ref.
|
Historia de usuario
|
|
1
|
Como desarrollador principal, quiero asegurarme de que la mensajería sea resiliente, de modo que las operaciones de servicio se restablezcan sin necesidad de intervención manual.
|
|
2
|
Como gerente de programas, quiero que los servicios puedan escalar sin problemas para que la carga transaccional adicional no genere inestabilidad en el sistema.
|
|
3
|
Como líder de operaciones, quiero que los servicios se administren para que el personal pueda enfocarse en trabajos de mantenimiento importantes.
|
A partir de una conversación con los líderes de equipo, se definieron las siguientes tareas de alto nivel:
|
Ref.
|
Condiciones que deben cumplirse
|
|
1
|
Se debe establecer un componente asíncrono para la comunicación entre servicios.
|
|
2
|
Se debe implementar la escalabilidad comprobada de la solución.
|
|
3
|
Los servicios deben ejecutarse sin supervisión.
|
El equipo de Critter Junction quiere definir una solución que se pueda implementar rápidamente. Teniendo en cuenta los requisitos, el equipo de desarrollo reduce sus opciones a las siguientes:
Consulta una comparación entre Pub/Sub y Cloud Tasks para obtener más información.
|
Producto
|
Caso de uso
|
Elección
|
|
Pub/Sub
|
"Es óptimo para patrones más generales de distribución y transferencia de datos de eventos en los que se puede prescindir de cierto grado de control sobre la ejecución".
|

|
|
Cloud Tasks
|
"Adecuado para casos de uso en los que un productor de tareas necesita diferir o controlar el tiempo de ejecución de un webhook específico o una llamada de procedimiento remoto".
|

|
Después de considerar los requisitos, el equipo de desarrollo elige Pub/Sub porque solo requiere un patrón de distribución basado en envío. En el siguiente diagrama de arquitectura de alto nivel, se resume el producto viable mínimo (MVP) que se debe investigar.

En la solución propuesta, Pub/Sub se usará para controlar mensajes asíncronos entre servicios.
Tarea 1: Asegúrate de que la API de Pub/Sub esté habilitada de forma correcta
Para garantizar el acceso a la API necesaria, vuelve a habilitar la API de Pub/Sub.
-
En el menú de navegación (
) de la consola de Google Cloud, en APIs y servicios, haz clic en Biblioteca.
-
En el cuadro Buscar, escribe Pub/Sub.
-
Haz clic en el resultado de la API de Cloud Pub/Sub.
-
Haz clic en Administrar.
-
Haz clic en Inhabilitar API (Disable API). Si se te solicita confirmar, haz clic en Inhabilitar.
-
Nuevamente, si aparece el mensaje ¿Quieres inhabilitar la API de Cloud Pub/Sub y las APIs dependientes?, haz clic en Confirmar.
-
Para volver a habilitar la API, haz clic en Habilitar.
Cuando vuelvas a habilitar la API, la página mostrará información sobre ella.

Tarea 2: Desarrolla un producto viable mínimo (MVP)
Critter Junction tiene varios servicios de Cloud Run que le gustaría integrar con Pub/Sub.
Para crear un MVP, se requieren las siguientes tareas:
- Implementar un servicio de productor
- Implementar un servicio de consumidor
- Crear una cuenta de servicio
- Crear un tema de Pub/Sub
Implementa un servicio de productor
Critter Junction especifica que el servicio store externo debe configurarse como un extremo público, y se indican estos requisitos:
|
Tipo
|
Permiso
|
Descripción
|
|
Acceso por URL
|
--allow-unauthenticated
|
Hace que el servicio sea PÚBLICO (los usuarios no autenticados pueden verlo).
|
|
Permiso de invocación
|
allUsers
|
Permite que cualquiera invoque o active el servicio.
|
El servicio store del productor acepta conexiones públicas basadas en Internet para órdenes de compra.
Para ello, el servicio no debe requerir autenticación, y cualquier persona debe poder activarlo.
La información que recopila este servicio se pasará a los servicios de consumidor de backend.
Configura e implementa el servicio store en Cloud Run. Ejecuta los siguientes comandos en Cloud Shell:
-
Habilita la API de Cloud Run y configura tu entorno de shell:
gcloud services enable run.googleapis.com
-
Crea una variable de entorno LOCATION:
LOCATION={{{project_0.default_region|REGION}}}
-
Establece la región de procesamiento:
gcloud config set compute/region $LOCATION
-
Implementa el servicio store:
gcloud run deploy store-service \
--image gcr.io/qwiklabs-resources/gsp724-store-service \
--region $LOCATION \
--allow-unauthenticated
Haz clic en Revisar mi progreso para verificar el objetivo.
Implementar el servicio store de Cloud Run
Una vez que se implementa el servicio store, se puede acceder a él de forma pública a través de Internet.
Implementa un servicio de consumidor
El equipo de desarrollo también debe configurar el servicio order al que se puede acceder en un extremo privado.
A diferencia del servicio store, el servicio order no está diseñado para ser accesible públicamente a través de Internet y solo debe invocarse con una cuenta que tenga los permisos adecuados.
Para los servicios basados en Cloud Run, esto se puede lograr con la siguiente configuración:
|
Tipo
|
Permiso
|
Descripción
|
|
Acceso por URL
|
--no-allow-unauthenticated
|
Hace que el servicio sea PRIVADO (solo los usuarios autenticados pueden verlo).
|
|
Rol/Permiso de invocación
|
Invocador de Cloud Run
|
Permite que solo una cuenta con el rol de Invocador de Cloud Run invoque el servicio.
|
Configura e implementa el servicio order:
gcloud run deploy order-service \
--image gcr.io/qwiklabs-resources/gsp724-order-service \
--region $LOCATION \
--no-allow-unauthenticated
Haz clic en Revisar mi progreso para verificar el objetivo.
Implementar el servicio order de Cloud Run
Ahora, solo las cuentas autenticadas pueden acceder al servicio e invocarlo.
Descripción general de Pub/Sub
Pub/Sub es un servicio de mensajería asíncrona que separa los servicios que producen eventos de los servicios que consumen y procesan eventos.
Conceptos básicos de Pub/Sub:
- Tema
- Suscripción
- Mensaje
- Atributo del mensaje
Pub/Sub requiere que se completen algunas opciones antes de una implementación exitosa.
En la consola de Google Cloud, se puede acceder a Pub/Sub en la opción de menú Macrodatos.
|
Campo
|
Descripción
|
|
Tema
|
Un recurso con nombre al que los publicadores envían mensajes.
|
|
Suscripción
|
Un recurso con nombre que representa la transmisión de mensajes de un único tema específico que se deben entregar a la aplicación suscripta. Para obtener más detalles sobre la semántica de entrega de mensajes y las suscripciones, consulta la guía para suscriptores.
|
|
Mensaje
|
La combinación de datos y atributos (opcionales) que un publicador envía a un tema y se entrega por último a los suscriptores.
|
|
Atributo del mensaje
|
Un par clave-valor que un publicador puede definir para un mensaje. Por ejemplo, la clave iana.org/language_tag y el valor en se podrían agregar a los mensajes para indicar que un suscriptor de habla inglesa puede leerlo.
|
Pub/Sub puede usarse en una amplia variedad de casos de uso, y los más comunes se enumeran a continuación:
|
Caso de uso
|
Ejemplo
|
|
Balanceo de cargas de trabajo en clústeres de red
|
Por ejemplo, una gran cola de tareas se puede distribuir de forma eficiente entre varios trabajadores, como las instancias de Compute Engine.
|
|
Implementación de flujos de trabajo asíncronos
|
Por ejemplo, una aplicación de procesamiento de pedidos puede colocar un pedido en un tema, desde el cual uno o más trabajadores pueden procesarlo.
|
|
Distribución de notificaciones de eventos
|
Por ejemplo, un servicio que acepta registros de usuarios puede enviar notificaciones cada vez que un usuario nuevo se registra, y los servicios downstream pueden suscribirse para recibir notificaciones del evento.
|
|
Actualización de cachés distribuidas
|
Por ejemplo, una aplicación puede publicar eventos de invalidación para actualizar los IDs de los objetos que cambiaron.
|
|
Registro en varios sistemas
|
Por ejemplo, una instancia de Google Compute Engine puede escribir registros en el sistema de supervisión, en una base de datos para consultas posteriores, etcétera.
|
|
Transmisión de datos de varios procesos o dispositivos
|
Por ejemplo, un sensor residencial puede transmitir datos a servidores de backend alojados en la nube.
|
|
Mejora de la confiabilidad
|
Por ejemplo, un servicio de Compute Engine de una zona puede operar en zonas adicionales mediante una suscripción a un tema común para recuperarse ante fallas en una zona o región.
|
Tarea 3: Implementa Pub/Sub
Ahora que los servicios de productor (store service) y consumidor (order service) se implementaron correctamente, puedes enfocarte en las funciones principales de Pub/Sub. Para usar Pub/Sub, se requieren dos actividades:
- Crear un tema
- Crear una suscripción
Crea un tema
Cuando se crea un evento asíncrono (envío) en un tema, las aplicaciones que se suscriben al tema podrán procesar los mensajes asociados.
El procesamiento de eventos de envío con Pub/Sub proporciona una forma escalable de manejar la mensajería en Google Cloud.
El nuevo tema de Pub/Sub tendrá los siguientes valores.
|
Campo
|
Valor
|
|
Nombre
|
ORDER_PLACED
|
|
Encriptación
|
Clave administrada por Google
|
- Crea un tema en Pub/Sub:
gcloud pubsub topics create ORDER_PLACED
Nota: Los mensajes que se envían con Pub/Sub se codifican como base64 cuando se transmiten y deben decodificarse cuando se reciben.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un tema de Pub/Sub
Con la creación del tema de Pub/Sub, los mensajes ahora se pueden almacenar y entregar de forma independiente y resiliente.
Crearás una suscripción en una tarea posterior.
Tarea 4: Crea una cuenta de servicio
Para entregar un mensaje de Pub/Sub a un servicio de Cloud Run, necesitas una suscripción a Pub/Sub. La suscripción debe poder invocar el servicio con una cuenta de servicio que tenga los permisos adecuados. En este lab, el servicio order del consumidor se invocará con una suscripción que usa la cuenta de servicio.
Para lograr esta funcionalidad, se requieren las siguientes actividades:
- Crear una cuenta de servicio
- Vincular los permisos del rol de Invocador a la cuenta de servicio
Creación de cuentas de servicio
Crea una nueva cuenta de servicio que proporcione acceso autenticado.
-
Crea una cuenta de servicio nueva llamada Order Initiator:
gcloud iam service-accounts create pubsub-cloud-run-invoker \
--display-name "Order Initiator"
-
Confirma que se haya creado la cuenta de servicio:
gcloud iam service-accounts list --filter="Order Initiator"
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear una cuenta de servicio
En este punto, la cuenta de servicio Order Initiator está disponible. Sin embargo, no tiene roles ni permisos asignados.
Para asignarle permisos de IAM, debes aplicar o vincular permisos de rol a la cuenta de servicio.
Vincula permisos de rol
Para vincular permisos a una cuenta que se usa para invocar un servicio en Cloud Run, necesitas la siguiente información:
|
Categoría
|
Descripción
|
|
Nombre del servicio
|
El nombre del servicio implementado que se invocará.
|
|
Miembro
|
La cuenta a la que se le otorgarán los permisos de rol.
|
|
Región
|
La región en la que se implementa el servicio.
|
|
Plataforma
|
El tipo de plataforma, como Cloud Run (administrada), Cloud Run for Anthos o Cloud Run para VMWare.
|
-
Vincula la cuenta de servicio con el rol Invocador de Cloud Run en el servicio order:
gcloud run services add-iam-policy-binding order-service --region $LOCATION \
--member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \
--role=roles/run.invoker --platform managed
Ahora, la nueva cuenta de servicio tiene permisos para invocar un servicio de Cloud Run.
-
Crea una variable de entorno para almacenar el número de proyecto:
PROJECT_NUMBER=$(gcloud projects list \
--filter="qwiklabs-gcp" \
--format='value(PROJECT_NUMBER)')
-
Habilita la cuenta de servicio del proyecto para crear tokens:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator
Tarea 5: Crea una suscripción a Pub/Sub
En esta tarea, crearás la suscripción a Pub/Sub y la configurarás para usar la nueva cuenta de servicio.
-
Crea una variable de entorno para almacenar el extremo del servicio order:
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--region $LOCATION \
--format="value(status.address.url)")
-
Crea una suscripción y vincúlala al servicio order:
gcloud pubsub subscriptions create order-service-sub \
--topic ORDER_PLACED \
--push-endpoint=$ORDER_SERVICE_URL \
--push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear una suscripción
Tarea 6: Prueba la aplicación
Para probar la aplicación, envía una carga útil de JSON de muestra al servicio store.
-
Crea un archivo llamado test.json con el siguiente contenido. Puedes usar el editor que prefieras, como nano, vi o el editor de Cloud Shell.
{
"billing_address": {
"name": "Kylie Scull",
"address": "6471 Front Street",
"city": "Mountain View",
"state_province": "CA",
"postal_code": "94043",
"country": "US"
},
"shipping_address": {
"name": "Kylie Scull",
"address": "9902 Cambridge Grove",
"city": "Martinville",
"state_province": "BC",
"postal_code": "V1A",
"country": "Canada"
},
"items": [
{
"id": "RW134",
"quantity": 1,
"sub-total": 12.95
},
{
"id": "IB541",
"quantity": 2,
"sub-total": 24.5
}
]
}
-
Crea una variable de entorno para almacenar el extremo del servicio store:
STORE_SERVICE_URL=$(gcloud run services describe store-service \
--region $LOCATION \
--format="value(status.address.url)")
-
Para probar la comunicación entre los microservicios y generar un ID de pedido, publica un mensaje en el servicio store:
curl -X POST -H "Content-Type: application/json" -d @test.json $STORE_SERVICE_URL
El resultado del comando indica que se creó un pedido correctamente y debería ser similar al siguiente:
{"status":"success","order_id":"6pa5mmh"}
Servicio store
El servicio store (extremo público) usa Pub/Sub para transmitir información al servicio order (extremo privado).
-
En el menú de navegación de la consola de Google Cloud (
), haz clic en Cloud Run.
-
Haz clic en el vínculo de store-service.
-
Para ver los registros del servicio, haz clic en Registros (Logs). Verifica los registros del servicio store para ver el ID del pedido que se generó.
-
Agrega el filtro de registro ORDER ID para ver el ID generado por el servicio store.

Servicio order
El servicio order recibe un mensaje del servicio store que se pasó con Pub/Sub.
-
Consulta los registros del servicio order para confirmar que los datos JSON se transfirieron correctamente.
-
Agrega el filtro de registro Order Placed para ver el ID de pedido generado que se pasó al servicio order.

Critter Junction actualizó su solución para aprovechar Pub/Sub.
En el siguiente diagrama de arquitectura de alto nivel, se resume la solución implementada.

Implementaste Pub/Sub en Google Cloud de forma correcta para comunicarte de manera asíncrona entre los servicios de Cloud Run.
¡Felicitaciones!
En este lab, aprendiste a integrar servicios de Cloud Run con Pub/Sub en tu infraestructura de Google Cloud.
Aprendiste todo esto:
- Implementar servicios en Cloud Run
- Crear una cuenta de servicio con el rol y los permisos adecuados
- Definir un tema de Pub/Sub
- Vincular una suscripción a Pub/Sub con una cuenta de servicio
Próximos pasos y más información
Sigue la serie de videos Serverless Expeditions para obtener más información sobre cómo usar estos productos en tu proyecto.
Última actualización del manual: 20 de febrero de 2024
Prueba más reciente del lab: 20 de febrero de 2024
Copyright 2026 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.