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.
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.
| # | Cuenta | Account ID | Región | Para qué se usa |
|---|---|---|---|---|
| 1 | admin@industriascts.com | 711387120162 | us-east-1 | ERP Odoo, QRCloud, util-inventary y todo el ecosistema de m-system |
| 2 | digital1@industriascts.com.co | 079960139970 | us-east-2 | G-Cron, W-Flow y las apps internas de DDS |
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.
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.
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ón | EC2 | ECS | RDS | Otros 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 instancia | ECR · Route 53 · IoT Core · SQS · Lambda |
| W-Flow ⚠️ (corre en la cuenta 2) | — | — | ✅ comparte la instancia m-system | — |
EC2 — tres VPS
| Nombre | Para qué | Instance ID | Tipo | Zona |
|---|---|---|---|---|
odoo-17-prod-server | Odoo v17 — ERP de la empresa | i-0bbe4ae32dcde0983 | m7i.xlarge | us-east-1b |
QRCloud | QRCloud | i-0ce91cb0ddbd12521 | t3.medium | us-east-1c |
util-inventary | Inventario de componentes eléctricos | i-056d3ed020b0ae985 | t2.micro | us-east-1c |
Las tres están en ejecución, con sistema operativo Linux/UNIX.
Acceso y red
| Instancia | DNS público | IP pública | Par de claves | Grupo de seguridad |
|---|---|---|---|---|
odoo-17-prod-server | ec2-54-166-104-159.compute-1.amazonaws.com | 54.166.104.159 | odoo-prod-server-keys | launch-wizard-7 |
QRCloud | ec2-54-243-99-52.compute-1.amazonaws.com | 54.243.99.52 | qr-prod-keys | launch-wizard-8 |
util-inventary | ec2-34-198-163-51.compute-1.amazonaws.com | 34.198.163.51 | Pendiente | Pendiente |
.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.
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.
odoo-17-prod-server se lanzó el 2026/07/03 y QRCloud el 2025/01/09.
util-inventary no la desarrolló DDSLa 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.
| Servicio | Rol | Definición de tarea | Tareas |
|---|---|---|---|
frontend-service | Frontend de m-system | frontend-task:72 | 1/1 |
m-receptor-service | Backend | m-receptor-task:102 | 1/1 |
run-app-service | Backend | run-app-task:106 | 1/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.
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í.
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.
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.
| Servicio | Para qué | Convención de nombres |
|---|---|---|
| IoT Core | Reglas de enrutamiento de los mensajes. Solo clientes de m-system | UUID del cliente con guiones bajos |
| SQS | Una cola por cliente, enlazada desde la regla de IoT Core | UUID del cliente con guiones |
| Lambda | Una por cliente, procesa los mensajes de la cola | UUID del cliente con guiones |
| Lambda de notificaciones | Servicio de notificaciones de m-system | Pendiente — nombre |
| IAM | Rol IoTRuleRole-INDUSTRIAS_CTS_1, compartido por todas las reglas de IoT | — |
| CloudWatch | Logs de las Lambdas | — |
Cómo se aprovisiona un cliente nuevo: Habilitar cuenta de m-system.
RDS — tres instancias
| Instancia | Base de datos de | Motor | Tamaño | Zona | Multi-AZ |
|---|---|---|---|---|---|
db-odoo-17-prod | Odoo v17 | PostgreSQL | db.t4g.medium | us-east-1b | ❌ No |
db-qr-cloud-prod | QRCloud | MySQL Community | db.t3.micro | us-east-1b | ❌ No |
m-system | m-system y W-Flow ⚠️ | PostgreSQL | db.t3.small | us-east-1f | Pendiente |
Las tres están disponibles. db-odoo-17-prod y db-qr-cloud-prod comparten
la VPC vpc-04f469dc64f4ba14f.
m-system no es solo de m-systemTambié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.
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.
¿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.
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
| Persona | Rol | Nota |
|---|---|---|
| Alexander Garzón | Jefe de TIC | Fue el primero en administrar esta cuenta. Es la memoria más antigua de cómo se montó |
| Juan Carlos Sanguino | Jefe del Área TAD | — |
La cuenta tiene MFA activo, con tres factores registrados:
| Dispositivo | De |
|---|---|
| iPad | Miguel Bautista |
| iPad | Juan Carlos Sanguino |
| Propio | Alexander Garzón |
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.
- ¿
admin@industriascts.comes 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
- 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ón | EC2 | ECS | RDS | ElastiCache |
|---|---|---|---|---|
| G-Cron | — | ✅ 2 servicios | ✅ labscorp-apps | — |
W-Flow (cts-manager) | — | ✅ 2 servicios | ⚠️ m-system, en la cuenta 1 | ✅ wflow-redis |
| Apps de testing y documentación | ✅ 1 VPS | — | — | — |
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-systemtambié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
| Nombre | Instance ID | Tipo | Zona | Lanzada |
|---|---|---|---|---|
cluster-utils-apps | i-097149584b9c301a6 | t3.small | us-east-2c | 2026/07/28 |
En ejecución, Linux/UNIX, 3/3 comprobaciones aprobadas.
| DNS público | IP pública | Par de claves | Grupo de seguridad |
|---|---|---|---|
ec2-3-147-147-101.us-east-2.compute.amazonaws.com | 3.147.147.101 | cluster-utils-apps | cluster-utils-apps |
Para qué sirve: es de DDS. Aquí se publican, bajo el dominio
dnexus.cloud, las aplicaciones en testing, documentación y similares.
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.
| Servicio | Definición de tarea | Tareas | Creado | Último despliegue |
|---|---|---|---|---|
g-cron-backend | g-cron-backend:19 | 1/1 | hace 68 días | hace 20 días |
g-cron-frontend | g-cron-frontend:18 | 1/1 | hace 68 días | hace 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.
| Servicio | Definición de tarea | Tareas | Creado | Último despliegue |
|---|---|---|---|---|
cts-manager-backend | cts-manager-backend:93 | 1/1 | hace 119 días | hace 7 horas |
cts-manager-frontend | cts-manager-frontend:89 | 1/1 | hace 119 días | hace 7 horas |
ARN de cada servicio:
arn:aws:ecs:us-east-2:079960139970:service/<cluster>/<servicio>
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
| Instancia | Motor | Tamaño | Zona | VPC | Multi-AZ |
|---|---|---|---|---|---|
labscorp-apps | PostgreSQL | db.t3.micro | us-east-2b | vpc-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.
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
| Nombre | Motor | Configuración | Creada |
|---|---|---|---|
wflow-redis | Redis 8.1 | Sin servidor (serverless) | 20 may 2026 |
Caché de W-Flow.
Route 53 — tres dominios
| Dominio | Registros | Hosted Zone ID |
|---|---|---|
dnexus.cloud | 4 | Z07156131E2L8RG22WGUE |
labscorp.co | 6 | Z06559801VBL2MW3AG0PP |
tera-electric.com | 2 | Z10271321W2UXFZU2US6Q |
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.
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:
| Persona | Nota |
|---|---|
Juan Carlos Sanguino (digital1) | Titular del correo de la cuenta |
| Miguel Bautista | — |
MFA activo, registrado en dos tablets, una por 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
- ¿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.
| Servicio | Para qué | Endpoint / referencia |
|---|---|---|
| InfluxDB Cloud | Series de tiempo de m-system; un bucket por cliente | https://us-east-1-1.aws.cloud2.influxdata.com |
| 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
- ¿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_KEYcon valor por defecto en producción.- Secretos compartidos entre todos los clientes, sin gestor de secretos ni rotación posible.