Compilar una canalización de procesamiento de BigQuery para Cloud Run for Anthos con Eventarc

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

En este instructivo, se muestra cómo usar Eventarc para compilar una canalización de procesamiento que programe consultas a un conjunto de datos públicos de BigQuery, genere gráficos basados en los datos y comparta vínculos a los gráficos por correo electrónico.

Objetivos

En este instructivo, compilarás e implementarás tres servicios de Cloud Run for Anthos que se ejecutan en un clúster de Google Kubernetes Engine (GKE) y que reciben eventos mediante Eventarc:

  1. Ejecutor de consultas: Se activa cuando los trabajos de Cloud Scheduler publican un mensaje en un tema de Pub/Sub. Este servicio usa la API de BigQuery para recuperar datos de un conjunto de datos públicos sobre el COVID-19 y guardar los resultados en una nueva tabla de BigQuery.
  2. Creador de gráficos: Se activa cuando el servicio del ejecutor de consultas publica un mensaje en un tema de Pub/Sub. Este servicio genera gráficos con la biblioteca de trazado de Python Matplotlib y guarda los gráficos en un bucket de Cloud Storage.
  3. Notificador: Se activa mediante registros de auditoría cuando el servicio Creador de gráficos almacena un gráfico en un bucket de Cloud Storage; este servicio usa el servicio de correo electrónico SendGrid para enviar vínculos a los gráficos a una dirección de correo electrónico.

En el siguiente diagrama, se muestra la arquitectura de alto nivel:

Canalización de procesamiento de BigQuery

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

  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. Habilita las API de Cloud Build, Cloud Logging, Cloud Run for Anthos, Cloud Scheduler, Container Registry, Eventarc, GKE, Pub/Sub, and Resource Manager .

    Habilita las API

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

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

  7. Habilita las API de Cloud Build, Cloud Logging, Cloud Run for Anthos, Cloud Scheduler, Container Registry, Eventarc, GKE, Pub/Sub, and Resource Manager .

    Habilita las API

  8. Instala y, luego, inicializa Google Cloud CLI.
  9. Actualiza los componentes de gcloud:
    gcloud components update
  10. Accede con tu cuenta:
    gcloud auth login
  11. Selecciona Google Cloud Storage y habilita los tipos de registro Lectura de administración, Lectura de datos y Escritura de datos: Ir a registros de auditoría de Cloud
  12. Establece los valores predeterminados que se usan en este instructivo:
    CLUSTER_NAME=events-cluster
    CLUSTER_LOCATION=us-central1
    PROJECT_ID=PROJECT_ID
    
    gcloud config set project $PROJECT_ID
    gcloud config set run/region $CLUSTER_LOCATION
    gcloud config set run/cluster $CLUSTER_NAME
    gcloud config set run/cluster_location $CLUSTER_LOCATION
    gcloud config set run/platform gke
    gcloud config set eventarc/location $CLUSTER_LOCATION
    
    Reemplaza PROJECT_ID con el ID del proyecto.
  13. Descarga e instala la herramienta de administración de código fuente de Git.

Crea una clave de API de SendGrid

SendGrid es un proveedor de correo electrónico basado en la nube que te permite enviar correos electrónicos sin tener que mantener servidores de correo electrónico.

  1. Accede a Sendgrid y ve a Configuración > Claves de API.
  2. Haz clic en Crear clave de API.
  3. Selecciona los permisos de la clave. La clave debe tener como mínimo permisos de envío de correo electrónico para enviar correos electrónicos.
  4. Haz clic en Guardar para crear la clave.
  5. SendGrid genera una clave nueva. Esta es la única copia de la clave, así que asegúrate de copiarla y guardarla para más adelante.

Crea un clúster de GKE para Cloud Run for Anthos

Crea un clúster con Workload Identity habilitado para que pueda acceder a los servicios de Google Cloud desde aplicaciones que se ejecutan dentro de GKE. Workload Identity también es necesario para reenviar eventos mediante Eventarc.

  1. Crea un clúster de GKE para Cloud Run for Anthos con los complementos CloudRun, HttpLoadBalancing y HorizontalPodAutoscaling.

    gcloud beta container clusters create $CLUSTER_NAME \
      --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
      --machine-type=n1-standard-4 \
      --enable-autoscaling --min-nodes=2 --max-nodes=10 \
      --no-issue-client-certificate --num-nodes=2  \
      --logging=SYSTEM,WORKLOAD \
      --monitoring=SYSTEM \
      --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
      --zone us-central1 \
      --release-channel=rapid \
      --workload-pool=$PROJECT_ID.svc.id.goog
    
  2. Espera unos minutos a que finalice la creación del clúster. Durante el proceso, es posible que veas advertencias que puedes ignorar de forma segura. Cuando se crea el clúster, el resultado es similar al siguiente:

    Creating cluster ...done.
    Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/my-cluster].
    

