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
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
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 containersdocker-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 Managerdeploy.sh
: Automatiza el despliegue completo a Google Cloudsetup-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 datosSNOWFLAKE_PASSWORD
: Contraseña del usuarioSNOWFLAKE_ACCOUNT
: Cuenta de Snowflake (sin ".snowflakecomputing.com")SNOWFLAKE_WAREHOUSE
: Warehouse donde se ejecutan las consultasSNOWFLAKE_DATABASE
: Base de datos dentro del warehouseSNOWFLAKE_SCHEMA
: Esquema dentro de la base de datosSNOWFLAKE_ROLE
: Rol que define los permisos de accesoGMAIL_USER
: Dirección de correo GmailGMAIL_PASSWORD
: Contraseña de aplicaciónRECIPIENTS
: Lista de correos destino
Comparación de Enfoques
Aspecto | n8n | Google Cloud Run |
---|---|---|
Complejidad | Baja (visual) | Media (requiere conocimiento de GCP) |
Escalabilidad | Limitada | Alta |
Mantenimiento | Manual | Automatizado |
Costos | Fijo (servidor) | Variable (por ejecución) |
Monitoreo | Básico | Avanzado |
Seguridad | Estándar | Enterprise-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.