En este instructivo, se muestra cómo implementar una aplicación alojada en contenedores mediante un servicio autenticado de Cloud Run que recibe eventos mediante Pub/Sub. Pub/Sub es un servicio de mensajería en tiempo real completamente administrado que te permite enviar y recibir mensajes entre aplicaciones independientes.
Objetivos
En este instructivo, podrás:
Implementar en Cloud Run un servicio de receptor de eventos que requiera invocaciones autenticadas.
Crear un activador de Eventarc que conecte un tema de Pub/Sub con el servicio de Cloud Run.
Publicar un mensaje en el tema de Pub/Sub para generar un evento.
Visualizar el evento en los registros de Cloud Run.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
- Instala y, luego, inicializa Google Cloud CLI.
- Actualiza los componentes de gcloud:
gcloud components update
- Accede con tu cuenta:
gcloud auth login
- Habilita las API:
gcloud services enable run.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ cloudbuild.googleapis.com
- Establece las variables de configuración que se usan en este instructivo:
export REGION=us-central1 gcloud config set project PROJECT_ID gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
ReemplazaPROJECT_ID
por el ID del proyecto de Google Cloud. - Crea una cuenta de servicio para el proyecto. Por ejemplo:
gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
Después de crear una cuenta de servicio, pueden tardar hasta 7 minutos antes de que puedas usarla. Si intentas usar una cuenta de servicio de forma inmediata después de crearla y recibes un error, espera al menos 60 segundos y vuelve a intentarlo. - Para confirmar que se creó
sample-service-account
, ejecuta lo siguiente:gcloud iam service-accounts list
El resultado debería ser similar al ejemplo siguiente:DISPLAY NAME EMAIL DISABLED Default compute service account PROJECT_NUMBER-compute@developer.gserviceaccount.com False Sample service account sample-service-account@PROJECT_ID.iam.gserviceaccount.com False
- Otorga la función
run.invoker
a la cuenta de servicio:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/run.invoker"
Reemplaza lo siguiente:
-
PROJECT_ID
: El ID del proyecto. -
SERVICE_ACCOUNT_EMAIL
: la dirección de correo electrónico de la cuenta de servicio que se muestra en el paso anterior.
-
- Asigna la función
eventarc.admin
a la cuenta de usuario:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:USER_EMAIL" \ --role='roles/eventarc.admin'
Reemplaza los siguientes valores:
PROJECT_ID
: Es el ID del proyecto de Google Cloud.USER_EMAIL
: la dirección de correo electrónico del usuario.Ejemplos:
user:test-user@gmail.com
,group:admins@example.com
,serviceAccount:test123@example.domain.com
odomain:example.domain.com
- Asigna la función
iam.serviceAccountUser
a la cuenta de usuario:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \ --member="user:USER_EMAIL" \ --role="roles/iam.serviceAccountUser"
Reemplaza los siguientes valores:
PROJECT_ID
: Es el ID del proyecto de Google Cloud.SERVICE_ACCOUNT_ID
: es el ID de la cuenta de servicio; por ejemplo,sample-service-account
.USER_EMAIL
: la dirección de correo electrónico del usuario.Ejemplos:
user:test-user@gmail.com
,group:admins@example.com
,serviceAccount:test123@example.domain.com
odomain:example.domain.com
Algunos de los pasos de este documento podrían no funcionar correctamente si tu organización aplica restricciones a tu entorno de Google Cloud. En ese caso, es posible que no puedas completar tareas como crear direcciones IP públicas o claves de cuenta de servicio. Si realizas una solicitud que muestra un error sobre las restricciones, consulta cómo desarrollar aplicaciones en un entorno restringido de Google Cloud.
Implementa un receptor de eventos en Cloud Run
Implementa un servicio de Cloud Run que registre el contenido de un evento.
Clone el repositorio:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ve al directorio que contiene el código de muestra de Cloud Run:
Node.js
cd nodejs-docs-samples/eventarc/pubsub/
Python
cd python-docs-samples/eventarc/pubsub/
Go
cd golang-samples/eventarc/pubsub/
Java
cd java-docs-samples/eventarc/pubsub/
Ruby
cd ruby-docs-samples/eventarc/pubsub/
C#
cd dotnet-docs-samples/eventarc/pubsub/
Compila el contenedor para el servicio de Cloud Run:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=trigger-pubsub gcloud builds submit --tag gcr.io/${PROJECT_ID}/${SERVICE_NAME}
Implementa la imagen del contenedor en Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \ --region=${REGION}
En el mensaje ¿Permitir invocaciones no autenticadas en trigger-pubsub (y/N)?, responde
n
para “No”.
Cuando veas la URL del servicio de Cloud Run, la implementación estará completa.
Crea un activador de Eventarc
Cuando se publica un mensaje en el tema de Pub/Sub, el evento activa el servicio de Cloud Run. El servicio requiere autenticación, y un emisor que tenga una cuenta de servicio con los roles y permisos de IAM necesarios para usar el recurso debe activar el evento.
Crea un activador para detectar los mensajes de Pub/Sub:
Nuevo tema Pub/Sub
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=SERVICE_ACCOUNT_USER_EMAIL
Reemplaza
SERVICE_ACCOUNT_EMAIL
por la dirección de correo electrónico de la cuenta de servicio.
Esto crea un nuevo tema de Pub/Sub y un activador para este llamadotrigger-pubsub
.Tema de Pub/Sub existente
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=SERVICE_ACCOUNT_EMAIL
Reemplaza lo siguiente:
PROJECT_ID
es tu ID del proyecto de Cloud.TOPIC_ID
es el ID del tema de Pub/Sub existente.SERVICE_ACCOUNT_EMAIL
es la dirección de correo electrónico de la cuenta de servicio.Esto crea un activador llamado
trigger-pubsub
para el tema de Pub/Sub existente.
Confirma que el activador se haya creado correctamente:
gcloud eventarc triggers list --location=us-central1
El estado del activador que se muestra debe ser
ACTIVE: Yes
.
Genera y visualiza un evento
Publicar un mensaje en un tema de Pub/Sub para generar un evento y activar el servicio de Cloud Run. El servicio de Cloud Run registra los mensajes en los registros del servicio.
Busca y establece el tema Pub/Sub como una variable de entorno:
export TOPIC_ID=$(basename $(gcloud eventarc triggers describe ${SERVICE_NAME} \ --format='value(transport.pubsub.topic)'))
Envía un mensaje al tema de Pub/Sub para generar un evento:
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
El evento se envía al servicio de Cloud Run, que registra el mensaje del evento.
Ve las entradas de registro relacionadas con eventos creadas por tu servicio:
gcloud logging read 'textPayload: "Hello there!"'
La entrada de registro debería ser similar a la siguiente:
textPayload: 'Hello, Hello there!'
Los registros pueden tardar un poco en aparecer. Si no los ves de inmediato, vuelve a revisar en un minuto.
Limpia
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Elimina recursos de instructivos
Usa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:
gcloud run services delete SERVICE_NAME
En el ejemplo anterior,
SERVICE_NAME
es el nombre del servicio que elegiste.También puedes borrar los servicios de Cloud Run desde la consola de Google Cloud.
Quita todas las opciones de configuración predeterminadas de la CLI de gcloud que agregaste durante la configuración del instructivo.
Por ejemplo:
gcloud config unset run/region
o
gcloud config unset project
Borra otros recursos de Google Cloud que creaste en este instructivo:
- Borrar el activador de Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME
ReemplazaTRIGGER_NAME
por el nombre de tu activador.
- Borra la imagen del contenedor llamada
gcr.io/PROJECT_ID/trigger-pubsub
de Container Registry.
- Borrar el activador de Eventarc: