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 que permiten el acceso no autenticado y que reciben eventos mediante Eventarc:
- 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.
- 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.
- 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:
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
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.
- 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.
-
Habilita las API de Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
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.
-
Habilita las API de Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
- Actualiza los componentes de gcloud:
gcloud components update
- Accede con tu cuenta:
gcloud auth login
- Selecciona Google Cloud Storage y habilita los tipos de registro Lectura de administración, Lectura de datos y Escritura de datos.
- Otorga la función
eventarc.eventReceiver
a la cuenta de servicio de Compute Engine:export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- Si habilitaste la cuenta de servicio de Pub/Sub el 8 de abril de 2021 o antes de esa fecha, otorga la función
iam.serviceAccountTokenCreator
a la cuenta de servicio de Pub/Sub:gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- Establece los valores predeterminados que se usan en este instructivo:
export REGION=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Reemplaza REGION por la ubicación de Eventarc compatible que prefieras.
- 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.
- Accede a Sendgrid y ve a Configuración > Claves de API.
- Haz clic en Crear clave de API.
- 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.
- Haz clic en Guardar para crear la clave.
- 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.
Cree un bucket de Cloud Storage
Crea un bucket único 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:
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}
Implementa el servicio de notificador
Implementa un servicio de Cloud Run que reciba eventos de Creador de gráficos y use SendGrid para enviar vínculos por correo electrónico a los gráficos generados
Clona el repositorio de GitHub y cambia al directorio
notifier/python
:git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
Compila y envía la imagen del contenedor:
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
Implementa la imagen de contenedor en Cloud Run 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} \ --allow-unauthenticated
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 de los registros de auditoría de Cloud Storage donde el methodName es storage.objects.create
.
Crea el activador:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Esto crea un activador llamado
trigger-notifier
.
Implementa el servicio del creador de gráficos
Implementa un servicio de Cloud Run que reciba eventos del ejecutor de consultas, recupere datos de una tabla de BigQuery para un país específico y, luego, genere un gráfico mediante Matplotlib a partir de los datos. El gráfico se sube a un bucket de Cloud Storage.
Cambia al directorio
chart-creator/python
:cd ../../chart-creator/python
Compila y envía la imagen del contenedor:
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
Implementa la imagen de contenedor en Cloud Run y pasa
BUCKET
:gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET} \ --allow-unauthenticated
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 de los mensajes publicados en un tema de Pub/Sub.
Crea el activador:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Esto crea un activador llamado
trigger-chart-creator
.Configura la variable de entorno del tema de Pub/Sub.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
Implementa el servicio del ejecutor de consultas
Implementa un servicio de Cloud Run que reciba eventos de Cloud Scheduler, recupere datos de un conjunto de datos públicos sobre el COVID-19 y guarde los resultados en una tabla nueva de BigQuery.
Cambia al directorio
processing-pipelines
:cd ../../..
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
Implementa la imagen de contenedor en Cloud Run y pasa
PROJECT_ID
yTOPIC_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} \ --allow-unauthenticated
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 de los mensajes publicados en un tema de Pub/Sub
Crea el activador:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Esto crea un activador llamado
trigger-query-runner
.Configura una variable de entorno para el tema de Pub/Sub.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)')
Programa los trabajos
La canalización de procesamiento se activa mediante dos trabajos de Cloud Scheduler.
Crea una aplicación de App Engine que requiera Cloud Scheduler y especifica una ubicación adecuada:
export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
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
Primero, 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 google.cloud.pubsub.topic.v1.messagePublished chart-creator Yes trigger-notifier google.cloud.audit.log.v1.written notifier Yes trigger-query-runner google.cloud.pubsub.topic.v1.messagePublished query-runner Yes
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
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
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:
- 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/SERVICE_NAME
de Container Registry.
- Borrar el activador de Eventarc: