Skip to content

Despliegue de Templates de Dataflow

Este documento describe los procesos de despliegue y gestión de templates de Dataflow. Para información sobre la arquitectura y funcionamiento de los templates, consulta Dataflow Templates.

Repositorio

Los templates se encuentran en el repositorio templates-dataflow ubicado en /Users/solvento/Desktop/templates-dataflow.

Sistema de Despliegue

Script de Despliegue

El script deploy_templates.sh proporciona un sistema unificado para desplegar templates:

./deploy_templates.sh <template_name> <environment>

Ejemplos:

# Desplegar template de invoices-webhook en producción
./deploy_templates.sh invoices-webhook prod

# Desplegar template de invoices-api en desarrollo
./deploy_templates.sh invoices-api dev

Variables de Entorno Requeridas

Cada template requiere variables obligatorias en su archivo .env:

# VARIABLES DEL SISTEMA DE DESPLIEGUE (OBLIGATORIAS)
PROJECT_ID=solvento-data-prod
REGION=us-central1
GCS_BUCKET=syntage-ingestion
JOB_NAME=invoices-webhook-prod
TEMPLATE_SCRIPT_NAME=dataflow_template.py
TEMPLATE_GCS_PATH=gs://artifacts-bucket-solvento-data-prod/syntage/dataflow_templates/invoices-webhook-prod

Variables del Template

Variables específicas del template (convertidas automáticamente a argumentos):

# PARÁMETROS DEL TEMPLATE
INPUT_SUBSCRIPTION=projects/solvento-data-prod/subscriptions/invoices-webhook-subscription
OUTPUT_TABLE=solvento-data-prod:syntage.invoices
DLQ_TOPIC=projects/solvento-data-prod/topics/invoices-dlq
API_KEY=...
API_RATE_LIMIT=5
API_TIMEOUT=300
SCHEMA_NAME=invoices
BACKUP_WINDOW_SECONDS=900
ELK_ENABLED=true
ELK_HOST=elasticsearch.solvento.mx
ELK_USER=elastic
ELK_PASSWORD=...

Versionado Automático

Los templates se almacenan en GCS con versionado automático:

gs://{GCS_BUCKET}/template/{JOB_NAME}-{TIMESTAMP}

Donde {TIMESTAMP} tiene el formato YYYYMMDD-HHMMSS.

Ejemplo: - gs://syntage-ingestion/template/invoices-webhook-prod-20241215-143022

Ventajas: - Historial de versiones - Rollback fácil - Trazabilidad - Despliegues seguros (no sobrescribe templates en uso)

Flujo de Despliegue

  1. Desarrollo: Crear o modificar el template en el directorio correspondiente
  2. Configuración: Actualizar variables en dev.env o prod.env
  3. Despliegue: Ejecutar ./deploy_templates.sh <template> <env>
  4. Validación: El script valida archivos y variables
  5. Construcción: Genera el comando de Dataflow dinámicamente
  6. Confirmación: Solicita confirmación antes de ejecutar
  7. Ejecución: Despliega el template a GCS con timestamp
  8. Terraform: Actualizar configuración de Terraform con nueva ruta del template

Uso de Templates Desplegados

Desde Terraform

Los templates desplegados se gestionan mediante Terraform (ver Terraform).

Desde gcloud CLI

gcloud dataflow jobs run JOB_NAME \
    --gcs-location=gs://{bucket}/template/{job_name}-{timestamp} \
    --region=us-central1 \
    --parameters=input_subscription=projects/project/subscriptions/sub,output_table=project:dataset.table

Listar Versiones

# Listar todas las versiones de un template
gsutil ls gs://syntage-ingestion/template/invoices-webhook-prod-*

Integración con Terraform

Después de desplegar un template, actualizar la configuración de Terraform:

  1. Obtener la ruta del template desplegado (con timestamp)
  2. Actualizar variables_prod.tf o variables_dev.tf:
    dataflow_templates_prod = {
      invoices-webhook-prod = {
        job_name          = "invoices-webhook-prod-20251215-143022"
        template_gcs_path = "gs://artifacts-bucket/.../invoices-webhook-prod-20251215-143022"
        # ... otras configuraciones
      }
    }
    
  3. Aplicar cambios con Terraform: terraform plan y terraform apply

Referencias