Skip to content

Cloud Run

Google Cloud Run es un servicio serverless que ejecuta containers en respuesta a requests HTTP o eventos en la arquitectura de data engineering de Solvento.

Descripción

Cloud Run permite ejecutar servicios containerizados de manera serverless, escalando automáticamente según la demanda. Es ideal para servicios que procesan datos, APIs, y procesamiento de eventos.

Flujo de Datos

graph TB
    subgraph triggers["Triggers"]
        HTTP[HTTP Requests]
        PubSub[Pub/Sub]
        Scheduler[Cloud Scheduler]
        Webhooks[Webhooks]
    end

    subgraph cloudrun["Cloud Run"]
        Service1[Service 1]
        Service2[Service 2]
        Service3[Service 3]
    end

    subgraph destinos["Destinos"]
        BigQuery[BigQuery]
        PubSubOut[Pub/Sub]
        Storage[Cloud Storage]
    end

    HTTP --> Service1
    PubSub --> Service2
    Scheduler --> Service3
    Webhooks --> Service1

    Service1 --> BigQuery
    Service2 --> PubSubOut
    Service3 --> Storage

Recursos

Services

Los servicios containerizados que procesan requests y eventos. Documenta aquí los servicios principales:

Servicios de Webhooks

Service Name URL Imagen Función Pub/Sub Topics Publicados
webhook-syntage-inline-prod https://webhook-syntage-inline-prod-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/webhook-syntage-inline:20251107-171207 Recibe webhooks de Syntage y publica a múltiples topics invoices-webhook-prod, buro-webhook-prod, items-api-topic, cp-api-prod, tax-compliance-api-syntage-success
retry-errors-syntage-prod https://retry-errors-syntage-prod-gqomdmitoa-uc.a.run.app Por verificar Reintenta errores de Syntage Por verificar

Detalles de webhook-syntage-inline-prod: - Topics configurados: - INVOICE_TOPIC: invoices-webhook-prod - BURO_TOPIC: buro-webhook-prod - INVOICE_ITEM_TOPIC: items-api-topic - INVOICE_CFDI_CP_TOPIC: cp-api-prod - TAX_COMPLIANCE_CHECK_TOPIC: tax-compliance-api-syntage-success - Base URL: https://api.syntage.com - Región: us-central1

Servicios de Consistencia de Datos

Service Name URL Imagen Función Trigger
consistencia-elk-bq-syntage https://consistencia-elk-bq-syntage-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/consistencia-elk-bq-syntage:latest Ejecuta procesos de consistencia entre ELK y BigQuery para datos de Syntage Cloud Scheduler (cada hora y diario)
items-consistency-prod https://items-consistency-prod-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/syntage-items-consistency:20251107-184328 Ajusta y corrige datos de items en BigQuery Por verificar

Endpoints de consistencia-elk-bq-syntage: - /consistency/90days - Ejecuta consistencia de últimos 90 días (cada hora) - /consistency/historical - Ejecuta consistencia histórica (diario a las 8 AM)

Servicios de APIs y Handlers

Service Name URL Imagen Función
cp-api-syntage-requests-handler-prod https://cp-api-syntage-requests-handler-prod-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/api-syntage-requests-handler:20251030-122850 Maneja requests de API de CP desde Syntage
tax-compliance-api-syntage-requests-handler-prod https://tax-compliance-api-syntage-requests-handler-prod-gqomdmitoa-uc.a.run.app Por verificar Maneja requests de API de tax compliance desde Syntage

Servicios de Scraping y Ingesta

Service Name URL Imagen Función
banxico-scraper https://banxico-scraper-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/banxico-scraper:latest Scrapea datos de Banxico
diesel-price-scraper https://diesel-price-scraper-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/diesel-price-scraper Scrapea precios de diesel
diesel-price-mensual https://diesel-price-mensual-gqomdmitoa-uc.a.run.app gcr.io/solvento-data-prod/diesel-price-mensual:latest Procesa precios mensuales de diesel
keycloack-ingest-prod https://keycloack-ingest-prod-gqomdmitoa-uc.a.run.app Por verificar Ingestiona datos de Keycloak
terminal-uploader-prod https://terminal-uploader-prod-gqomdmitoa-uc.a.run.app gcr.io/solvento-adv-analytics-prod/terminal-uploader:latest Pipeline ETL BigQuery → Supabase para el Proyecto Terminal. Ver detalles técnicos →

Servicios de Insights y Analytics

Service Name URL Imagen Función
insights-publisher https://insights-publisher-gqomdmitoa-uc.a.run.app Por verificar Publica insights y analytics
syntage-ciec-extraction-status-prod https://syntage-ciec-extraction-status-prod-gqomdmitoa-uc.a.run.app Por verificar Extrae status de CIEC de Syntage

Configuraciones Relevantes

Container Image

  • Imagen Docker utilizada y registry (Artifact Registry, Container Registry)

Scaling

  • Min Instances: Número mínimo de instancias
  • Max Instances: Número máximo de instancias
  • Concurrency: Requests por instancia

Resources

  • CPU: Asignación de CPU
  • Memory: Asignación de memoria
  • Timeout: Tiempo máximo de ejecución

Environment Variables

  • Variables de entorno y secretos utilizados

VPC Connector

  • Configuración de conectividad a VPC si aplica

IAM

  • Permisos y roles IAM para el servicio

Relaciones con Otros Componentes

Triggers (Activadores)

  • HTTP Requests: Requests HTTP activan servicios
  • Pub/Sub: Mensajes de topics activan servicios
  • Cloud Scheduler: Programación periódica activa servicios
  • Webhooks: Requests HTTP de sistemas externos

