Atlasingeniería

Fundamentos de cloudJuniorTema 4Junior

Máquinas virtuales, contenedores y funciones

Las tres formas de correr código en la nube no son tres niveles de modernidad: son tres respuestas distintas a qué arranca, cuánto tarda en arrancar y qué pasa cuando no hay tráfico. Elegir mal se paga en plata o en latencia.

Para este tema conviene tener claro:Imágenes, contenedores y registros

Datos de proveedores verificados contra la documentación oficial el 16 de sept de 2026.

La misma API —recibe una foto, guarda metadatos, genera una miniatura— puede correr en una máquina virtual, en un contenedor o en una función, y andar bien en las tres. No hay una respuesta correcta universal, pero sí hay tres preguntas que la determinan: qué tenés que empaquetar, cuánto tarda en estar lista una unidad nueva y qué pagás cuando nadie la usa.

Todo lo demás —modernidad, moda, lo que hizo la empresa del blog que leíste— es ruido.

Tres unidades de entrega

Lo que cambia entre las tres opciones es la unidad que el proveedor sabe arrancar por vos.

Máquina virtualContenedorFunción
Qué entregásUna imagen de disco o una VM que instalásUna imagen con tu app y sus dependenciasUn archivo de código y un manifiesto
Qué lleva adentroSistema operativo completoTu app, bibliotecas y un sistema de archivos mínimoSólo tu función: el runtime lo pone el proveedor
Cuánto tarda en estar listaDe decenas de segundos a minutosDe unos segundos a decenas de segundosDe milisegundos a unos segundos
Unidad de cobro típicaTiempo encendida, esté o no trabajandoRecursos reservados mientras correInvocaciones y tiempo de ejecución
Qué pagás sin tráficoTodoTodo, salvo que escale a ceroPrácticamente nada
Cuánto control tenésKernel, drivers, discos, redProceso, dependencias, límites de recursosEl código y poco más
La fila resaltada es el punto medio que hoy sirve para la mayoría de las aplicaciones web; las otras dos ganan en los extremos.

Antes de seguir, predecí

Tenés un trabajo que corre 40 segundos, una vez por hora. ¿Qué opción tiende a costar menos?

Cuándo la máquina virtual sigue siendo la respuesta

La VM tiene mala prensa y sigue siendo la opción correcta más seguido de lo que se admite. Gana cuando necesitás algo que las capas de arriba no te dejan tocar:

  • Software que no se containeriza fácil: licencias atadas al hardware, agentes que necesitan acceso privilegiado, aplicaciones que asumen un sistema completo con sus servicios.
  • Control del sistema operativo: un kernel particular, módulos, parámetros de red, drivers de GPU con una versión exacta.
  • Estado local pesado: una base de datos que administrás vos, un caché en disco, algo que quiere un volumen rápido y previsible.
  • Carga constante y previsible: si un servicio trabaja parejo las 24 horas, la capacidad reservada suele ser lo más barato por unidad de trabajo.

Contenedores: el punto medio que se volvió norma

Un contenedor resuelve el problema que más duele en el día a día: que lo que probaste sea lo que corre. La imagen lleva la aplicación y sus dependencias, y se ejecuta igual en tu máquina, en integración continua y en producción.

Eso abre dos caminos bastante distintos, y confundirlos es el error de arquitectura más caro de esta unidad:

CaminoQué administrásCuándo conviene
Contenedores gestionadosLa imagen, la configuración y cuántas réplicas querésLa mayoría de las aplicaciones web y APIs: arranca en minutos y escala solo
Kubernetes gestionadoAdemás, manifiestos, redes internas, políticas, operadores y actualizaciones del clústerMuchos equipos y servicios, necesidades finas de despliegue o portabilidad entre nubes
Kubernetes es una plataforma para construir plataformas. Resuelve problemas de escala organizativa; si no los tenés, agrega los suyos.
Más a fondo · nivel seniorEl tamaño de la imagen no es cosmética

Una imagen de 900 MB contra una de 80 MB cambia el tiempo de arranque de una réplica nueva, y el tiempo de arranque es lo que define si el autoescalado llega a tiempo a un pico. También cambia la superficie de ataque —cada paquete instalado es algo que hay que parchear— y el costo de transferencia y almacenamiento en el registro.

Las dos técnicas que más rinden: compilaciones en varias etapas, donde las herramientas de build quedan fuera de la imagen final, y una imagen base mínima. Y un detalle de caché que se paga solo: copiar primero el manifiesto de dependencias, instalarlas, y recién después copiar el código. Así un cambio de una línea no invalida la capa de dependencias.

Funciones: pagar por trabajo, no por tiempo

Una función se despliega sin elegir máquina: el proveedor arranca instancias cuando llegan pedidos y las apaga cuando dejan de llegar. El cobro se acerca al trabajo real —cantidad de invocaciones y tiempo de ejecución— y sin tráfico tiende a cero.

El precio de esa comodidad tiene tres partes concretas:

Lo que hay que aceptar para usar funciones

  1. Arranque en frío. La primera invocación después de un rato de inactividad paga la inicialización del entorno. Va de milisegundos a algunos segundos según runtime y tamaño del paquete, y se nota en APIs con tráfico esporádico y usuarios esperando.
  2. Límites duros. Hay un tope de duración por invocación, de memoria y de tamaño del paquete. Un trabajo que tarda una hora no entra: hay que partirlo o mover ese caso a un contenedor.
  3. Sin estado ni disco propio. Entre invocaciones no se garantiza nada. Todo lo que tiene que sobrevivir va a una base, una cola o un almacenamiento de objetos.

El árbol de decisión que funciona

Cuatro preguntas, en este orden, resuelven la elección en la mayoría de los casos reales:

Para elegir dónde corre un servicio

  1. ¿Necesitás algo del sistema operativo que no te dejan tocar? Si sí, máquina virtual. Fin del análisis.
  2. ¿El trabajo es por eventos, corto y de volumen irregular? Si sí, empezá por funciones y verificá los límites de duración, memoria y concurrencia contra tu caso.
  3. ¿Es un servicio de larga vida que atiende pedidos? Contenedores gestionados: es el punto medio con menos sorpresas.
  4. ¿Tenés varios equipos, muchos servicios y necesidades finas de despliegue? Recién ahí Kubernetes empieza a devolver lo que cuesta.

NecesidadAWSGoogle CloudAzure
Máquinas virtualesAmazon EC2Compute EngineAzure Virtual Machines
Capacidad interrumpible y barataEC2 SpotSpot VMsAzure Spot Virtual Machines
Contenedores administradosAmazon ECS con FargateCloud RunAzure Container Apps
Kubernetes gestionadoAmazon EKSGoogle Kubernetes EngineAzure Kubernetes Service
Registro de imágenesAmazon ECRArtifact RegistryAzure Container Registry
Funciones por eventoAWS LambdaCloud Run functionsAzure Functions
Trabajos por lotesAWS BatchCloud Run jobs y BatchAzure Container Apps jobs
Las mismas tres familias en los tres catálogos. Los nombres cambian; las preguntas de arriba, no.

Cierre

Autoevaluación

¿Lo entendiste?

¿Cuál es la diferencia técnica central entre un contenedor y una máquina virtual?
Un trabajo tarda 45 minutos por ejecución. ¿Qué opción conviene descartar primero?
¿Qué es un arranque en frío?
¿Por qué mil invocaciones concurrentes de una función pueden tumbar una base de datos relacional?
Un equipo de cinco personas con dos servicios quiere pasar a Kubernetes. ¿Cuál es la objeción más sólida?