Data Engineer
01-07-2025
Completado
Python
Google Cloud Run
Google Cloud Scheduler
Google Secret Manager
n8n
Snowflake
Docker
Gmail API
SQL
Cron Jobs
README.md
Ver en GitHub

Automatización del Envío de Reportes Mensuales

Este documento presenta dos enfoques alternativos para automatizar el envío de reportes mensuales de ventas. Uno utiliza n8n (enfoque no-code) y el otro Google Cloud Run Jobs (enfoque cloud-native).

Consulta SQL Base

La consulta SQL que alimenta ambos enfoques extrae datos de ventas mensuales agrupados por cliente y categoría:

SELECT 
    c.CUSTOMER_ID, c.FIRST_NAME, c.LAST_NAME,
    EXTRACT(YEAR FROM TO_DATE(s.TRANSACTION_DATE, 'YYYY-MM-DD')) AS ANIO,
    EXTRACT(MONTH FROM TO_DATE(s.TRANSACTION_DATE, 'YYYY-MM-DD')) AS MES,
    p.CATEGORY AS CATEGORIA,
    COUNT(s.TRANSACTION_ID) AS CANTIDAD_VENTAS,
    SUM(s.QUANTITY) AS TOTAL_PRODUCTOS,
    ROUND(SUM(s.QUANTITY * p.PRICE), 2) AS TOTAL_MONTO
FROM 
    DBT_DB.DBT_SCHEMA.CSV_SALES_TRANSACTIONS_FULL s
JOIN 
    DBT_DB.DBT_SCHEMA.CSV_CUSTOMERS_FULL c ON s.CUSTOMER_ID = c.CUSTOMER_ID
JOIN 
    DBT_DB.DBT_SCHEMA.CSV_PRODUCTS_FULL p ON s.PRODUCT_ID = p.ID
WHERE 
    EXTRACT(YEAR FROM TO_DATE(s.TRANSACTION_DATE, 'YYYY-MM-DD')) = año
    AND EXTRACT(MONTH FROM TO_DATE(s.TRANSACTION_DATE, 'YYYY-MM-DD')) = mes
GROUP BY 
    c.CUSTOMER_ID, c.FIRST_NAME, c.LAST_NAME, ANIO, MES, CATEGORIA
ORDER BY 
    TOTAL_MONTO DESC

Enfoque 1: Automatización con n8n

n8n es una herramienta de automatización de flujos de trabajo de código abierto que permite conectar diferentes aplicaciones y servicios mediante una interfaz visual intuitiva.

Arquitectura del Flujo

Nodos principales:

  • Schedule Trigger (Cron): Programa la ejecución mensual automática del flujo
  • Snowflake: Ejecuta la consulta SQL para obtener el resumen de ventas
  • Code (Python): Procesa los datos y genera cálculos adicionales como:
    • Total de ventas consolidado
    • Número de clientes únicos
    • Categorías más vendidas
    • Métricas de rendimiento
  • Gmail: Envía el reporte convertido a formato Excel (.xlsx)

Ventajas del Enfoque n8n

  • Interface visual: Diseño drag-and-drop sin necesidad de programación
  • Fácil monitoreo: Visualización en tiempo real del estado de los flujos
  • Flexibilidad: Modificación rápida de la lógica sin redepliegue
  • Conectores nativos: Integración directa con servicios populares

Referencia Visual

Flujo de automatización con n8n


Enfoque 2: Automatización con Google Cloud Run Jobs

Esta opción utiliza una arquitectura cloud-native completamente gestionada por Google Cloud Platform, siendo más robusta y escalable para entornos de producción.

Arquitectura de la Solución

Diagrama de automatización con Cloud Run Jobs

Componentes Principales

Cloud Run Jobs: Ejecuta el contenedor Docker con la lógica de negocio

  • Configurado mediante Dockerfile.prod para optimización en producción
  • Orquestado por cloudbuild.yaml para CI/CD automatizado
  • Ejecuta main.py como punto de entrada principal

