Infraestructura GCP · Septiembre 2026

Arquitectura GCP — Andesmar

Mapa de recursos del proyecto andesmar-gcp para replicar la misma estructura en la consola de Google Cloud. Enfoque en servicios, jobs, schedulers, datos gestionados, secrets e IAM.

Actualizado: sep-2026 Staging operativo
1

Identidad del proyecto

Parámetros globales compartidos por todos los recursos

Estado sep-2026: la plataforma operativa vive en staging. Este documento refleja lo que existe hoy en GCP. El envío de asientos a SAP apunta solo a QA; producción no está configurada.
2
Cloud Run Services activos
21
Cloud Run Jobs
22
Cloud Scheduler triggers
1
Instancia Cloud SQL
ParámetroValor
Proyecto GCPandesmar-gcp
Región Cloud Run / Jobs / SQL / ARsouthamerica-west1 (Santiago)
Región Cloud Schedulersouthamerica-east1 (São Paulo) — Scheduler no opera en west1
Timezone schedulersAmerica/Argentina/Buenos_Aires (manifiestos sync: Mendoza en runbook)
Cloud SQL connection nameandesmar-gcp:southamerica-west1:andesmar-db-staging
Bases de datosandesmar_sales — schemas public (OLTP), bi_rebuild (BI) y sap (liquidación SAP)
andesmar_srt — base aislada para el SRT de liquidaciones
Bucket raw eventsandesmar-staging-raw-events
Artifact Registrycloud-run-source-deploy @ southamerica-west1
Conectividad SQLSocket Unix /cloudsql/... — sin VPC connector
2

Diagrama de topología

Vista de infraestructura GCP — no es el flujo de datos de negocio

Betterez SaaS webhooks + API REST Proyecto andesmar-gcp southamerica-west1 southamerica-east1 Cloud Run Service andesmar-api-staging FastAPI · webhooks Cloud Run Service andesmar-presentaciones nginx · IAP Cloud Run Jobs (21) bi-rebuild · manifests-sync · reconciliation (12) · SAP (2) · SRT (2) · combustible · recompress · health-report Imágenes: bi-rebuild-incremental · andesmar-api-staging · betterez-reconciliation-jobs · sap-liquidacion-pipeline Cloud SQL andesmar-db-staging andesmar_sales Cloud Storage andesmar-staging-raw-events raw-first JSON Artifact Registry cloud-run-source-deploy Cloud Build trigger API staging Cloud Scheduler 22 triggers OAuth SA → POST Cloud Run Job Secret Manager DATABASE_URL · betterez-* · SMTP health-report Cloud Monitoring alert policies · logs · métricas webhooks HMAC dispara jobs API REST (jobs) /cloudsql
Compute (Cloud Run)
Datos (SQL, GCS)
Orquestación (Scheduler)
Seguridad / observabilidad
CI/CD (Build, AR)
Sin VPC connector: Cloud Run se conecta a Cloud SQL mediante el socket Unix /cloudsql/andesmar-gcp:southamerica-west1:andesmar-db-staging, configurado con --add-cloudsql-instances en servicios y jobs.
3

Cloud Run Services

Servicios HTTP siempre activos en southamerica-west1

ServicioEstadoRolImagen / deploy
andesmar-api-staging Activo API FastAPI: webhooks Betterez (POST /api/v1/webhooks/betterez), consultas sales/manifests, raw-first → GCS + Postgres cloud-run-source-deploy/andesmar-api-staging
Deploy auto vía Cloud Build en push a main
andesmar-presentaciones Activo nginx estático para handouts HTML de negocio. Protegido con IAP (login Google) Build manual: docs/presentaciones/_deploy/deploy.sh
andesmar-api-prod Planificado Servicio prod — no desplegado a sep-2026 —
4

Cloud Run Jobs

21 jobs en southamerica-west1, disparados por Scheduler o manualmente

