Catálogo
Tuxpas S.A.C / AJE Group / Pedido Sugerido MLOps

Diagrama de arquitectura

Tres diagramas técnicos (uno por Nivel) con los nombres reales de los recursos AWS aplicando AF-03 y los flujos de datos entre componentes
Código
DOC-AF-05
Fase
Análisis Funcional · sem 1 (18 → 22 may)
Fecha
2026-05-15
Autor
Adrian Ulloa · Squad Lead Tuxpas

Resumen

Este documento describe la arquitectura técnica del proyecto Pedido Sugerido para los tres Niveles definidos en la propuesta v2. Cada Nivel se presenta como un incremento sobre el anterior: el Nivel 1 establece la operación automatizada con un pipeline parametrizado por país, el Nivel 2 incorpora gestión formal del modelo (Feature Store, Model Registry, CI/CD) y el Nivel 3 cierra con automatización completa (retraining por drift, multi-modelo, gobernanza).

Los nombres de recursos AWS siguen el patrón verbose acordado en DOC-AF-03 (ej. aje-dev-ps-pipeline-codepipeline, aje-dev-ps-pipeline-sagemaker). La arquitectura completa al Nivel 3 se compone de ~45 recursos distintos orquestados como un solo sistema.


Decisiones técnicas transversales

Aplican a los tres Niveles. Documentadas acá para evitar repetición.

Decisión Valor adoptado Razón
Región principal us-east-2 (Ohio) Coincide con la cuenta aje-dev y los dominios SageMaker mlops-* ya existentes
Cuenta AWS 832257724409 (aje-dev) hoy · cuentas separadas para qa/prod en futuro Aislamiento por ambiente
VPC vpc-031ecad192b797a50 (VPC compartida AJE) Misma que usan los dominios mlops-mo, mlops-mo2, mlops-project-aje-mo
Network mode SageMaker PublicInternetOnly Alineado con mlops-project-aje-mo. VpcOnly se considera para Nivel 3 si AJE lo requiere por compliance
Auth mode SageMaker Domain IAM Más simple que IAM Identity Center para una primera fase. Migrable a IDC en handover si AJE lo solicita
Instance type Processing ml.m5.4xlarge Heredado del modelo TEST México. Quota de cuenta: 4 instancias concurrentes (limita paralelismo)
Instance type Training (Nivel 2+) ml.m5.2xlarge (propuesto) Más liviano para ALS; ajustar si la complejidad del modelo aumenta
Instance type Inference (Nivel 2+) ml.m5.large (propuesto) Endpoint serverless en evaluación como alternativa
Storage encriptación AES-256 (SSE-S3) por defecto KMS-managed considerado en Nivel 3 si AJE lo requiere
Versionado S3 Habilitado en buckets de inputs y outputs del pipeline Mitiga riesgo de overwrite + permite rollback
Lifecycle S3 90 días (default, ajustable por bucket) Equilibrio costo / retención. Configurable en DOC-AF-07 por requerimiento
CDK Synthesizer DefaultStackSynthesizer con cdk-hnb659fds-* bootstrap roles Ya validado en producción. Usa los permisos del bootstrap, no el role SSO directo
CI/CD source GitLab vía CodeConnections (aje-dev-ps-gitlab, AVAILABLE) Connection ya configurada y funcional
Schedule EventBridge cron L-V, escalonado 10 min entre países (CR 10:00 UTC → PE 11:00 UTC) Respeta quota AWS de 4 instancias concurrentes; evita falla por throttling

Nivel 1 · Automatización · pipeline operativo

Objetivo: pipeline parametrizado por país que corre L-V sin intervención manual, con monitoreo operativo y código/datos versionados.