Configura la cuenta de servicio de GKE

Configura una cuenta de servicio de GKE para que actúe como la cuenta de servicio de procesamiento predeterminada.

  1. Crea una vinculación de Identity and Access Management (IAM) entre las cuentas de servicio:

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/default]" \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com
    
  2. Agrega la anotación iam.gke.io/gcp-service-account a la cuenta de servicio de GKE mediante la dirección de correo electrónico de la cuenta de servicio de procesamiento:

    kubectl annotate serviceaccount \
      --namespace default \
      default \
      iam.gke.io/gcp-service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

Habilita los destinos de GKE

Para permitir que Eventarc administre recursos en el clúster de GKE, habilita los destinos de GKE y vincula la cuenta de servicio de Eventarc con los roles necesarios.

  1. Habilita los destinos de GKE para Eventarc:

    gcloud eventarc gke-destinations init
    
  2. Cuando se te solicite vincular los roles necesarios, ingresa y.

    Los siguientes roles están vinculados:

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Crea una cuenta de servicio y vincula los roles de acceso

Antes de crear el activador de Eventarc, configura una cuenta de servicio administrada por el usuario y asígnale roles específicos para que Eventarc pueda reenviar los eventos de Pub/Sub.

  1. Crea una cuenta de servicio llamada TRIGGER_GSA:

    TRIGGER_GSA=eventarc-bigquery-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. Otorga las funciones pubsub.subscriber, monitoring.metricWriter y eventarc.eventReceiver a la cuenta de servicio:

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/eventarc.eventReceiver"
    

Cree un bucket de Cloud Storage

Crea un bucket de Cloud Storage para guardar los gráficos. Asegúrate de que el bucket y los gráficos estén disponibles de forma pública y en la misma región que tu servicio de Cloud Run for Anthos:

  export BUCKET="$(gcloud config get-value core/project)-charts"
  gsutil mb -l $(gcloud config get-value run/region) gs://${BUCKET}
  gsutil uniformbucketlevelaccess set on gs://${BUCKET}
  gsutil iam ch allUsers:objectViewer gs://${BUCKET}
  

Clona el repositorio

Clona el repositorio de GitHub.

  git clone https://github.com/GoogleCloudPlatform/eventarc-samples
  cd eventarc-samples/processing-pipelines

Implementa el servicio de notificador

Desde el directorio bigquery/notifier/python, implementa un servicio de Cloud Run for Anthos que reciba eventos del creador de gráficos y use SendGrid para enviar vínculos por correo electrónico a los gráficos generados.

  1. Compila y envía la imagen del contenedor:

    pushd bigquery/notifier/python
    export SERVICE_NAME=notifier
    docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 .
    docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
    popd
    
  2. Implementa la imagen de contenedor en Cloud Run for Anthos y pasa una dirección a la que se enviarán los correos electrónicos. Esto es lo que sucede con la clave de API de SendGrid:

    export TO_EMAILS=EMAIL_ADDRESS
    export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY
    gcloud run deploy ${SERVICE_NAME} \
        --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \
        --update-env-vars TO_EMAILS=${TO_EMAILS},SENDGRID_API_KEY=${SENDGRID_API_KEY},BUCKET=${BUCKET}
    

    Reemplaza lo siguiente:

    • EMAIL_ADDRESS por una dirección de correo electrónico para enviar los vínculos a los gráficos generados
    • YOUR_SENDGRID_API_KEY por la clave de API de SendGrid que anotaste antes

Cuando veas la URL del servicio, se completará la implementación.

Crea un activador para el servicio Notificador

El activador de Eventarc para el servicio Notificador implementado en los filtros de Cloud Run for Anthos de los registros de auditoría de Cloud Storage donde el methodName es storage.objects.create.

  1. Crea el activador:

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Esto crea un activador llamado trigger-notifier-gke.

Implementa el servicio del creador de gráficos

Desde el directorio bigquery/chart-creator/python, implementa un servicio de Cloud Run for Anthos que reciba eventos del ejecutor de consultas, recupera datos de una tabla de BigQuery para un país específico y, luego, genera un gráfico mediante Matplotlib, a partir de los datos. El gráfico se sube a un bucket de Cloud Storage.

  1. Compila y envía la imagen del contenedor:

    pushd bigquery/chart-creator/python
    export SERVICE_NAME=chart-creator
    docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 .
    docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
    popd
    
  2. Implementa la imagen de contenedor en Cloud Run for Anthos y pasa BUCKET:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \
      --update-env-vars BUCKET=${BUCKET}
    

Cuando veas la URL del servicio, se completará la implementación.

Crea un activador para el servicio Creador de gráficos