ETL BI
JobImagenPropósitoRunbook
bi-rebuild-incremental bi-rebuild-incremental ETL SQL incremental del schema bi_rebuild (2×/día) scripts/sql/bi_rebuild/operativo/CLOUD_RUN_JOB_RUNBOOK.md
Manifiestos
JobImagenPropósitoRunbook
andesmar-manifests-sync andesmar-api-staging (reutiliza imagen API) Sync programado manifiestos Betterez (outlook + detalle). Red de seguridad cada 30 min scripts/manifests_sync/RUNBOOK_MANIFESTS_SYNC_JOB.md
Reconciliación y catálogos — imagen compartida betterez-reconciliation-jobs
JobPropósitoRunbook
betterez-status-reconciliationReconciliación estados tickets vs API Betterez (c/6 h)scripts/reconciliation/job/RUNBOOK_STATUS_RECONCILIATION.md
betterez-transactions-safety-netTransacciones API sin fila padre OLTP → reinyecta raw-first (D-3..D-1)scripts/reconciliation/job/RUNBOOK_TRANSACTIONS_SAFETY_NET.md
betterez-manifests-safety-netHuérfanos manifiesto sin entries → manifest-leg APIscripts/reconciliation/job/RUNBOOK_MANIFESTS_SAFETY_NET.md
betterez-undelivered-webhooksWebhooks undelivered D-1 vs OLTPscripts/reconciliation/job/RUNBOOK_UNDELIVERED_WEBHOOKS.md
betterez-raw-events-relational-catchupDrena backlog raw_events post-webhook async (c/15 min)scripts/reconciliation/job/RUNBOOK_RAW_EVENTS_RELATIONAL_CATCHUP.md
betterez-ticket-change-successorFase 3 successor tickets cambiados vía API (semanal)scripts/reconciliation/job/RUNBOOK_TICKET_CHANGE_SUCCESSOR_JOB.md
schedules-safety-netItinerarios/schedules faltantes desde Inventory APIscripts/schedules_sync/RUNBOOK_SCHEDULES_SAFETY_NET.md
andesmar-agency-catalog-syncCatálogo agencias → dim_agencyscripts/accounts_sync/RUNBOOK_AGENCY_CATALOG_SYNC.md
andesmar-manifest-labels-syncTags manifiesto desde API detailscripts/manifests_sync/RUNBOOK_JOBS_5_7_METADATA_SYNC.md
andesmar-manifest-tag-catalog-syncCatálogo tags → dim_manifest_tagscripts/manifests_sync/RUNBOOK_MANIFEST_TAG_CATALOG_SYNC.md
andesmar-route-catalog-syncCatálogo rutas Inventoryscripts/inventory_sync/RUNBOOK_ROUTE_CATALOG_SYNC.md
manifest-leg-guardGuard drift manifest_legs OLTP vs fact_manifest_legscripts/manifest_legs_sync/RUNBOOK_MANIFEST_LEG_GUARD.md

Lista canónica de los 12 jobs reconciliation: scripts/reconciliation/job/redeploy_reconciliation_jobs_image.sh

Integraciones contables — SAP y SRT
JobImagenPropósitoRunbook
sap-liquidacion-pipelinesap-liquidacion-pipelinePasos 1→3 de la liquidación de agencias (schema sap): liquida boletos e ítems y arma asientos. No envíascripts/sap/RUNBOOK_LIQUIDACION_SAP.md
sap-asientos-sender-qasap-liquidacion-pipelinePaso 4: envío desatendido de asientos solo a SAP QA, corte SAP_ENVIO_DESDEscripts/sap/job/RUNBOOK_LIQUIDACION_PIPELINE_JOB.md
andesmar-srt-publishbetterez-reconciliation-jobsPublica transacciones, pagos y boletos en la base aislada andesmar_srt (grano transacción)scripts/srt_sync/RUNBOOK_SRT_PUBLISH.md
andesmar-srt-publish-liquidacionesbetterez-reconciliation-jobsPublica las vistas de liquidación para el SRT después del pipeline SAPscripts/srt_sync/RUNBOOK_SRT_PUBLISH.md
Datos auxiliares y operación del bucket
JobImagenPropósitoRunbook
andesmar-aux-combustible-syncbetterez-reconciliation-jobsPlanilla de combustible → bi_rebuild.aux_combustible (reemplazo total, frescura por origen)scripts/combustible_sync/RUNBOOK_AUX_COMBUSTIBLE_SYNC.md
andesmar-raw-events-recompressbetterez-reconciliation-jobsRecompresión gzip del histórico del bucket de raw events. Job de campaña, sin schedulerscripts/ops/README_RAW_EVENTS_GZIP.md
Monitoreo
JobImagenPropósito
andesmar-health-report andesmar-health-report Resumen diario salud API/BI/jobs por email (recomendado 08:00 ART, manual)
5

Cloud Scheduler

22 triggers en southamerica-east1 — estado según runbooks (jun–sep 2026)