Diagrama de flujo · alto nivel

                                      [ EventBridge × 7 ]
                                      cron L-V escalonado
                                  CR  EC  GT  MX  NI  PA  PE
                                      │
                                      ▼
                          [ Lambda · aje-dev-ps-triggerfunction ]
                          recibe { code_country } y dispara el SM Pipeline
                                      │
                                      ▼
                         ┌──────────────────────────────────────┐
                         │ SageMaker Pipeline                   │
                         │ aje-dev-ps-pipeline-sagemaker        │
                         │                                      │
                         │  ┌────────────┐                      │
                         │  │ Limpieza   │ ProcessingStep       │
                         │  │ (Docker:   │ image: processing    │
                         │  │ processing)│ instance: ml.m5.4xl  │
                         │  └─────┬──────┘                      │
                         │        │ outputs CSV/parquet         │
                         │        ▼                             │
                         │  ┌────────────┐                      │
                         │  │ Modelado   │ ProcessingStep       │
                         │  │ (Docker:   │ image: spark         │
                         │  │ spark)     │ instance: ml.m5.4xl  │
                         │  └─────┬──────┘                      │
                         │        │ outputs modelo + top-N      │
                         │        ▼                             │
                         │  ┌────────────┐                      │
                         │  │ Reglas     │ ProcessingStep       │
                         │  │ Negocio    │ image: processing    │
                         │  │ (Docker)   │ instance: ml.m5.4xl  │
                         │  └─────┬──────┘                      │
                         │        │ output: recomendaciones     │
                         └────────┼─────────────────────────────┘
                                  │
                                  ▼
                  s3://aje-dev-analytics-artifacts-s3/ps-pipeline/<PAIS>/

                       ─ ─ ─ Monitoreo cross-cutting ─ ─ ─
                                  │
                ┌─────────────────┼──────────────────┐
                ▼                 ▼                  ▼
        CloudWatch        CloudWatch           SNS Topic
        Logs              Dashboard            aje-dev-ps-alert-topic
        (cada step        + 2 Alarms           ↓
        emite logs)       (failed/stopped)   suscripciones email
                                              (definidas en DOC-AF-08)

Componentes Nivel 1 · tabla detallada

# Componente AWS Nombre del recurso Función
1 EventBridge Rule × 7 aje-dev-ps-schedulerule-{CR/EC/GT/MX/NI/PA/PE}-eventbridge Cron L-V por país. Escalonado 10 min entre países
2 Lambda Function aje-dev-ps-triggerfunction-lambda Recibe {code_country} del EventBridge y dispara sagemaker:StartPipelineExecution
3 IAM Role · Lambda aje-dev-ps-lambdarole-iam Trust principal: lambda.amazonaws.com. Permite invocar SM Pipeline
4 SageMaker Pipeline aje-dev-ps-pipeline-sagemaker Pipeline con 3 ProcessingSteps secuenciales
5 IAM Role · SageMaker exec aje-dev-ps-sagemaker-executionrole-iam Trust principal: sagemaker.amazonaws.com. Adjuntas: AmazonSageMakerFullAccess + AmazonDynamoDBFullAccess + custom inline
6 ECR Repository × 2 aje-dev-ps-processing · aje-dev-ps-spark Imágenes Docker. Versionado por tag (latest + SHA del commit)
7 DynamoDB Table aje-dev-ps-configtable-dynamodb Configuración por país (partition key code_country). 7 items
8 S3 Bucket · inputs aje-dev-analytics-artifacts-s3 (compartido con otros proyectos) Inputs del pipeline + outputs intermedios (ps-pipeline/<PAIS>/)
9 S3 Bucket · CodePipeline aje-dev-ps-codepipelinebucket-s3 Artifacts del CI/CD del infra
10 CodePipeline aje-dev-ps-pipeline-codepipeline 4 stages: Source (GitLab) · DeployStack · Build · Deploy
11 CodeBuild × 3 aje-dev-ps-deploystackproject-codebuild · buildproject-codebuild · deployproject-codebuild Deploy infra · Build Docker · Upsert SM Pipeline
12 CloudWatch Log Group /aws/sagemaker/ProcessingJobs (implícito) + /aws/lambda/aje-dev-ps-triggerfunction-lambda Captura stdout/stderr de cada step
13 CloudWatch Alarm × 2 aje-dev-ps-executionfailedalarm-cloudwatch · aje-dev-ps-executionstoppedalarm-cloudwatch Disparan SNS cuando hay fallo
14 CloudWatch Dashboard aje-dev-ps-monitoringdashboard-cloudwatch Vista consolidada · ejecuciones por país · tendencias
15 SNS Topic aje-dev-ps-alert-topic-sns Notificaciones de alarmas. Suscriptores en DOC-AF-08
16 SageMaker Domain (opcional, ya existe) aje-dev-ps-domain Studio access para el equipo de Tuxpas/AJE durante desarrollo

Total componentes Nivel 1: 16


Nivel 2 · Gestión del modelo · trazabilidad y calidad

