Plataforma de Inteligencia de Datos para SAP — Arquitectura, Seguridad y Demo Interactivo
Presentación completa para Grupo Avícola Campestre. Incluye demo de la plataforma CIRO AI, visualizaciones dinámicas, conectores, seguridad, y comparación con Microsoft Fabric.
Datos reales de la infraestructura desplegada en AWS us-east-1 para Campestre
Cada servicio que usamos, qué hace, y por qué lo elegimos — sin jerga técnica
ciro-singularity-data-lake-dev tiene 535 GB de datos en formato Apache Iceberg.
Iceberg es como poner los datos en cajas organizadas con etiquetas en vez de tirarlos en un montón.
vbrk tiene columnas como
vbeln (número factura), netwr (monto), fkdat (fecha)...
s3://ciro-singularity-.../warehouse/vbrk_v2/, tienen 15 columnas, formato Parquet".
382bfc35-c7d1-404b-a0f6-c10b0bc1e630
Singularity puede conectarse a cualquier fuente de datos estructurada o semi-estructurada. Aquí están todas las opciones.
Estos conectores ya están desarrollados en la plataforma. Solo requieren configuración de credenciales.
Estos conectores requieren desarrollo o configuración adicional. Se cobra un fee único de setup.
Datos fluyendo desde múltiples fuentes hacia Singularity — aislamiento total por tenant
Pregunta en español natural → obtén gráficos, tablas, SQL, mapas, y forecasts instantáneamente
"¿Cuáles son los 10 clientes con más facturación?" → CIRO genera el SQL, ejecuta la consulta, y crea un gráfico de barras automáticamente.
Barras, líneas, waterfall, variance, sankey, treemap, mapas, KPIs, gauges, small multiples, IBCS-compliant y más.
Detección automática de tendencias, anomalías Z-score, y pronósticos. "¿Cómo se proyectan las ventas para Q2?"
Dashboard Kaplan-Norton con KPIs, varianza, drill-down, strategy map, y AI insights
Visualización 3D con Deck.gl — clusters, heatmaps, rutas, y análisis geográfico
Construye transformaciones complejas con drag-drop, JOINs visuales, y asistente IA
50+ tipos de gráficos con IA que recomienda la mejor visualización para tus datos
Monitoreo en tiempo real del pipeline, jobs Spark, resultados analíticos, e infraestructura
Cada organización tiene recursos completamente aislados — imposible acceso cruzado
DirectQuery desde Redshift — dashboards siempre actualizados con datos del Data Lake
SAP ECC →(RFC)→ Kafka →(Streaming)→ Spark →(MERGE)→ Iceberg/S3 →(Glue Catalog)→ Redshift Spectrum →(ODBC DirectQuery)→ Power BI
Los datos de SAP están disponibles en Power BI en ~1 minuto después de ser extraídos. Sin importación manual. Sin ETL adicional. Siempre actualizados.
VPC + SGs + IAM + KMS + S3 Policies + CloudTrail + GuardDuty + Security Hub. Zero exposición pública. Cifrado total at-rest y in-transit. Auditoría completa.
Diagrama interactivo de la arquitectura de red. Pasa el mouse sobre cada componente para ver detalles.
Conexión cifrada punto a punto entre las instalaciones de Campestre y la VPC privada en AWS.
Cada servicio tiene su propio firewall que solo permite tráfico específico. Todo lo demás se bloquea.
Cada dato se cifra en múltiples puntos. Nunca viaja en texto plano.
Cada componente tiene un rol IAM que solo puede hacer exactamente lo que necesita. Nada más.
Las credenciales de SAP nunca están en código. Se almacenan cifradas y se rotan automáticamente.
Cada acción en AWS se registra. Anomalías activan alertas inmediatas.
La cuenta de servicio SAP tiene permisos mínimos. No puede modificar absolutamente nada.
S_RFC — Llamadas RFC remotas (lectura de tablas)S_TABU_DIS — Lectura de tablas (solo lectura)RFC_READ_TABLE — Módulo estándar SAP de lecturaMERGE INTO, CDC, SCD Type 2, Schema Evolution, Particionamiento — directo del código fuente de Singularity
Cada tabla SAP tiene primary keys definidas. El MERGE evita duplicados y actualiza registros existentes.
Para tablas de datos maestros (KNA1, MAKT, MARA...), guardamos el historial completo de cambios con versionado.
El sistema detecta automáticamente cambios en el esquema de SAP — columnas nuevas, eliminadas, o tipos cambiados — sin perder datos.
| Tier | Tablas | Partitions | Partition Key | Razonamiento |
|---|---|---|---|---|
| XL (>10M rows) | FAGLFLEXA, GLT0 | 12 | BUKRS | Máximo paralelismo para tablas de contabilidad masivas |
| Large (1M-10M) | VBRK, VBRP, VBAK, VBAP, LIKP, LIPS, BKPF, AUFK, BSIK, BSAK, BSID, BSAD | 6 | VBELN/BUKRS/KUNNR | Balance entre paralelismo y overhead de particiones |
| Medium (100K-1M) | EKKO, EKPO, MARC, MBEW, VBFA, MKPF, AFKO, AFPO, KNVP | 3 | EBELN/MATNR/AUFNR | Particionamiento moderado para tablas intermedias |
| Small/Master (<100K) | KNA1, MAKT, T001, T001W, TVKO, ... | 1 | — | Tablas maestras: poco volumen, 1 partición suficiente |
| TOTAL | ~106 | MSK Serverless limit: 120 partitions/cluster | ||
pyrfc, V3 RFC con field projection, 5 workers paralelos, key-based pagination, transformaciones at-source
python sap_kafka_producer.py VBRK,VBRP,KNA1
python sap_kafka_producer.py VBRK --incremental
python sap_kafka_producer.py VBRK --continuous --interval=60
CloudWatch Alarms, Lambda Watchdog, Data Quality Checks, Security Monitoring — todo definido en Terraform
7 alarmas CloudWatch activas monitorean el pipeline 24/7. Configuradas via Terraform en modules/tenant/monitoring.tf
4 metric filters en CloudTrail detectan actividad sospechosa. Definidos en modules/shared/security_monitoring.tf
userIdentity.type = "Root". Esto nunca debería pasar en operaciones normales.
Alerta inmediata vía SNS topic singularity-security-alerts.
GetSecretValue con errorCode = "AccessDeniedException". Intento de leer secretos sin autorización.
Toda la infraestructura está definida como código. Reproducible, auditable, versionada. Zero configuración manual.
singularity-{tenant_id}-{resource}-{env}
singularity-campestre-kafka-prd
singularity-campestre-spark-prd
singularity-campestre-data-lake-prd
singularity-campestre-extractor-prd
Tenant = campestre
CiroOrgId = 42
Client = Grupo Avícola Campestre
ManagedBy = Terraform
Project = Singularity
SELECT * FROM vbrk FOR TIMESTAMP AS OF '2026-02-15'
enable_key_rotation = true). La llave tiene un período de eliminación de 30 días — imposible borrarla por accidente.
terraform apply.
No hay configuración manual — no hay "recetas secretas" que solo un ingeniero conoce.
Cada ladrillo, cada cerradura, cada cámara de seguridad está documentada en código,
versionada en Git, y revisada por el equipo antes de aplicarse.
Ventas, logística, compras, producción, finanzas, maestros, custom Z*
KNA1 contiene nombres/direcciones de clientes. No se extraen datos de empleados (HR/HCM), contraseñas, ni datos bancarios personales. Región: us-east-1. Retención: indefinida (históricos completos).
Respuestas directas a las preguntas que su CISO hará. Sin marketing — solo hechos técnicos verificables.
Toda la infraestructura corre sobre AWS, que mantiene SOC 1/2/3 Type II auditado anualmente. Los reportes están disponibles vía AWS Artifact para su equipo de auditoría.
AWS mantiene certificación ISO 27001, 27017, y 27018. Aplica a todos los servicios que usamos: S3, MSK, EMR, KMS, VPC, CloudTrail.
AWS Security Hub con CIS AWS Foundations Benchmark v1.4 y AWS Foundational Security Best Practices habilitados. Findings monitoreados continuamente.
CIRO como empresa aún no tiene SOC 2 Type II propio (en proceso para Q4 2026). Sin embargo, el modelo de shared responsibility de AWS significa que los controles de infraestructura (physical security, network, compute, storage) ya están auditados por AWS. Los controles que CIRO agrega (IAM policies, encryption config, monitoring, access control) están definidos como Infrastructure-as-Code en Terraform y son 100% auditables por el cliente — puede revisar cada línea de configuración.
singularity-{tenant_id}-data-lake-{env} — bucket exclusivo, no compartidosingularity_{tenant_id}_db_{env} — catálogo separadomodules/tenant/iam.tf — cada policy tiene resources scoped al ARN del bucket/database/cluster del tenant específico. No hay wildcards cross-tenant.
| Conexión | Protocolo | Cifrado | Evidencia |
|---|---|---|---|
| SAP → EC2 Extractor | RFC sobre IPsec VPN | TLS/IPsec | VPN tunnel vpn-0077443d15fec8425 con AES-256-GCM |
| EC2 → Kafka MSK | Port 9098 (IAM Auth) | TLS 1.2+ | MSK Serverless solo acepta IAM auth en port 9098, que requiere TLS obligatorio. No existe port plaintext. |
| Kafka → Spark EMR | Port 9098 (IAM Auth) | TLS 1.2+ | Mismo que arriba — EMR Serverless se conecta vía IAM auth, TLS enforced por MSK Serverless. |
| Spark → S3 | HTTPS (port 443) | TLS 1.2+ | Bucket policy con Deny en aws:SecureTransport=false. No se permite HTTP. |
| Spark → Glue | HTTPS via VPC Endpoint | TLS 1.2+ | VPC Interface Endpoint — tráfico nunca sale del VPC. AWS API siempre es HTTPS. |
| Spark → Redshift | JDBC over TLS | TLS 1.2+ | Redshift Serverless enforce SSL por defecto. JDBC URL incluye ssl=true. |
| Redshift → Power BI | ODBC/JDBC over TLS | TLS 1.2+ | Redshift requiere SSL. Power BI ODBC connector usa TLS. |
| Dashboard → API | HTTPS | TLS 1.3 | CloudFront + ACM certificate. HSTS habilitado. |
Resumen: 100% de las conexiones entre componentes usan TLS 1.2 o superior. No existe ninguna conexión plaintext en el pipeline. MSK Serverless no ofrece puertos sin TLS — es TLS-only by design. S3 rechaza requests HTTP con bucket policy explícita.
| Rol | Servicio | Permisos | NO tiene acceso a |
|---|---|---|---|
Extractor RoleSingularity-{tenant}-Extractor-Role | EC2 | S3 PutObject (solo /raw/*), Kafka produce, Secrets read, KMS, CloudWatch Logs | Glue, EMR, Redshift, Lambda, S3 Delete, Kafka consume |
EMR Execution RoleSingularity-{tenant}-EMR-Execution-Role | EMR Serverless | S3 read/write (tenant bucket), Glue catalog, Kafka consume, KMS, CloudWatch Logs | EC2, Lambda, Secrets Manager, IAM, other tenant buckets |
| Lambda Execution Role | Lambda | EMR StartJobRun/CancelJobRun, CloudWatch Logs | S3, Kafka, Glue, Redshift, Secrets, EC2 |
Customer Data Access RoleSingularity-{tenant}-DataAccess-Role | Athena/BI | Athena queries (own workgroup), Glue read-only, S3 read /warehouse/* only | EMR, Kafka, Lambda, EC2, Secrets, S3 write, S3 /raw/*, S3 /checkpoints/* |
Nota: El rol de EC2 Extractor es dedicado y separado del rol de EMR. Si el extractor se compromete, el atacante NO obtiene acceso a Glue, EMR, ni Redshift. Solo puede escribir a S3 /raw/* y producir a Kafka. Los roles están definidos en modules/tenant/iam.tf — audítelos directamente.
bi.dq_check_results en Redshift. Alerta vía SNS si hay anomalías en row counts, null rates, o freshness.| Control | Implementación | Evidencia |
|---|---|---|
| IMDSv2 Enforced | http_tokens = "required", hop limit = 1 | main.tf line 260 |
| No Public IP | associate_public_ip_address = false | main.tf line 255 |
| Docker Version Pinned | dnf install -y docker-25.0.* (no latest) | main.tf user_data |
| SSH Hardened | MaxAuthTries=3, AllowTcpForwarding=no | main.tf user_data |
| Security Group | SSH from VPC only, egress: S3 via prefix list + VPC internal + SAP RFC ports only | security_groups.tf |
| Dedicated IAM Role | Extractor-only role (no EMR access), produce-only Kafka, write-only S3 /raw/* | iam.tf Extractor Role |
| Kernel Hardening | ICMP redirects disabled, TCP forwarding disabled | main.tf user_data sysctl |
| Escenario | RPO | RTO | Mecanismo |
|---|---|---|---|
| Corrupción de datos en S3 | 0 (versioned) | < 1 hora | S3 Versioning habilitado. Rollback a versión anterior inmediato. KMS key rotation no afecta versiones existentes. |
| Borrado accidental de tabla Iceberg | 0 | < 30 min | Iceberg time-travel: SELECT * FROM table TIMESTAMP AS OF '...'. Parquet files permanecen en S3. |
| Fallo del EC2 Extractor | 5 min | < 15 min | CloudWatch StatusCheck alarm → SNS alert. Auto-recovery via EC2 auto-recovery o re-launch con mismo AMI/user_data. |
| EMR Spark job crash | 0 | < 5 min | Lambda Watchdog detecta en siguiente ciclo (5 min) y auto-restart. Kafka retiene datos no procesados (retention default 7 días). |
| MSK Kafka outage | Kafka retention | AWS-managed | MSK Serverless es fully managed con multi-AZ built-in. AWS SLA: 99.9%. Datos replicados automáticamente. |
| AZ failure completa | < 30 min | < 2 horas | MSK y EMR operan en 2 AZs. S3 es multi-AZ by design (11 9's durability). EC2 extractor es single-AZ (SPOF conocido) — re-launch en otra subnet. |
| Region failure (us-east-1 down) | 24 horas | 4-8 horas | Cross-region replication no habilitada por defecto (costo). Disponible como upgrade: S3 CRR a us-west-2, Terraform re-deploy. SAP source data permanece intacta. |
Transparencia: El EC2 Extractor es single-AZ (un SPOF conocido). El riesgo es bajo porque: (1) si falla, solo se detiene la extracción — los datos existentes en S3/Iceberg siguen disponibles para queries, (2) recovery es automatizable en <15 min, (3) Kafka retiene los datos para re-procesamiento. Para clientes que requieren HA de extracción, ofrecemos Auto Scaling Group con min=1 como upgrade.
| Métrica | Compromiso | Penalidad por Incumplimiento |
|---|---|---|
| Pipeline Uptime | 99.5% mensual | < 99.5%: 10% crédito. < 99.0%: 25% crédito. < 95%: 50% crédito sobre mensualidad de infraestructura. |
| Data Freshness | Datos en Iceberg < 1 hora de antigüedad (modo continuo) | Si data freshness > 4 horas por causa atribuible a CIRO (no SAP/VPN): 5% crédito. |
| Soporte — Severidad 1 | Respuesta < 1 hora (pipeline down, data loss) | Si respuesta > 2 horas: 5% crédito. |
| Soporte — Severidad 2 | Respuesta < 4 horas laborales | Si respuesta > 8 horas: crédito proporcional. |
| Seguridad — Incident Response | Notificación < 24 horas de detección de breach | Obligación contractual. Incumplimiento = breach de contrato. |
us-east-1 (Virginia). No se migran a otra región sin autorización escrita del cliente.| Componente | Portabilidad | Tiempo Estimado | Costo |
|---|---|---|---|
| Datos en S3/Iceberg | 100% portable — Parquet + Iceberg metadata. Compatible con Spark, Trino, Athena, Snowflake, Databricks. | Inmediato (S3 copy) | Solo costo de transfer S3 (~$0.09/GB) |
| Glue Catalog | Export vía AWS CLI. Compatible con cualquier Hive-compatible metastore. | < 1 hora | $0 |
| Redshift Data | UNLOAD to S3 en CSV/Parquet. Importable a cualquier warehouse. | 2-4 horas | $0 |
| Terraform Modules | Entregables al cliente bajo solicitud. Puede operar infra independientemente. | N/A | $0 |
| CIRO AI Platform | La plataforma CIRO (chat, dashboards, visualizaciones) no es portable — es SaaS. | N/A | Se pierde acceso al cancelar |
| Migración Asistida | CIRO asiste con migración completa a la plataforma destino del cliente | 1-2 semanas | Incluido (primeras 10 horas). Adicional a $85/hr. |
terraform plan → review → terraform applyterraform apply con commit anteriordeploy/tenant/deploy_pipeline.sh {tenant_id}s3://{bucket}/spark-jobs/ → EMR lee de S3aws_lambda_functionConcern válido: El Redshift dual-write es non-blocking — si falla, Iceberg sigue funcionando pero Power BI ve datos stale. Cómo lo detectamos:
dq_alert.py) corre cada 2 horas y verifica bi.dq_check_results — detecta si las tablas de Redshift no se actualizaron.MAX(ingestion_time) en Redshift vs timestamp actual. Si delta > 4 horas → SNS alert.Redshift write failed for {table} — metric filter detectable.Concern: En modo triggered, EMR se apaga después de 30 min idle. ¿Qué pasa con los datos?
Secuencias, flujos de decisión y áreas de cobertura de la plataforma
sequenceDiagram
participant SAP as SAP ECC
10.x.x.x:3200
participant VPN as IPsec VPN
Claro ISP
participant EC2 as EC2 Extractor
c5.4xlarge
participant MSK as Kafka MSK
Port 9098 IAM
participant LBD as Lambda Watchdog
EventBridge 5min
participant EMR as Spark EMR
Serverless
participant S3 as S3 Iceberg
KMS encrypted
participant GLU as Glue Catalog
90+ tables
participant RS as Redshift
Serverless
participant PBI as Power BI
DirectQuery
EC2->>VPN: pyrfc RFC_READ_TABLE
VPN->>SAP: TCP 3200-3399
SAP-->>VPN: Rows (15K-200K batch)
VPN-->>EC2: Data over tunnel
EC2->>EC2: Dynamic batch sizing
EC2->>MSK: produce(topic=sap-tenant-TABLE, batch=500 rows/msg)
Note over MSK: 106 partitions across 90+ topics
LBD->>EMR: Check job status every 5min
alt Job not running
LBD->>EMR: StartJobRun(iceberg_consumer.py)
else Stuck > 6 hours
LBD->>EMR: CancelJobRun + StartJobRun
end
EMR->>MSK: subscribePattern(sap-tenant-*)
EMR->>EMR: explode(500 rows/msg) per table
EMR->>EMR: ThreadPoolExecutor(8 writers)
loop Per SAP Table (parallel)
EMR->>GLU: Check table exists?
alt Table exists
EMR->>EMR: Schema evolution check
EMR->>S3: MERGE INTO on primary keys
else New table
EMR->>S3: CREATE TABLE + writeTo()
EMR->>GLU: Register in catalog
end
EMR->>RS: Dual-write (non-blocking)
end
RS->>PBI: JDBC DirectQuery
flowchart TD
A["EventBridge
every 5 min"] --> B["Lambda Handler"]
B --> C{"STREAMING_MODE?"}
C -- continuous --> D["List EMR jobs
state=RUNNING"]
C -- triggered --> T["Check Kafka lag
> 1000 msgs?"]
T -- No --> U["Exit: no data"]
T -- Yes --> V["Submit batch job"]
D --> E{"Running jobs?"}
E -- 0 --> F["Start new streaming job"]
E -- 1 --> G{"Age > 6 hours?"}
E -- ">1" --> H["Cancel duplicates
keep newest"]
G -- Yes --> I["Cancel stuck job"]
I --> F
G -- No --> J["Healthy - no action"]
F --> K["emr.start_job_run()"]
K --> L["sparkSubmit:
iceberg_consumer.py"]
L --> M["Env: S3_BUCKET, GLUE_DB
KAFKA_BOOTSTRAP, TENANT_ID
REDSHIFT_JDBC_URL"]
style A fill:#dbeafe,stroke:#2563eb
style J fill:#dcfce7,stroke:#16a34a
style I fill:#fee2e2,stroke:#dc2626
flowchart TD
A["Kafka micro-batch
(30s trigger)"] --> B["Explode JSON
500 rows/msg"]
B --> C["Group by
sap_table_name"]
C --> D["_write_single_table()"]
D --> E{"Table exists
in Glue?"}
E -- No --> F["CREATE TABLE
Iceberg + Parquet + Snappy"]
F --> G["Set table properties
sap.table.group, .type, .description"]
E -- Yes --> H{"Schema changed?"}
H -- Yes --> I["ALTER TABLE
ADD COLUMN"]
I --> J["SNS Alert"]
H -- No --> K{"Primary keys
defined?"}
K -- Yes --> L["MERGE INTO target
USING source
ON key match"]
L --> M["WHEN MATCHED
→ UPDATE SET"]
L --> N["WHEN NOT MATCHED
→ INSERT"]
K -- No --> O["APPEND mode
(no dedup)"]
M --> P["Redshift dual-write"]
N --> P
O --> P
style L fill:#dbeafe,stroke:#2563eb
style I fill:#fef3c7,stroke:#d97706
style F fill:#dcfce7,stroke:#16a34a
sequenceDiagram
participant SPK as Spark EMR
participant STG as Redshift staging
participant TGT as Redshift bi.kna1_v2
participant AUD as bi.audit_log
SPK->>STG: COPY via S3 unload (temp parquet)
Note over STG: staging.kna1_staged
Fresh rows from Kafka
STG->>STG: Compute MD5 hash
COALESCE(name1||addr) per row
STG->>TGT: Compare s.row_hash != t.row_hash
alt Hash changed (customer updated)
TGT->>TGT: UPDATE SET is_current=false, valid_to=NOW()
STG->>TGT: INSERT new version (is_current=true, valid_from=NOW())
STG->>AUD: INSERT audit_log (operation=UPDATE, old_hash, new_hash)
else New customer
STG->>TGT: INSERT (is_current=true, valid_from=NOW(), valid_to=NULL)
STG->>AUD: INSERT audit_log (operation=INSERT)
end
STG->>STG: TRUNCATE staging table
Note over TGT: Power BI queries WHERE is_current=true
flowchart TD
A["POST /data-lake/provision"] --> B["DataLakeProvisioningService"]
B --> C{"Quota tier?"}
C -- ENTERPRISE --> D["pipeline_enabled=false"]
C -- ENTERPRISE_PRO --> E["pipeline_enabled=true"]
D --> F["terraform apply"]
E --> F
F --> G["modules/tenant/"]
G --> H["S3 Bucket
KMS + versioning"]
G --> I["Glue DB
singularity_tenant_db"]
G --> J["Athena Workgroup
scan limit"]
G --> K{"pipeline_enabled?"}
K -- true --> L["MSK Serverless
IAM auth"]
K -- true --> M["EMR Serverless
Spark 3.5"]
K -- true --> N["EC2 Extractor
c5.xlarge"]
K -- true --> O["Lambda Watchdog
EventBridge"]
K -- true --> P["CloudWatch
7 alarms"]
K -- false --> Q["Storage only
$50/mo"]
style H fill:#dcfce7,stroke:#16a34a
style L fill:#dbeafe,stroke:#2563eb
style Q fill:#fef3c7,stroke:#d97706
flowchart LR
A["Internet"] --> B["VPC
Private subnets"]
B --> C["Security Groups
Port-level rules"]
C --> D["IAM Roles
Least privilege"]
D --> E["KMS Encryption
At rest + transit"]
E --> F["S3 Policies
Deny HTTP + unencrypted"]
F --> G["CloudTrail
API audit log"]
G --> H["Metric Filters
Root login, IAM changes"]
style A fill:#fee2e2,stroke:#dc2626
style B fill:#fef3c7,stroke:#d97706
style C fill:#fef3c7,stroke:#d97706
style D fill:#dbeafe,stroke:#2563eb
style E fill:#dbeafe,stroke:#2563eb
style F fill:#dcfce7,stroke:#16a34a
style G fill:#dcfce7,stroke:#16a34a
style H fill:#dcfce7,stroke:#16a34a
CIRO unifica las tres áreas que normalmente requieren herramientas separadas: almacenamiento de datos, análisis de negocio e inteligencia artificial — en una sola plataforma integrada.
Comparación exhaustiva contra Microsoft Fabric, Snowflake + Fivetran, y Databricks
| Criterio | 🔵 CIRO Singularity | 🟣 Microsoft Fabric | ❄️ Snowflake + Fivetran | 🧱 Databricks |
|---|---|---|---|---|
| Conector SAP | ✅ RFC nativo (pyrfc) incluido | ⚠️ Theobald Xtract (~$18K/año) o SAP CDC preview | ⚠️ Fivetran HVR SAP (~$1,500-3,000/mes) | ⚠️ Partner (SNP Glue, Theobald) ~$18-30K/año |
| Latencia SAP→Query | ✅ ~1 min (streaming Kafka) | ⚠️ 15-60 min (Data Factory batch) | ⚠️ 5-60 min (Fivetran sync) | ✅ 1-5 min (con Auto Loader) |
| Formato de Datos | ✅ Apache Iceberg (abierto) | ⚠️ Delta Lake / OneLake (propietario) | ⚠️ Propietario (micro-partitions) | ✅ Delta Lake (open source) |
| Seguridad de Red | ✅ 100% VPC privada, 0 puertos públicos | ⚠️ OneLake endpoint público por defecto | ⚠️ Endpoint público + Private Link ($$$) | ✅ VPC injection disponible (costo extra) |
| Multi-Tenant | ✅ Aislamiento físico total (S3/KMS/IAM) | ⚠️ Aislamiento lógico (RBAC, CU compartidos) | ✅ Cuentas separadas posibles | ⚠️ Unity Catalog (lógico) |
| IA Nativa | ✅ Chat AI especializado SAP · 50+ viz | ✅ Copilot (genérico) | ✅ Cortex AI (reciente, limitado) | ✅ Mosaic AI (potente, caro) |
| Vendor Lock-in | ✅ Formato abierto, migrable | ⚠️ Fuerte dependencia Microsoft | ⚠️ Formato propietario, lock-in fuerte | ✅ Delta Lake abierto, pero plataforma propia |
| Power BI | ✅ DirectQuery vía Redshift ODBC | ✅ Direct Lake nativo (más fluido) | ✅ DirectQuery vía connector | ✅ DirectQuery via Databricks SQL |
| Costo Mensual Total* | ~$3,500/mes | ~$4,300-7,400/mes | ~$5,500-9,000/mes | ~$4,800-8,500/mes |
* Escenario: SAP ECC con 350M+ filas, 535 GB, 90 tablas, streaming pipeline, BI queries, 10-15 usuarios. Ver desglose detallado abajo.
Precios publicados de AWS, Microsoft Azure, Snowflake y Databricks. Marzo 2026. Región us-east-1.
Precios basados en tarifas publicadas de AWS para us-east-1. Calculado para el perfil de Campestre.
| Servicio AWS | Specs / Uso | Tarifa Publicada | Costo/Mes |
|---|---|---|---|
| 🖥️ EC2 c5.4xlarge | 16 vCPU, 32GB RAM, 24/7 | $0.68/hr on-demand | $496 |
| 💿 EBS gp3 50GB | 3,000 IOPS, 125 MB/s | $0.08/GB/mes + IOPS | $8 |
| 📨 MSK Serverless | ~34 topics, ~500GB throughput/mes | $0.75/cluster-hr + $0.10/GB in + $0.05/GB out | $625 |
| ⚡ EMR Serverless | Spark 3.4, ~100 vCPU-hrs/día | $0.052624/vCPU-hr + $0.0058/GB-hr | $195 |
| 📊 Redshift Serverless | 128 RPU, ~4 hrs/día query activity | $0.375/RPU-hr (on-demand) | $480 |
| 🪣 S3 Storage | 535 GB standard + requests | $0.023/GB/mes + $0.005/1K PUT | $18 |
| 🔐 KMS Keys (2) | 2 CMKs + ~500K requests/mes | $1/key/mes + $0.03/10K requests | $4 |
| 🔑 Secrets Manager | 3 secrets + access | $0.40/secret/mes + $0.05/10K calls | $2 |
| 🔐 VPN Site-to-Site | 1 connection, 2 tunnels, 24/7 | $0.05/hr/connection | $36 |
| 📚 Glue Catalog | 90 tables, ~200K requests/mes | Free tier (first 1M objects/requests) | $0 |
| 🔍 Athena | ~50 queries/día, ~200GB scanned/mes | $5/TB scanned | $1 |
| ⏰ Lambda Watchdog | 288 invocations/día (cada 5 min) | Free tier covers this | $0 |
| 📋 CloudTrail | Management events + S3 logs | First trail free, $2/100K data events | $5 |
| TOTAL INFRAESTRUCTURA AWS | $1,870/mes | ||
| Concepto | Detalle | Costo/Mes |
|---|---|---|
| ☁️ Infraestructura AWS | EC2 + MSK + EMR + Redshift + S3 + VPN + KMS (ver desglose arriba) | $1,870 |
| 🤖 CIRO Platform License | AI Chat (Claude Sonnet), 50+ visualizaciones, BSC Dashboards, Transformation Studio, Maps, Forecasting, Anomaly Detection | $830 |
| 🛡️ Gestión de Infraestructura | Seguridad 24/7, monitoreo y alertas, gestión de conectores SAP + todos los data sources, transformaciones de datos, actualizaciones de seguridad, soporte técnico dedicado | $800 |
| TOTAL CIRO MENSUAL | $3,500/mes | |
| TOTAL ANUAL | $42,000/año | |
Para manejar 350M filas de SAP con pipeline de ingestión, Lakehouse, y BI. Precios Azure Pay-As-You-Go.
| Componente | Detalle | Tarifa | Costo/Mes |
|---|---|---|---|
| 🟣 Fabric Capacity (F32) | 32 CU — mínimo para ETL + Lakehouse + SQL (reservación 1 año) | ~$0.11/CU/hr × 32 CU × 730 hrs | $2,570 |
| 🟣 Fabric Capacity (F64) | 64 CU — necesario si concurrencia >10 usuarios (reservación 1 año) | ~$0.11/CU/hr × 64 CU × 730 hrs | $5,140 |
| 🏭 SAP Connector | Theobald Xtract Universal (licencia anual) | ~$18,000-25,000/año | $1,500-$2,083 |
| 📈 Power BI | Incluido con Fabric Capacity (Direct Lake) | — | $0 (incluido) |
| 🪣 OneLake Storage | 535 GB datos + metadatos + logs | ~$0.023/GB (similar a S3) | $15 |
| 🔧 Azure Data Factory | Pipeline runs para SAP extraction | $1/1K activity runs + $0.25/DIU-hr | $200 |
| TOTAL FABRIC (F32 — Mínimo Viable) | $4,285-$4,868/mes | ||
| TOTAL FABRIC (F64 — Recomendado) | $6,855-$7,438/mes | ||
| TOTAL ANUAL (F64) | $82,260-$89,256/año | ||
| Componente | Detalle | Tarifa | Costo/Mes |
|---|---|---|---|
| ❄️ Snowflake Compute | Medium warehouse (~4 credits/hr) ~8 hrs/día | $2-3/credit (Standard on-demand) | $1,920-$2,880 |
| ❄️ Snowflake Storage | 535 GB (compressed ~200 GB) | $23/TB/mes (AWS us-east-1) | $5 |
| 🔌 Fivetran SAP Connector | HVR SAP connector + monthly active rows | Business tier: $1.50-3.00/1K MAR | $2,000-$3,500 |
| 📈 Power BI Pro (10 usuarios) | $14/user/mes | $14 × 10 | $140 |
| 🤖 Snowflake Cortex AI | LLM queries para análisis (si se usa) | $1.50-5.00/1M tokens | $100-$300 |
| TOTAL SNOWFLAKE + FIVETRAN | $4,165-$6,825/mes | ||
| TOTAL ANUAL | $49,980-$81,900/año | ||
| Componente | Detalle | Tarifa | Costo/Mes |
|---|---|---|---|
| 🧱 Jobs Compute (ETL) | Delta Live Tables, ~6 hrs/día procesamiento | $0.20-0.50/DBU (Premium) + AWS infra | $800-$1,500 |
| 🧱 SQL Warehouse (BI) | Medium, ~8 hrs/día para queries | $0.22-0.55/DBU + AWS infra | $1,200-$2,400 |
| ☁️ AWS Infra (EC2 + S3) | Underlying compute + storage (50-200% of DBU cost) | Variable (EC2 spot/on-demand) | $1,000-$2,000 |
| 🏭 SAP Connector | Theobald or SNP Glue connector | ~$18-30K/año | $1,500-$2,500 |
| 📈 Power BI Pro (10 usuarios) | $14/user/mes | $14 × 10 | $140 |
| TOTAL DATABRICKS | $4,640-$8,540/mes | ||
| TOTAL ANUAL | $55,680-$102,480/año | ||
Oferta de servicios para Grupo Avícola Campestre. Válida hasta 30 de abril 2026.
La implementación completa (infraestructura AWS, VPN, conector SAP, pipeline streaming, Redshift, Power BI, CIRO AI, y capacitación) está incluida sin costo adicional al contratar el servicio mensual. Tiempo estimado de implementación: 4-6 semanas.
| Concepto | Incluye | Mensual |
|---|---|---|
| ☁️ Infraestructura AWS | EC2 c5.4xlarge ($496) + MSK Serverless ($625) + EMR Serverless ($195) + Redshift 128 RPU ($480) + S3 535GB ($18) + VPN ($36) + KMS/Secrets/CloudTrail ($11) | $1,870 |
| 🤖 CIRO AI Platform | Licencia: AI Chat (Claude Sonnet), 50+ visualizaciones, BSC Dashboards, Transformation Studio, Maps, Forecasting, Anomaly Detection | $830 |
| 🛡️ Gestión de Infraestructura | Seguridad y monitoreo 24/7, alertas CloudWatch/CloudTrail, gestión de conectores (SAP + todos los data sources incluidos), transformaciones de datos, mantenimiento pipeline Spark/Kafka, actualizaciones de seguridad, soporte técnico dedicado por Slack/email | $800 |
| TOTAL MENSUAL RECURRENTE | $3,500/mes | |
| Servicio | Descripción | Costo |
|---|---|---|
| 🔌 Nuevos Conectores de Datos | ||
| PostgreSQL / MySQL / SQL Server | Configuración JDBC, mapeo de tablas, pipeline de ingestión | $0 (incluido) |
| REST API / Google Sheets / CSV | Configuración de endpoint, scheduling, transformaciones | $0 (incluido) |
| SAP S/4HANA o SAP B1 | OData/CDS setup, communication arrangements, testing | $500 setup único |
| Salesforce / HubSpot | OAuth2 app, Bulk API, mapeo objetos, delta sync | $750 setup único |
| Shopify / QuickBooks | API privada, mapeo entidades, webhook sync | $500 setup único |
| IoT / MQTT / Streaming | MQTT bridge, Kafka topic, real-time processing | $750 setup único |
| ERP Custom / SOAP / Legacy | Análisis técnico, desarrollo conector, testing | $1,000 setup único |
| 📊 Dashboards y Reportería | ||
| Dashboard Custom | Diseño, desarrollo, y deployment de dashboard personalizado | $300-$800 por dashboard |
| Power BI Report | Desarrollo de reporte Power BI con Redshift DirectQuery | $400-$1,000 por reporte |
| BSC Dashboard Custom | Balanced Scorecard con KPIs, strategy map, drill-down | $800-$1,500 |
| 🔧 Servicios Profesionales | ||
| Hora de Ingeniería | Desarrollo custom, integraciones, optimizaciones | $85/hora |
| Hora de Consultoría BI | Análisis de datos, diseño de métricas, estrategia BI | $100/hora |
| Capacitación Adicional | Sesión de 2 horas (hasta 10 personas) | $200/sesión |
| 📈 Upgrades de Infraestructura | ||
| EC2 Upgrade (c5.4xl → c5.9xl) | 36 vCPU, 72 GB RAM — para extracción masiva | +$855/mes (infra) |
| Redshift 256+ RPU | Duplicar capacidad de queries para >30 usuarios concurrentes | +$480/mes (infra) |
| Segundo Data Source Pipeline | Pipeline completo adicional (Kafka topics, Spark jobs, Glue tables) | +$200-400/mes (infra) |