El activador de Eventarc para el servicio Creador de gráficos implementado en los filtros de Cloud Run for Anthos de los mensajes publicados en un tema de Pub/Sub.

  1. Crea el activador:

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Esto crea un activador llamado trigger-chart-creator-gke.

  2. Configura la variable de entorno del tema de Pub/Sub.

    export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))
    

Implementa el servicio del ejecutor de consultas

Desde el directorio processing-pipelines, implementa un servicio de Cloud Run for Anthos que reciba eventos de Cloud Scheduler, recupera datos de un conjunto de datos públicos del COVID-19 y guarda los resultados en una tabla de BigQuery nueva.

  1. Compila y envía la imagen del contenedor:

    export SERVICE_NAME=query-runner
    docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 -f bigquery/${SERVICE_NAME}/csharp/Dockerfile .
    docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
    
  2. Implementa la imagen de contenedor en Cloud Run for Anthos y pasa PROJECT_ID y TOPIC_QUERY_COMPLETED:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \
      --update-env-vars PROJECT_ID=$(gcloud config get-value project),TOPIC_ID=${TOPIC_QUERY_COMPLETED}
    

Cuando veas la URL del servicio, se completará la implementación.

Crea un activador para el servicio Ejecutor de consultas

El activador de Eventarc para el servicio del ejecutor de consultas implementado en los filtros de Cloud Run for Anthos de los mensajes publicados en un tema de Pub/Sub

  1. Crea el activador:

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Esto crea un activador llamado trigger-query-runner-gke.

  2. Configura una variable de entorno para el tema de Pub/Sub.

    export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)')
    

Programa los trabajos

La canalización de procesamiento se activa mediante dos trabajos de Cloud Scheduler.

  1. Crea una app de App Engine que sea necesaria para Cloud Scheduler y especifica una ubicación adecuada (por ejemplo, europe-west):

    export APP_ENGINE_LOCATION=LOCATION
    gcloud app create --region=${APP_ENGINE_LOCATION}
    
  2. Crea dos trabajos de Cloud Scheduler que se publiquen en un tema de Pub/Sub una vez al día:

    gcloud scheduler jobs create pubsub cre-scheduler-uk \
      --schedule="0 16 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="United Kingdom"
    
    gcloud scheduler jobs create pubsub cre-scheduler-cy \
      --schedule="0 17 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="Cyprus"
    

    El programa se especifica en formato unix-cron. Por ejemplo, 0 16 * * * significa que los trabajos se ejecutan a las 16:00 (4 p.m.) UTC todos los días.

Ejecuta la canalización

  1. Confirma que todos los activadores se hayan creado de forma correcta:

    gcloud eventarc triggers list
    

    El resultado debería ser similar al ejemplo siguiente:

    NAME                       TYPE                                            DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
    trigger-chart-creator-gke  google.cloud.pubsub.topic.v1.messagePublished                                                  Yes
    trigger-notifier-gke       google.cloud.audit.log.v1.written                                                              Yes
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished                                                  Yes
    
  2. Recupera los ID de trabajo de Cloud Scheduler:

    gcloud scheduler jobs list
    

    El resultado debería ser similar al ejemplo siguiente:

    ID                LOCATION      SCHEDULE (TZ)         TARGET_TYPE  STATE
    cre-scheduler-cy  us-central1   0 17 * * * (Etc/UTC)  Pub/Sub      ENABLED
    cre-scheduler-uk  us-central1   0 16 * * * (Etc/UTC)  Pub/Sub      ENABLED
    
  3. Aunque los trabajos están programados para ejecutarse a diario a las 4 y 5 p.m., también puedes ejecutar los trabajos de Cloud Scheduler de forma manual:

    gcloud scheduler jobs run cre-scheduler-cy
    gcloud scheduler jobs run cre-scheduler-uk
    
  4. Después de unos minutos, confirma que haya dos gráficos en el bucket de Cloud Storage:

    gsutil ls gs://${BUCKET}
    

    El resultado debería ser similar al ejemplo siguiente:

    gs://BUCKET/chart-cyprus.png
    gs://BUCKET/chart-unitedkingdom.png
    

¡Felicitaciones! También deberías recibir dos correos electrónicos con vínculos a los gráficos.

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. Borra los servicios de Cloud Run for Anthos 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 for Anthos desde Google Cloud Console.

  2. Borra cualquier activador de Eventarc que hayas creado en este instructivo:

    gcloud eventarc triggers delete TRIGGER_NAME
    

    Reemplaza TRIGGER_NAME por el nombre de tu activador.

  3. Quita todas las opciones de configuración predeterminadas de gcloud que agregaste durante la configuración del instructivo.

    gcloud config unset project
    gcloud config unset run/cluster
    gcloud config unset run/cluster_location
    gcloud config unset run/platform
    gcloud config unset eventarc/location
    gcloud config unset compute/zone
    

¿Qué sigue?