Objetivo: separar el flujo de entrenamiento (semanal) del de inferencia (diaria); registrar modelos con métricas en Model Registry; configurar Feature Store para features compartidas entre países; agregar CI/CD con gates de calidad.

Incremento sobre Nivel 1

                       ────── NUEVOS componentes del Nivel 2 ──────

                  ┌────────────────────────────────────────────┐
                  │   Pipeline de ENTRENAMIENTO (semanal)      │
                  │   aje-dev-ps-trainpipeline-sagemaker       │
                  │                                            │
                  │  Limpieza → ALS Train → Eval → Register   │
                  │                            │               │
                  └────────────────────────────┼───────────────┘
                                               │
                                               ▼
                            ┌──────────────────────────────────┐
                            │ Model Registry × 7 países        │
                            │ aje-dev-ps-recmodel-EC-sagemaker │
                            │ aje-dev-ps-recmodel-MX-sagemaker │
                            │ ... (uno por país)               │
                            │                                  │
                            │ Status: PendingApproval →        │
                            │         Approved / Rejected      │
                            └──────────────┬───────────────────┘
                                           │ approval (Gate 3 humano)
                                           ▼
                            ┌──────────────────────────────────┐
                            │   Pipeline de INFERENCIA (diario)│
                            │   aje-dev-ps-infpipeline-sagemaker│
                            │                                  │
                            │   Carga modelo → Inferencia →    │
                            │   Reglas → Output                │
                            └────────┬─────────────────────────┘
                                     │
                                     ▼
                          Outputs (mismo que Nivel 1)


                          ────── Feature Store ──────

                  ┌──────────────────────────────────────────────┐
                  │ SageMaker Feature Store                      │
                  │                                              │
                  │ aje-dev-ps-cliente-features-featurestore     │
                  │   - id_cliente, frecuencia, recencia,        │
                  │     ticket_promedio, categoria_principal     │
                  │                                              │
                  │ aje-dev-ps-producto-features-featurestore    │
                  │   - cod_articulo_magic, popularidad,         │
                  │     elasticidad, sustitutos                  │
                  └──────────────────────────────────────────────┘


                          ────── CI/CD enriquecido ──────

                  ┌──────────────────────────────────────────────┐
                  │ CodePipeline ya existente · stages nuevos:   │
                  │                                              │
                  │ Build → Test → Staging → Approval → Prod    │
                  │                            ↑                 │
                  │                  Aprobación humana           │
                  │                  manual notificada por SNS   │
                  └──────────────────────────────────────────────┘


                          ────── Model Monitor ──────

                  ┌──────────────────────────────────────────────┐
                  │ SageMaker Model Monitor                      │
                  │                                              │
                  │ Baseline · estadísticas del último           │
                  │            entrenamiento aprobado            │
                  │                                              │
                  │ Schedule diario · compara producción vs      │
                  │                   baseline (data drift)      │
                  └──────────────────────────────────────────────┘

Componentes nuevos Nivel 2 · tabla

# Componente AWS Nombre del recurso Función
17 SageMaker Pipeline · train aje-dev-ps-trainpipeline-sagemaker Pipeline semanal de entrenamiento
18 SageMaker Pipeline · inference aje-dev-ps-infpipeline-sagemaker Pipeline diario de inferencia (reemplaza al pipeline-sagemaker de Nivel 1)
19 SageMaker Model Package Group × 7 aje-dev-ps-recmodel-{EC/MX/PE/CR/GT/NI/PA}-sagemaker Registry por país. Versionado de modelos
20 SageMaker Feature Group × 2 aje-dev-ps-cliente-features-featurestore · aje-dev-ps-producto-features-featurestore Features compartidas
21 SageMaker Model Monitor schedule aje-dev-ps-datadrift-{pais}-monitor (uno por país) Detección de data drift diaria
22 S3 Bucket · features offline aje-dev-ps-features-offline-s3 (propuesto) Storage offline de Feature Store (o reutilizar SageMaker default bucket)
23 EventBridge Rule · weekly train aje-dev-ps-trainschedule-{pais}-eventbridge (opcional) Trigger semanal del pipeline de entrenamiento
24 IAM Role · train pipeline aje-dev-ps-trainexecutionrole-iam (o reutilizar existente) Permisos adicionales para Feature Store + Model Registry
25 CloudWatch Alarm · drift aje-dev-ps-datadriftalarm-{pais}-cloudwatch Dispara cuando Model Monitor detecta drift
26 CodeBuild · test stage (nuevo) aje-dev-ps-testproject-codebuild Tests unitarios + integration tests antes del deploy
27 CodeBuild · staging stage (nuevo) aje-dev-ps-stagingproject-codebuild Deploy a staging con validación
28 DynamoDB · model metrics aje-dev-ps-modelmetrics-dynamodb Histórico de métricas por modelo registrado
29 CloudWatch Dashboard · model quality aje-dev-ps-modelquality-dashboard-cloudwatch Dashboard de NDCG / Precision / Coverage por país

