Saltar al contenido principal

Infraestructura en la nube

Cómo está constituida la infraestructura del área: qué cuentas existen, qué vive en cada una y quién puede entrar.

Aquí no van credenciales

Esta página documenta qué existe y dónde, nunca contraseñas, llaves, tokens ni ARNs con secretos. Los valores se consultan en la consola de cada proveedor.

Las dos cuentas de AWS

La infraestructura está repartida en dos cuentas de AWS distintas. Saber cuál es cuál es lo primero: entrar a la equivocada hace perder tiempo y, peor, puede llevar a duplicar recursos que ya existen en la otra.

#CuentaAccount IDRegiónPara qué se usa
1admin@industriascts.com711387120162us-east-1ERP Odoo, QRCloud, util-inventary y todo el ecosistema de m-system
2digital1@industriascts.com.co079960139970us-east-2G-Cron, W-Flow y las apps internas de DDS
Están en regiones distintas

La cuenta 1 trabaja en us-east-1 y la cuenta 2 en us-east-2. La consola de AWS recuerda la última región usada, así que es fácil entrar a la cuenta correcta, no ver ningún recurso y concluir que no hay nada.

Si un recurso "no aparece", revisar primero la región.

La cuenta 2 está a nombre de una persona

digital1@industriascts.com.co es el correo corporativo de Juan Carlos Sanguino, jefe del Área TAD. Es corporativo, no personal, pero la recuperación de la cuenta depende de ese buzón: si algún día se desactiva, se pierde la vía de recuperación.

Pendiente

Documentar qué justifica la separación entre ambas cuentas. La división aparente es productos y ERP en la cuenta 1 frente a aplicaciones internas de DDS en la cuenta 2, pero conviene confirmarlo por escrito: es lo que determina en cuál se crea un recurso nuevo.


Cuenta 1 — admin@industriascts.com

Account ID: 711387120162 Región principal: us-east-1

Qué aplicación usa qué

Vista rápida para responder "si esto cae, ¿qué se cae?".

AplicaciónEC2ECSRDSOtros servicios
Odoo v17 (ERP de la empresa)✅ 1 VPS✅ 1 instancia
QRCloud✅ 1 VPS✅ 1 instancia
util-inventary✅ 1 VPS
m-system✅ 3 servicios✅ 1 instanciaECR · Route 53 · IoT Core · SQS · Lambda
W-Flow ⚠️ (corre en la cuenta 2)✅ comparte la instancia m-system

EC2 — tres VPS

NombrePara quéInstance IDTipoZona
odoo-17-prod-serverOdoo v17 — ERP de la empresai-0bbe4ae32dcde0983m7i.xlargeus-east-1b
QRCloudQRCloudi-0ce91cb0ddbd12521t3.mediumus-east-1c
util-inventaryInventario de componentes eléctricosi-056d3ed020b0ae985t2.microus-east-1c

Las tres están en ejecución, con sistema operativo Linux/UNIX.

Acceso y red

InstanciaDNS públicoIP públicaPar de clavesGrupo de seguridad
odoo-17-prod-serverec2-54-166-104-159.compute-1.amazonaws.com54.166.104.159odoo-prod-server-keyslaunch-wizard-7
QRCloudec2-54-243-99-52.compute-1.amazonaws.com54.243.99.52qr-prod-keyslaunch-wizard-8
util-inventaryec2-34-198-163-51.compute-1.amazonaws.com34.198.163.51PendientePendiente
¿Quién tiene los archivos .pem?

El acceso por SSH a estas instancias depende de los pares de claves odoo-prod-server-keys y qr-prod-keys. AWS no permite volver a descargar una clave privada: si el único .pem está en el computador de una sola persona y esa persona sale, se pierde el acceso por SSH a servidores en producción.

Hay que confirmar quién los tiene y dejar una copia resguardada.

Grupos de seguridad con nombre launch-wizard-*

launch-wizard-7 y launch-wizard-8 son nombres que AWS asigna automáticamente al crear una instancia desde el asistente. Conviene revisar sus reglas de entrada: si quedaron con SSH abierto a 0.0.0.0/0, cualquiera en internet puede intentar autenticarse contra estos servidores.

Fechas de lanzamiento

odoo-17-prod-server se lanzó el 2026/07/03 y QRCloud el 2025/01/09.

util-inventary no la desarrolló DDS

La creó el jefe de área. No aparece en el Mapa de sistemas ni en el perfil de repositorios de la organización, pero está corriendo en producción sobre esta cuenta.