Los deploy scripts crean schedulers en PAUSED; el estado ENABLED documentado abajo proviene de la verificación operativa en api_andesmar/docs/manifests_scheduler_alertas.md §8 (2026-06-13/14) y, para SAP, SRT y combustible, del runbook de cada job (sep-2026). Los schedulers SAP usan zona Etc/UTC; el resto, America/Argentina/Buenos_Aires.
SchedulerJob targetCronFrecuenciaEstado
bi-rebuild-incremental-midnightbi-rebuild-incremental0 0 * * *00:00 ARTENABLED
bi-rebuild-incremental-noonbi-rebuild-incremental0 12 * * *12:00 ARTENABLED
andesmar-manifests-sync-triggerandesmar-manifests-sync0,30 * * * *Cada 30 minENABLED
betterez-status-reconciliation-q6hbetterez-status-reconciliation0 */6 * * *Cada 6 hENABLED
betterez-transactions-safety-net-dailybetterez-transactions-safety-net30 6 * * *06:30 ARTENABLED
betterez-manifests-safety-net-dailybetterez-manifests-safety-net45 6 * * *06:45 ARTENABLED
betterez-undelivered-webhooks-dailybetterez-undelivered-webhooks0 10 * * *10:00 ARTENABLED
betterez-raw-events-catchup-15mbetterez-raw-events-relational-catchup*/15 * * * *Cada 15 minENABLED
betterez-ticket-change-successor-weeklybetterez-ticket-change-successor0 7 * * 1Lunes 07:00 ARTENABLED
schedules-safety-net-weeklyschedules-safety-net0 7 * * 0Dom 07:00 ARTENABLED
andesmar-agency-catalog-sync-monthlyandesmar-agency-catalog-sync0 9 1 * *Día 1, 09:00 ARTENABLED
andesmar-manifest-labels-sync-weeklyandesmar-manifest-labels-sync0 8 * * 0Dom 08:00 ARTENABLED
andesmar-manifest-tag-catalog-monthlyandesmar-manifest-tag-catalog-sync30 8 1 * *Día 1, 08:30 ARTENABLED
andesmar-route-catalog-monthlyandesmar-route-catalog-sync0 9 1 * *Día 1, 09:00 ARTENABLED
manifest-leg-guard-weeklymanifest-leg-guard0 8 * * 0Dom 08:00 ARTENABLED
sap-liquidacion-pipeline-dailysap-liquidacion-pipeline0 8 * * *05:00 ART (cron en UTC)ENABLED
sap-asientos-sender-qa-dailysap-asientos-sender-qa0 9 * * *06:00 ART (cron en UTC)ENABLED
andesmar-srt-publish-dailyandesmar-srt-publish30 2 * * *02:30 ARTENABLED
andesmar-srt-publish-liquidaciones-dailyandesmar-srt-publish-liquidaciones30 5 * * *05:30 ARTENABLED
andesmar-aux-combustible-sync-dailyandesmar-aux-combustible-sync0 3 * * *03:00 ARTENABLED
andesmar-aux-combustible-sync-middayandesmar-aux-combustible-sync45 11 * * *11:45 ARTENABLED
Busqueda_Manifiestos HTTP legacy → /manifests/sync 0,30 * * * * Cada 30 min (obsoleto) PAUSED

Patrón: Scheduler OAuth SA (*-scheduler-sa) → POST al endpoint de ejecución del Cloud Run Job en west1.

6

Datos gestionados

Cloud SQL y Cloud Storage

Cloud SQL — andesmar-db-staging

  • Connection name: andesmar-gcp:southamerica-west1:andesmar-db-staging
  • Región: southamerica-west1
  • Bases: andesmar_sales y andesmar_srt (aislada, lectura para el SRT)
  • Schemas de andesmar_sales: public (OLTP: sales, tickets, manifest_entries, raw_events, …) · bi_rebuild (BI activo para MicroStrategy, incluye aux_combustible) · sap (liquidaciones y asientos)
  • Schemas de andesmar_srt: andesmar (publicado por el job, solo lectura para el SRT) · srt (objetos propios del SRT)
  • Tier documentado: db-custom-2-8192
  • Roles DB planificados: postgres (admin), andesmar_api, andesmar_etl

Cloud Storage — andesmar-staging-raw-events

  • JSON raw-first de webhooks y reinyecciones (inmutable, auditable)
  • Prefijos operativos: safety-net-runs/, undelivered-runs/
  • Bucket prod planificado: andesmar-raw-events (no desplegado)
7

Seguridad e IAM

Secret Manager, service accounts y roles típicos

