Recibe eventos de Pub/Sub mediante un servicio autenticado de Cloud Run

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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:

  1. Implementar en Cloud Run un servicio de receptor de eventos que requiera invocaciones autenticadas.

  2. Crear un activador de Eventarc que conecte un tema de Pub/Sub con el servicio de Cloud Run.

  3. Publicar un mensaje en el tema de Pub/Sub para generar un evento.

  4. 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

    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.

  1. 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.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. 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.

  4. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. 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.

  6. Instala y, luego, inicializa Google Cloud CLI.
  7. Actualiza los componentes de gcloud:
    gcloud components update
  8. Accede con tu cuenta:
    gcloud auth login
  9. Habilita las API:
    gcloud services enable run.googleapis.com \
      eventarc.googleapis.com \
      pubsub.googleapis.com \
      cloudbuild.googleapis.com
  10. 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}
    
    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.
  11. 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.
  12. 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
  13. 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.
  14. 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 o domain:example.domain.com

  15. 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 o domain:example.domain.com

Implementa un receptor de eventos en Cloud Run

Implementa un servicio de Cloud Run que registre el contenido de un evento.

  1. 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.

  2. 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/
  3. 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}
    
  4. Implementa la imagen del contenedor en Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \
      --region=${REGION}
    
  5. 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.

  1. 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 llamado trigger-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.

  2. 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.

  1. 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)'))
    
  2. 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.

  3. 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:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Elimina recursos de instructivos

  1. 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.

  2. 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

  3. Borra otros recursos de Google Cloud que creaste en este instructivo:

    • Borrar el activador de Eventarc:
      gcloud eventarc triggers delete TRIGGER_NAME
      
      Reemplaza TRIGGER_NAME por el nombre de tu activador.

¿Qué sigue?