ECS y ECR — m-system

Un único cluster, llamado runapp-cluster, con tres servicios de m-system. Todos sobre Fargate, tipo réplica y en estado activo.

ServicioRolDefinición de tareaTareas
frontend-serviceFrontend de m-systemfrontend-task:721/1
m-receptor-serviceBackendm-receptor-task:1021/1
run-app-serviceBackendrun-app-task:1061/1

ARN de cada servicio: arn:aws:ecs:us-east-1:711387120162:service/runapp-cluster/<servicio>

Los tres se crearon hace unos 393 días y su último despliegue fue hace 6 días.

Los nombres no dicen "m-system"

El cluster se llama runapp-cluster y uno de los backends run-app-service. Nada en esa nomenclatura indica que sea la infraestructura de m-system.

Alguien que entre a la consola buscando m-system no lo va a encontrar por nombre. Este es exactamente el tipo de conocimiento que solo existe en la cabeza de quien lo montó — y por eso queda escrito aquí.

Cada servicio corre con una sola tarea

Los tres están en 1/1: una única tarea por servicio. Fargate relanza la tarea si se cae, pero durante ese relanzamiento el servicio no responde. No hay redundancia.

Subir a 2 tareas daría continuidad durante fallos y durante los despliegues. Tiene costo, así que es una decisión de negocio.

Pendiente

Qué hace exactamente cada backend: m-receptor-service frente a run-app-service. Con los nombres no alcanza para saber a cuál acudir cuando algo falla.

En ECR están las imágenes de contenedor de cada uno de esos servicios.

Route 53

Aloja el dominio de m-system.

IoT Core · SQS · Lambda — el pipeline de m-system

Aquí vive el ecosistema que recibe y procesa los datos de los equipos en campo.

ServicioPara quéConvención de nombres
IoT CoreReglas de enrutamiento de los mensajes. Solo clientes de m-systemUUID del cliente con guiones bajos
SQSUna cola por cliente, enlazada desde la regla de IoT CoreUUID del cliente con guiones
LambdaUna por cliente, procesa los mensajes de la colaUUID del cliente con guiones
Lambda de notificacionesServicio de notificaciones de m-systemPendiente — nombre
IAMRol IoTRuleRole-INDUSTRIAS_CTS_1, compartido por todas las reglas de IoT
CloudWatchLogs de las Lambdas

Cómo se aprovisiona un cliente nuevo: Habilitar cuenta de m-system.

RDS — tres instancias

InstanciaBase de datos deMotorTamañoZonaMulti-AZ
db-odoo-17-prodOdoo v17PostgreSQLdb.t4g.mediumus-east-1b❌ No
db-qr-cloud-prodQRCloudMySQL Communitydb.t3.microus-east-1b❌ No
m-systemm-system y W-Flow ⚠️PostgreSQLdb.t3.smallus-east-1fPendiente

Las tres están disponibles. db-odoo-17-prod y db-qr-cloud-prod comparten la VPC vpc-04f469dc64f4ba14f.

La instancia m-system no es solo de m-system

También aloja la base de datos de W-Flow, que corre en la cuenta 2. El nombre de la instancia no lo dice.

Antes de reiniciar, redimensionar o restaurar esta instancia, tener presente que se afecta también a W-Flow — la herramienta con la que el equipo organiza su propio trabajo.

Ninguna base de datos tiene Multi-AZ

Sin Multi-AZ no hay réplica en otra zona de disponibilidad. Si falla la zona donde vive la instancia, la base de datos queda caída hasta que AWS la restablezca o se restaure un backup, y hay pérdida de datos desde el último respaldo.

Esto afecta al ERP de la empresa y a QRCloud, ambos en producción. Activarlo tiene costo, así que es una decisión de negocio: cuánto vale una hora sin ERP.

Pendiente — lo más urgente de esta página

¿Tienen backups automáticos activos y con qué retención? Sin Multi-AZ, el backup es la única red de seguridad que queda. Verificar y anotarlo aquí.

También falta: versión exacta de cada motor, y confirmar si m-system tiene Multi-AZ.

Nomenclatura inconsistente

Dos instancias siguen el patrón db-<app>-prod y la tercera se llama simplemente m-system. Lo mismo ocurre en EC2: odoo-17-prod-server frente a QRCloud y util-inventary. No rompe nada, pero dificulta filtrar y automatizar.

Mapa de la cuenta

Quién tiene acceso

PersonaRolNota
Alexander GarzónJefe de TICFue el primero en administrar esta cuenta. Es la memoria más antigua de cómo se montó
Juan Carlos SanguinoJefe del Área TAD