Destinos (Outputs)

  • BigQuery: Servicios escriben datos procesados
  • Pub/Sub: Servicios publican eventos
  • Cloud Storage: Servicios escriben archivos
  • APIs: Servicios exponen endpoints HTTP

Patrones de Uso

API Services

Servicios que exponen APIs RESTful para consumo de datos y procesamiento.

Event Processors

Procesamiento de eventos desde Pub/Sub con lógica compleja que requiere containers.

Scheduled Jobs

Jobs programados que se ejecutan periódicamente para procesamiento de datos.

Webhook Handlers

Manejo de webhooks de sistemas externos con procesamiento más complejo que Cloud Functions.

Ejemplos de Servicio

Servicio HTTP Simple

from flask import Flask, request, jsonify
from google.cloud import bigquery

app = Flask(__name__)

@app.route('/process', methods=['POST'])
def process_data():
    data = request.get_json()

    # Procesar datos
    processed = process(data)

    # Escribir a BigQuery
    client = bigquery.Client(project='solvento-adv-analytics-prod')
    table = client.get_table('dataset.table')
    client.insert_rows_json(table, [processed])

    return jsonify({'status': 'success'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Dockerfile

FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

Deploy

gcloud run deploy my-service \
  --image gcr.io/solvento-data-prod/my-service:latest \
  --platform managed \
  --region us-central1 \
  --project solvento-data-prod

Monitoreo y Métricas

El estado operativo de los servicios webhook de Cloud Run se monitorea en el dashboard "Data Processes" de Google Cloud Monitoring (solvento-data-prod).

Ver dashboard Data Processes →

Ver documentación de observabilidad →

Servicio webhook-syntage-inline-prod

Es el servicio webhook principal de Syntage. El dashboard incluye una sección dedicada con tres widgets:

Widget Tipo Métrica / Filtro
Syntage Webhook Cloud Run Events Gráfica de línea Métrica custom logging.googleapis.com/user/webhook_syntage_events — cuenta eventos procesados por el servicio
Syntage Webhook Inline — logs ≥ WARNING Panel de logs resource.type="cloud_run_revision" service_name="webhook-syntage-inline-prod" location="us-central1" severity>=WARNING
Syntage Webhook Inline — request latency (p50 / p95 / p99, ms) Gráfica de línea run.googleapis.com/request_latencies — distribución de latencia de requests del servicio en us-central1

La sección de Syntage en el dashboard actúa como punto de entrada del flujo: si hay errores o picos de latencia aquí, el problema está en la recepción del webhook antes de que llegue a Pub/Sub.

Servicio bucket-xml-parser-prod

Servicio que procesa archivos XML desde Cloud Storage y escribe a solvento-data-prod.svc_master_public.xml_data.

Widget Tipo Métrica / Filtro
xml_data — Cloud Run events (files processed) Gráfica de línea Métrica custom logging.googleapis.com/user/xml-data-files-processed filtrado por service_name="bucket-xml-parser-prod"
xml_data — logs ≥ WARNING Panel de logs resource.type="cloud_run_revision" service_name="bucket-xml-parser-prod" severity>=WARNING
xml_data — BQ Table Size Scorecard bigquery.googleapis.com/storage/stored_bytes en svc_master_public.xml_data

Flujo completo por pipeline (Pub/Sub → Dataflow → BigQuery)

El dashboard monitorea el flujo completo de cada pipeline de ingesta. Para cada uno se visualizan cinco señales en conjunto:

Señal Métrica GCP Qué indica
Pub/Sub Messages pubsub.googleapis.com/topic/send_message_operation_count Tasa de mensajes publicados al topic (carga entrante)
Dataflow Throughput dataflow.googleapis.com/job/elements_produced_count por ptransform Elementos procesados en la etapa clave del job
Dataflow Warnings + Errors Logs severity>=WARNING filtrados por job_name Errores y advertencias en el procesamiento
BQ Table Size bigquery.googleapis.com/storage/stored_bytes Tamaño de la tabla destino (señal de que datos siguen llegando)
System Lag pubsub.googleapis.com/topic/oldest_unacked_message_age_by_region Edad del mensaje no acusado más antiguo. Umbrales: 600 s (amarillo) / 1 200 s (rojo)

Pipelines cubiertos y sus topics / jobs / tablas en BQ:

Pipeline Topic Pub/Sub Job Dataflow Tabla BQ destino
Invoices invoices-webhook-prod ^invoices-webhook-prod.* syntage.invoices
Items items-api-topic ^items-api-prod.* syntage.invoices_items
Carta Porte cp-api-prod ^cp-api-multischema-prod.* syntage.cp_body
Insights NRT + Batch insights-staging-topic-prod ^insights-sales-revenue-customers-daily-staging.* insights.sales_revenue_customers_daily_staging
Tax Compliance tax-compliance-api-syntage-success ^tax-compliance-api-multischema-prod.* syntage.tax_compliance_body
Buro buro-webhook-prod ^buro-webhook-prod.* buro.buro_body
Shinkansen Metadata shinkansen-payout-metadata-prod ^shinkansen-metadata-webhook-prod.* shinkansen.shinkansen_metadata
Shinkansen Payout Results shinkansen-payout-results-prod ^shinkansen-payout-results-webhook-prod.* shinkansen.shinkansen_payout_results

Resumen de métricas por servicio webhook

Servicio Tipo de métrica Métrica
webhook-syntage-inline-prod Custom (logging) logging.googleapis.com/user/webhook_syntage_events
webhook-syntage-inline-prod Request latency run.googleapis.com/request_latencies
bucket-xml-parser-prod Custom (logging) logging.googleapis.com/user/xml-data-files-processed
Todos Logs ≥ WARNING Logs de Cloud Run filtrados por service_name y severity>=WARNING

Referencias