Cloud Scheduler: Programa la ejecución mensual

  • Configuración de trigger basado en expresiones cron
  • Integración nativa con Cloud Run Jobs
  • Manejo de reintentos y notificaciones de error

Scripts de Automatización Incluidos

El proyecto incluye varios scripts especializados para diferentes aspectos del despliegue:

Desarrollo Local

  • start-dev.sh: Ejecuta la aplicación localmente usando Docker containers
  • docker-compose.dev.yml: Configuración de servicios para desarrollo

Despliegue en Producción

  • setup-secrets.sh: Configura las variables de entorno y secrets en Google Secret Manager
  • deploy.sh: Automatiza el despliegue completo a Google Cloud
  • setup-scheduler.sh: Configura Cloud Scheduler con la periodicidad deseada

Gestión de Configuración

  • Secrets Manager: Almacena credenciales de Snowflake y Gmail de forma segura
  • Variables de entorno: Configuración flexible para diferentes ambientes
  • Logging estructurado: Monitoreo y troubleshooting avanzado

Estructura del Proyecto

devcontainer/
├── app/
│   ├── config.py
│   ├── report_generator.py
│   ├── services/
│   │   ├── email_service.py
│   │   └── snowflake_service.py
│   └── utils/
│       └── date_helper.py
├── scripts/
│   ├── deploy.sh
│   ├── setup-scheduler.sh
│   ├── setup-secrets.sh
│   └── start-dev.sh
├── tests/
│   └── test_snowflake_service.py
├── docker-compose.dev.yml
├── crontab.dev
├── Dockerfile.dev
├── Dockerfile.prod
├── cloudbuild.yaml
├── job.yaml
├── requirements.txt
└── main.py

Ventajas del Enfoque Cloud Run

Escalabilidad: Escala automáticamente según la demanda Gestión de Secrets: Integración nativa con Google Secret Manager CI/CD: Pipeline automatizado con Cloud Build Costo-eficiencia: Modelo de pago por uso (pay-per-execution) Confiabilidad: SLA del 99.95% garantizado por Google Cloud

Configuración de Secrets

El sistema utiliza Google Secret Manager para almacenar credenciales sensibles:

# Ejemplo de configuración de secrets
./scripts/setup-secrets.sh
# Otros scripts para automatizar el despliegue
./scripts/deploy.sh
./scripts/setup-scheduler.sh

Variables principales:

  • SNOWFLAKE_USER: Usuario de la base de datos
  • SNOWFLAKE_PASSWORD: Contraseña del usuario
  • SNOWFLAKE_ACCOUNT: Cuenta de Snowflake (sin ".snowflakecomputing.com")
  • SNOWFLAKE_WAREHOUSE: Warehouse donde se ejecutan las consultas
  • SNOWFLAKE_DATABASE: Base de datos dentro del warehouse
  • SNOWFLAKE_SCHEMA: Esquema dentro de la base de datos
  • SNOWFLAKE_ROLE: Rol que define los permisos de acceso
  • GMAIL_USER: Dirección de correo Gmail
  • GMAIL_PASSWORD: Contraseña de aplicación
  • RECIPIENTS: Lista de correos destino

Comparación de Enfoques

Aspecton8nGoogle Cloud Run
ComplejidadBaja (visual)Media (requiere conocimiento de GCP)
EscalabilidadLimitadaAlta
MantenimientoManualAutomatizado
CostosFijo (servidor)Variable (por ejecución)
MonitoreoBásicoAvanzado
SeguridadEstándarEnterprise-grade

Recomendaciones

Para equipos pequeños o prototipos: n8n ofrece rapidez de implementación y facilidad de uso.

Para entornos de producción empresariales: Google Cloud Run Jobs proporciona mayor confiabilidad, escalabilidad y características de seguridad avanzadas.

Contenido sincronizado automáticamente desde GitHub