La cuenta tiene MFA activo, con tres factores registrados:

DispositivoDe
iPadMiguel Bautista
iPadJuan Carlos Sanguino
PropioAlexander Garzón
Al salir alguien del equipo, dar de baja su MFA

Si un dispositivo registrado deja la compañía, hay que eliminarlo de la cuenta mientras todavía hay acceso, no después. Quedan otros dos factores activos, así que el acceso no se pierde — pero un MFA vigente en un dispositivo que ya no controla la empresa sigue siendo una llave abierta.

Es un paso del proceso de salida, no una emergencia.

Pendiente
  • ¿admin@industriascts.com es el usuario root de la cuenta o un usuario IAM? Si es el root, conviene crear usuarios IAM por persona y reservar el root solo para lo que exige AWS.
  • ¿Cada persona entra con su propio usuario, o comparten credenciales? De eso depende si se puede saber quién hizo cada cambio.

Pendiente de esta cuenta

Pendiente
  • Nombre de la Lambda de notificaciones.
  • ¿Se usa alguna región además de us-east-1?
  • ¿Qué hay en la cuenta que no esté en esta lista? (S3, CloudFront, VPC, balanceadores, certificados)

Cuenta 2 — digital1@industriascts.com.co

Account ID: 079960139970 Región principal: us-east-2 Titular del correo: Juan Carlos Sanguino, jefe del Área TAD

Qué aplicación usa qué

AplicaciónEC2ECSRDSElastiCache
G-Cron✅ 2 servicioslabscorp-apps
W-Flow (cts-manager)✅ 2 servicios⚠️ m-system, en la cuenta 1wflow-redis
Apps de testing y documentación✅ 1 VPS
W-Flow depende de la otra cuenta

La aplicación corre en la cuenta 2 (us-east-2), pero su base de datos vive en la instancia RDS m-system de la cuenta 1 (us-east-1).

Consecuencias que no son evidentes mirando una sola cuenta:

  • Diagnosticar un fallo de W-Flow exige entrar a las dos cuentas, y a dos regiones distintas.
  • Un mantenimiento o una restauración de la instancia m-system también deja a W-Flow sin base de datos, aunque nada en su nombre lo sugiera.
  • El tráfico cruza entre regiones: suma latencia y costo de transferencia.
  • La separación entre cuentas deja de ser limpia: no se puede migrar, auditar o cerrar una cuenta sin revisar la otra.

EC2 — una VPS

NombreInstance IDTipoZonaLanzada
cluster-utils-appsi-097149584b9c301a6t3.smallus-east-2c2026/07/28

En ejecución, Linux/UNIX, 3/3 comprobaciones aprobadas.

DNS públicoIP públicaPar de clavesGrupo de seguridad
ec2-3-147-147-101.us-east-2.compute.amazonaws.com3.147.147.101cluster-utils-appscluster-utils-apps

Para qué sirve: es de DDS. Aquí se publican, bajo el dominio dnexus.cloud, las aplicaciones en testing, documentación y similares.

Ninguna instancia EC2 tiene IP elástica

Ni esta ni las tres de la cuenta 1. La IP pública de una instancia EC2 cambia cada vez que se detiene y se vuelve a iniciar.

Si un registro DNS de dnexus.cloud apunta a 3.147.147.101 y alguien reinicia la instancia, el dominio deja de resolver hacia el servidor y no hay ningún error visible en AWS: todo aparece "en ejecución".

Asignar una IP elástica es gratuito mientras esté asociada a una instancia activa.

ECS — dos clusters

Ambos sobre Fargate, con dos servicios cada uno.

Cluster g-cron

Aplicación de gestión de proyectos y generación de cronogramas con diagramas de Gantt.

ServicioDefinición de tareaTareasCreadoÚltimo despliegue
g-cron-backendg-cron-backend:191/1hace 68 díashace 20 días
g-cron-frontendg-cron-frontend:181/1hace 68 díashace 5 días

Cluster cts-manager — W-Flow

W-Flow es la aplicación equivalente a Monday desarrollada por CTS. En AWS y en GitHub se llama cts-manager.

ServicioDefinición de tareaTareasCreadoÚltimo despliegue
cts-manager-backendcts-manager-backend:931/1hace 119 díashace 7 horas
cts-manager-frontendcts-manager-frontend:891/1hace 119 díashace 7 horas

ARN de cada servicio: arn:aws:ecs:us-east-2:079960139970:service/<cluster>/<servicio>

