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

En este tutorial se muestra cómo desplegar una aplicación en contenedores mediante un servicio de Cloud Run autenticado que recibe eventos mediante Pub/Sub. Pub/Sub es un servicio de mensajería en tiempo real totalmente gestionado que te permite enviar y recibir mensajes entre aplicaciones independientes.

Crear un repositorio estándar de Artifact Registry

Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor:

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Sustituye REPOSITORY por un nombre único para el repositorio.

Desplegar un receptor de eventos en Cloud Run

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

  1. Clona el repositorio de GitHub:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    También puedes descargar el ejemplo como un archivo ZIP y extraerlo.

  2. Cambia al directorio que contiene el código de ejemplo 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. Crea el contenedor y súbelo a Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. Despliega la imagen de contenedor en Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. En la petición Allow unauthenticated invocations to trigger-pubsub (y/N)? (¿Permitir invocaciones sin autenticar para trigger-pubsub? [s/n]), responde n para indicar que no.

Cuando veas la URL del servicio de Cloud Run, el despliegue habrá finalizado.

Crear un activador de Eventarc

Cuando se publica un mensaje en el tema de Pub/Sub, el evento activa el servicio de Cloud Run.

  1. Crea un activador para escuchar mensajes de Pub/Sub:

    Nuevo tema de 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=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    De esta forma, se crea un tema de Pub/Sub y un activador para él llamado trigger-pubsub.

    Tema de 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" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto Google Cloud
    • TOPIC_ID: ID del tema de Pub/Sub

    De esta forma, se crea un activador llamado trigger-pubsub para el tema de Pub/Sub.

    Ten en cuenta que, cuando crees un activador de Eventarc por primera vez en un proyecto de Google Cloud , puede haber un retraso en el aprovisionamiento del agente de servicio de Eventarc. Este problema suele resolverse intentando crear el activador de nuevo. Para obtener más información, consulta Errores de permiso denegado.

  2. Confirma que el activador se ha creado correctamente. Ten en cuenta que, aunque el activador se crea inmediatamente, puede tardar hasta dos minutos en estar totalmente operativo.

    gcloud eventarc triggers list --location=${REGION}

    El estado del activador devuelto debe ser ACTIVE: Yes.

Generar y ver un evento

Publica 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 de servicio.

  1. Busca y define el tema de Pub/Sub como variable de entorno:

    export TOPIC_ID=$(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. Para ver las entradas de registro relacionadas con eventos creadas por tu servicio, sigue estos pasos:

    gcloud logging read 'textPayload: "Hello there!"'

    La entrada de registro debería ser similar a la siguiente:

    textPayload: 'Hello, Hello there!'

Puede que los registros tarden unos instantes en aparecer. Si no los ves inmediatamente, vuelve a comprobarlo al cabo de un minuto.