Secret Manager
SecretConsumidorVariable env
bi-rebuild-database-urlJobs BI, reconciliation, catálogos, health-reportDATABASE_URL
andesmar-api-database-urlServicio andesmar-api-stagingDATABASE_URL
andesmar-api-auth-keyServicio API stagingAPI_AUTH_KEY
betterez-webhook-secretAPI + jobs (vía ref)BETTEREZ_WEBHOOK_SECRET
betterez-api-keyJobs reconciliation / catálogosBETTEREZ_API_KEY
betterez-login-user / betterez-login-passwordJobs (JWT refresh)BETTEREZ_LOGIN_*
DATABASE_URL (nombre literal)Job andesmar-manifests-syncDATABASE_URL
health-report-smtp-*, health-report-mail-*Job andesmar-health-reportSMTP / mail env vars
sap-sentry-dsnJobs SAPSENTRY_DSN
sap-qa-token-client-id / sap-qa-token-client-secretJob sap-asientos-sender-qa (OAuth SAP QA; no hay secretos de prod)SAP_CLIENT_ID / SAP_CLIENT_SECRET
srt-database-urlJobs andesmar-srt-publish*SRT_DATABASE_URL
Service accounts — patrón por job

Cada job tiene un par de SAs dedicadas:

  • Runtime SA ({job}-job-sa): ejecuta el contenedor. Roles: roles/cloudsql.client, roles/secretmanager.secretAccessor, roles/storage.objectAdmin (donde aplica GCS)
  • Scheduler SA ({job}-scheduler-sa o abreviado): dispara el job. Rol: roles/run.developer

Ejemplos: bi-rebuild-job-sa, manifests-sync-job-sa, bz-tx-safety-net-job-sa, sap-liquidacion-job-sa, srt-publish-job-sa, aux-combustible-sync-job-sa.

El job de combustible además impersona una SA miembro de la unidad compartida donde vive la planilla (Sheets API, alcance de solo lectura).

API staging usa la SA default de Compute (*-compute@developer.gserviceaccount.com) con acceso a secrets vía IAM.

8

CI/CD e imágenes

Cloud Build, Artifact Registry y triggers

RecursoDetalle
Artifact Registry southamerica-west1-docker.pkg.dev/andesmar-gcp/cloud-run-source-deploy/{imagen}:{tag}
Imágenes principales andesmar-api-staging · betterez-reconciliation-jobs · bi-rebuild-incremental · andesmar-health-report · sap-liquidacion-pipeline
Cloud Build trigger API ID 109502bd-78d2-489f-ab04-3e48e632b777 — config api_andesmar/cloudbuild.staging.yaml — push a main → deploy andesmar-api-staging
APIs habilitadas (patrón deploy) artifactregistry, cloudbuild, run, cloudscheduler, secretmanager, sqladmin, storage
9

Referencias en el repositorio

Runbooks y documentación canónica para profundizar

DocumentoContenido
api_andesmar/INFORME_ARQUITECTURA.mdArquitectura general del sistema
docs/integracion/ECOSISTEMA_BETTEREZ_CONSULTA_Y_ESCUCHA.mdJobs, webhooks, API Betterez — inventario operativo
api_andesmar/docs/manifests_scheduler_alertas.mdEstado schedulers + alertas manifiestos
scripts/sql/bi_rebuild/operativo/CLOUD_RUN_JOB_RUNBOOK.mdDeploy e IAM del job BI
scripts/monitoring/STAGING_API_CLOUD_RUN.mdConfiguración servicio API staging
scripts/RUNBOOK_INDEX.mdÍndice de todos los runbooks operativos
scripts/dev/lib/gcloud_deploy.shHelper compartido de deploy (proyecto, región, secrets)
scripts/sap/RUNBOOK_LIQUIDACION_SAP.mdLiquidación SAP: pasos, alertas, envío, estado del paralelo
scripts/srt_sync/RUNBOOK_SRT_PUBLISH.mdPublicación a andesmar_srt, roles y deploy
scripts/combustible_sync/RUNBOOK_AUX_COMBUSTIBLE_SYNC.mdSync de la planilla de combustible, frescura y alertas
Flujo de datos vs infraestructura: este documento mapea recursos GCP. Para entender cómo fluyen ventas, tickets y KPIs desde Betterez hasta MicroStrategy, ver docs/presentaciones/andesmar-plataforma-datos-2026-06.html. Para las integraciones: Asientos contables SAP, SRT de liquidaciones y Planilla de combustible.