Total nuevos Nivel 2: 13 → Total acumulado Nivel 2: 29 componentes


Nivel 3 · Automatización completa · replicable y autónomo

Objetivo: reentrenamiento automático cuando se detecta drift, multi-modelo por país con experimentos en grid, gobernanza completa (Model Cards + CloudTrail), e IaC final como plantilla replicable.

Incremento sobre Nivel 2

                       ────── NUEVOS componentes del Nivel 3 ──────

                  ┌────────────────────────────────────────────────┐
                  │ Retraining loop · automático por drift         │
                  │                                                │
                  │  Model Monitor → Alarm → EventBridge → Lambda  │
                  │  detecta drift   activa  trigger    dispara    │
                  │                                                │
                  │  ↓                                             │
                  │                                                │
                  │  Lambda invoca aje-dev-ps-trainpipeline-       │
                  │  sagemaker en modo retraining                  │
                  │                                                │
                  │  ↓                                             │
                  │                                                │
                  │  Nuevo modelo registrado · pasa Gate 1 (regr.) │
                  │  + Gate 2 (métricas) · Gate 3 (humano si       │
                  │  drift fue por concept) → deploy automático    │
                  └────────────────────────────────────────────────┘


                  ┌────────────────────────────────────────────────┐
                  │ Multi-modelo · SageMaker Experiments           │
                  │                                                │
                  │ Grid de hiperparámetros ALS por país           │
                  │   rank ∈ {10, 20, 50, 100}                     │
                  │   regParam ∈ {0.01, 0.1, 1.0}                  │
                  │   alpha ∈ {1, 10, 40}                          │
                  │                                                │
                  │ Selección automática por mejor NDCG@10         │
                  └────────────────────────────────────────────────┘


                  ┌────────────────────────────────────────────────┐
                  │ Gobernanza                                     │
                  │                                                │
                  │ Model Cards · metadata estandarizada por       │
                  │   modelo (training data, métricas, owner,      │
                  │   intended use, limitations)                   │
                  │                                                │
                  │ CloudTrail · trail dedicado del proyecto       │
                  │   audit log: quién aprobó qué modelo,          │
                  │   con qué datos, en qué momento                │
                  └────────────────────────────────────────────────┘


                  ┌────────────────────────────────────────────────┐
                  │ IaC final · CDK app completa                   │
                  │                                                │
                  │ aje-analytics-model-pedido-sugerido/infra/     │
                  │   ↳ Stack único parametrizable por stage       │
                  │     y por country list                         │
                  │                                                │
                  │ → Replicable: nuevo modelo de AJE en días,     │
                  │   no semanas                                   │
                  └────────────────────────────────────────────────┘

Componentes nuevos Nivel 3 · tabla

# Componente AWS Nombre del recurso Función
30 Lambda · retrain trigger aje-dev-ps-retraintrigger-lambda Recibe alarm de drift y dispara pipeline de retraining
31 EventBridge Rule · drift aje-dev-ps-driftrule-{pais}-eventbridge (uno por país) Conecta CloudWatch alarm con Lambda de retrain
32 SageMaker Experiments aje-dev-ps-recmodel-{pais}-experiment Tracks grid de hiperparámetros
33 SageMaker Model Cards implícito en cada Model Package Metadata estandarizada
34 CloudTrail · trail dedicado aje-dev-ps-audittrail-cloudtrail Audit log del proyecto
35 S3 Bucket · CloudTrail logs aje-dev-ps-audittrailbucket-s3 Storage del CloudTrail
36 DynamoDB · retrain history aje-dev-ps-retrainhistory-dynamodb Histórico de retrains: trigger, modelo nuevo, aprobación
37 CloudWatch Alarm · concept drift aje-dev-ps-conceptdriftalarm-{pais}-cloudwatch Métricas de calidad caen vs baseline aprobado
38 SNS Topic · governance aje-dev-ps-governance-topic-sns Notificaciones de aprobación pendiente
39 IAM Role · retrain aje-dev-ps-retrainrole-iam Trust: Lambda. Permisos: invocar pipeline + lectura Model Registry