Todos los servicios corren con una sola tarea

Igual que en la cuenta 1: los cuatro servicios están en 1/1. Sin redundancia durante fallos ni durante los despliegues.

RDS — una instancia

InstanciaMotorTamañoZonaVPCMulti-AZ
labscorp-appsPostgreSQLdb.t3.microus-east-2bvpc-096d15e0cefe7af10❌ No

Disponible. AWS reporta 3 recomendaciones informativas sobre esta instancia.

Es la base de datos principal de G-Cron, pero está pensada como instancia compartida: la intención es alojar en ella varios aplicativos, como W-Flow y similares.

Una instancia compartida concentra el riesgo

Compartir una instancia entre varias aplicaciones ahorra costo, y para aplicaciones internas es una decisión razonable. La contrapartida hay que tenerla presente: si esa instancia cae, caen todas las aplicaciones a la vez, y no tiene Multi-AZ.

Conviene mantener bases de datos separadas dentro de la instancia, una por aplicación, para que restaurar una no obligue a tocar las demás.

ElastiCache

NombreMotorConfiguraciónCreada
wflow-redisRedis 8.1Sin servidor (serverless)20 may 2026

Caché de W-Flow.

Route 53 — tres dominios

DominioRegistrosHosted Zone ID
dnexus.cloud4Z07156131E2L8RG22WGUE
labscorp.co6Z06559801VBL2MW3AG0PP
tera-electric.com2Z10271321W2UXFZU2US6Q

Las tres son zonas públicas creadas por el registrador de Route 53.

dnexus.cloud es el dominio donde se publican las aplicaciones en testing y la documentación, y donde están los productos en línea.

Pendiente — dos dominios sin explicar

labscorp.co y tera-electric.com no corresponden a ninguna aplicación documentada, y el nombre de la instancia RDS (labscorp-apps) sugiere que labscorp es algo más que un dominio suelto.

Documentar: qué son, para qué se usan, quién los registró y cuándo vencen. Un dominio vencido tumba todo lo que cuelga de él sin previo aviso.

Quién tiene acceso

Acceso exclusivo de dos personas:

PersonaNota
Juan Carlos Sanguino (digital1)Titular del correo de la cuenta
Miguel Bautista

MFA activo, registrado en dos tablets, una por persona.

Tras una salida, el acceso queda en una sola persona

A diferencia de la cuenta 1 —donde hay tres personas con acceso y tres factores MFA— aquí solo hay dos. Alexander Garzón no tiene acceso a esta cuenta.

Si una de las dos personas sale de la compañía, el acceso a la cuenta que aloja G-Cron, W-Flow y el dominio dnexus.cloud depende de una sola persona y un solo dispositivo MFA.

Antes de cualquier salida: dar acceso a una tercera persona y registrar un tercer factor MFA, mientras los dos actuales siguen activos.

Pendiente de esta cuenta

Pendiente
  • ¿Tiene backups automáticos la instancia labscorp-apps? ¿Con qué retención?
  • ¿Cuáles son las 3 recomendaciones informativas que reporta AWS sobre RDS?
  • ¿Hay S3, CloudFront o balanceadores en esta cuenta?

Servicios fuera de AWS

Infraestructura que no vive en ninguna de las dos cuentas pero de la que dependen las aplicaciones.

ServicioPara quéEndpoint / referencia
InfluxDB CloudSeries de tiempo de m-system; un bucket por clientehttps://us-east-1-1.aws.cloud2.influxdata.com
Pendiente
Pendiente

Completar el resto de proveedores: hosting, DNS, correo, certificados, dnexus.cloud (donde están publicados los productos en línea).


Mapa general

Las dos cuentas no son independientes: W-Flow corre en la cuenta 2 pero usa la instancia RDS m-system de la cuenta 1. Es la única dependencia cruzada documentada, y atraviesa además dos regiones.

La otra dependencia externa es InfluxDB Cloud, usada por m-system.


Costos y facturación

Pendiente
  • ¿Quién recibe y paga las facturas de cada cuenta?
  • ¿Con qué método de pago está registrada cada una?
  • ¿Hay alertas de facturación configuradas y a quién le llegan?

Una cuenta suspendida por impago produce una caída total que ningún runbook técnico resuelve.

Riesgos abiertos

Lo ya registrado en Deuda técnica y riesgos que afecta a esta infraestructura:

  • INTERNAL_API_KEY con valor por defecto en producción.
  • Secretos compartidos entre todos los clientes, sin gestor de secretos ni rotación posible.