Inicio Experiencia Análisis Escríbeme View in English

Optimización de Procesos Cloud: De algún servicio a BigQuery

Google Cloud FinOps Data Engineering Serverless

Cuando hablamos de Google Cloud y, en general, de cualquier proveedor en la nube, nos encontramos con infinidad de formas de lograr un mismo resultado.

En esta primera publicación quiero abordar algunas maneras de hacerlo, tomando en cuenta casos de uso, FinOps subyacentes y la envergadura real de la transformación.

Voy a simplificar los flujos; toma en cuenta que generalmente hay pasos intermedios y otros servicios con los cuales generar sinergia. Cubriré estos temas en otras publicaciones. Sin embargo, hoy empezaremos con lo básico: extraer información y guardarla en el data warehouse (de algún servicio a BigQuery).

1. Primero lo más sencillo: Cloud Run Functions + Cloud Scheduler

Las Cloud Run Functions son ideales para procesos ligeros. Si tu script toma menos de una hora en ejecutarse y no dependes de una IP estática (por ejemplo, cuando el solicitante debe pertenecer a una whitelist). Ahora, eso sí, en teoría se puede lograr una IP estática con VPC egress, pero eso introduce complejidad y costos, por lo que existen otras alternativas. Este servicio funciona bien para:

Diagrama de Arquitectura Cloud Run Functions y Scheduler

  1. Ejecutar algún crawler o scraper pequeño.- Si configuras bien la salida en JSON, puedes almacenar los objetos directamente en una tabla dentro de un dataset de BigQuery para posteriormente transformarla.
  2. Extraer información de una API.- ¿Necesitas consultar información programáticamente en una API? Esto es incluso más sencillo que el crawler. Simplemente haz tu solicitud.
  3. Actualizar una tabla cuando alguien suba un archivo a un bucket.- Supón que alguien actualiza un reporte en Excel y luego lo carga a un bucket, y en cuanto se cargue quieres procesarlo. Puedes lograr esto utilizando Eventarc, Cloud Run Functions y BigQuery.

2. Algo más complejo, pero bastante asequible

  1. Crawler complejo.- Si tu crawler demanda recursos y toma más de una hora porque extraes información de varios sitios y te estás cuidando del baneo, en este caso puedes containerizar tu script y ejecutarlo en un job de Cloud Run (diferente a una Cloud Run Function).
  2. Event-driven ELT.- Imagina que hay algún servicio externo que te envía una señal a través de un webhook dependiendo de condiciones que desconoces, y solo te dice “es hora de empezar”. En ese caso, debes configurar tu instancia de Cloud Run como un servicio (no un job) y luego enviar los datos a BigQuery. Toma en cuenta que es mucho más robusto combinar esta alternativa con Pub/Sub para asegurar el proceso. Entonces, tendrías un receptor en Cloud Run que solo responde con un código 200 o 201 al webhook (lo más rápido posible), envía el evento a Pub/Sub, y finalmente este se entrega a otra instancia de Cloud Run (que podría ser el job anterior, por ejemplo) y finalmente a BigQuery.

Diagrama de Arquitectura Event-driven ELT

Transformaciones con múltiples pasos

Si tienes procesos que dependen de varios pasos, una forma de hacerlo es utilizando Cloud Workflows. Este es un servicio serverless para orquestar flujos de trabajo dentro de GCP; al ser serverless es bastante barato si lo configuras apropiadamente. Esto es muy común en los procesos de transformación de datos en los que necesitas que el paso uno termine antes de iniciar el paso dos. La naturaleza de estas transformaciones es secuencial, por lo que Workflows puede ayudar a coordinar las tareas a realizar dependiendo del estado del paso anterior.

Resumen

En este pequeño post explicamos formas sencillas y casi gratuitas de ejecutar procesos de transformación y los servicios que podrían ser de utilidad. La idea es recordar que no siempre es necesario “matar una mosca con un cañón”, ni es obligatorio desplegar una instancia de Airflow (que acarrea un costo fijo) o un clúster en Cloud Composer (todavía más costoso).

Hay situaciones en las que también es obligatorio invertir, pero hablaremos más de esas situaciones en otra oportunidad. Por ahora empecemos con casos básicos. En próximas publicaciones daré ejemplos de estas situaciones y luego iremos escalando en complejidad y costos. Quiero que tengan una bitácora de cómo se van tomando decisiones basadas en complejidad y FinOps dentro del ecosistema Google Cloud.

Referencias