Total nuevos Nivel 3: 10 → Total acumulado Nivel 3: 39 componentes (más recursos auxiliares como log groups y bucket policies = ~45 recursos total)


Patrones recurrentes

Pattern 1 · Multi-país parametrizado

Todos los componentes que tienen versión por país siguen el mismo patrón:

Pattern 2 · Gates de calidad en serie

En Nivel 2-3, los modelos pasan por tres gates antes de promoción a producción:

  1. Tests de regresión (automático) — schema, volumen, latencia, costo
  2. Métricas vs baseline (automático) — NDCG@10 > baseline + 0.01
  3. Aprobación humana (opcional según contexto) — analista de Athenea aprueba en consola SageMaker

Las reglas exactas se documentan en DOC-AF-04.

Pattern 3 · Observabilidad por capas

Cada Nivel agrega capa de observabilidad sobre el anterior:


Decisiones técnicas anotadas

Decisión Opciones consideradas Elección Razón
Pipeline único multi-país vs N pipelines A) un SM Pipeline parametrizado · B) 7 SM Pipelines independientes A · uno parametrizado (propuesta) Mantenibilidad. Cambio se propaga a los 7 países sin código duplicado. La parametrización vía DynamoDB ya está implementada
Train+Inference separados o unificados A) un solo pipeline para todo · B) 2 pipelines distintos (Nivel 2) B · separados (propuesta) Cadencias distintas: training semanal (caro), inference diario (más liviano). Aislamiento de fallos. CI/CD independiente
Model Registry por país vs único compartido A) un Model Package Group global · B) 7 model groups B · uno por país Aprobación y deploy independientes por país. Una falla en un país no bloquea otros. Coincide con la propuesta v2
Feature Store online vs solo offline A) solo offline · B) online + offline A · solo offline (Nivel 2) Las features se computan diariamente y se consumen en el pipeline de inferencia (no necesita serving online de baja latencia). Más barato. Se puede agregar online en futuras iteraciones
Endpoint persistente vs batch transform A) endpoint persistente · B) batch transform diario B · batch transform La inferencia es diaria, no en tiempo real. Batch transform paga solo cuando corre. Endpoint persistente sería ~$200/mes extra sin uso
Drift detection con SageMaker Model Monitor vs custom A) Model Monitor nativo · B) custom con Spark A · Model Monitor Producto AWS nativo. Genera reportes JSON estandar. Integración natural con CloudWatch alarms
Aprobación humana automatizable o requerida A) automática si métricas pasan · B) siempre humana en Nivel 2 · C) humana solo en concept drift (Nivel 3) C · humana solo en concept drift Balance entre seguridad y velocidad. Reentrenos por data drift / preventivos no requieren aprobación si pasan gates 1+2. Concept drift sí merece revisión
CDK Synthesizer con bootstrap vs CliCredentials A) DefaultStackSynthesizer · B) CliCredentialsStackSynthesizer A · Default con bootstrap Ya validado en producción. Más permisos pero menos fricción operativa. CliCredentials se exploró pero requiere muchos perms en el role del user
Naming verbose vs abreviado A) dynamodb · B) ddb A · verbose (decisión de DOC-AF-03) Coincide con stack ya desplegado. Menos ambigüedad al leer logs y referencias

Próximos pasos

  1. Sesión 2 (Mié 20-may) · validar con AJE el diagrama de Nivel 1 (el menos cambiable) y aprobar conceptualmente los Niveles 2-3 (que se concretan en Touchpoints).
  2. Generar diagramas visuales (PNG + fuente draw.io) antes del cierre de la fase. La descripción ASCII de este documento queda como referencia de lectura, pero el entregable final es un PNG por Nivel.
  3. Touchpoint Nivel 2 (Lun 15-jun) · confirmar componentes propuestos del Nivel 2 (Feature Store schema, separación train/inference, gates de aprobación).
  4. Touchpoint Nivel 3 (Lun 6-jul) · confirmar mecánica multi-modelo y workflow de retraining con data observada de Niveles 1-2.