Nuria Peña, responsable financiera de Contoso Airlines, lleva meses haciendo la misma pregunta en el comité y recibiendo la misma respuesta imprecisa. Cuando se aprobó la migración, alguien puso en una diapositiva «unos 8.500 € al mes». La factura media del primer trimestre real fue de 17.500 € al mes: exactamente el doble. Nadie mintió. Simplemente, la estimación se hizo sumando máquinas virtuales y bases de datos, que es lo que todo el mundo estima, y se olvidó todo lo demás: el firewall, el bastión, la puerta de enlace global, la ingesta de registros, la salida de datos y un clúster de Kubernetes cuyos nodos alguien creía que eran «parte de AKS».
Esta lección enseña a estimar antes de desplegar. Verás cómo se factura Azure de verdad —qué unidad de medida usa cada familia de servicios—, los tres tipos de coste que casi nadie estima, el manejo completo de la calculadora de precios, la estimación reconstruida de toda la plataforma de Contoso línea por línea, la calculadora de coste total de propiedad para comparar contra el centro de datos de Barcelona, por qué la misma máquina cuesta distinto en dos regiones, cómo automatizar estimaciones con la API de precios minoristas y, sobre todo, cómo se documenta el margen de error, porque una estimación sin supuestos escritos no es una estimación: es una cifra.
Aviso sobre los precios de esta lección y de todo el módulo: todas las cifras en euros que aparecen aquí son orientativas y ficticias, elegidas para que los órdenes de magnitud y las proporciones sean didácticos. Los precios reales de Azure cambian con frecuencia, varían por región, por moneda, por tipo de oferta y por descuentos contratados. Ninguna cifra de este módulo debe usarse para decidir nada: consulta siempre la calculadora oficial de precios de Azure y tu propio acuerdo comercial.
Contenido
- Por qué estimar antes de desplegar
- Cómo se factura Azure de verdad: unidades de medida
- Los tres costes que casi nadie estima
- La calculadora de precios de Azure, paso a paso
- La estimación completa de Contoso Airlines
- La calculadora de coste total de propiedad
- Precios por región: la misma VM a dos precios
- La API de precios minoristas
- El margen de error y los supuestos escritos
- La estimación como parte del diseño
- Errores Comunes y Consejos
- Ejercicios
- Conclusión
- Por qué estimar antes de desplegar
En un centro de datos propio, gastar dinero exige una orden de compra, una firma y varias semanas. En Azure exige tres clics. Esa es toda la diferencia, y es enorme: el control del gasto se ha desplazado del departamento de compras al teclado del ingeniero, y nadie le avisó al ingeniero.
La consecuencia es un patrón que se repite en todas las organizaciones que migran:
| Momento | Qué pasa | Coste de corregirlo |
|---|---|---|
| Diseño | Se elige la arquitectura y sus niveles de servicio | Casi nulo: es cambiar una decisión en un documento |
| Despliegue | Se crean los recursos con Bicep | Bajo: cambiar un parámetro y volver a desplegar |
| Primer mes | Llega la factura y sorprende | Medio: hay que cambiar recursos en producción |
| Sexto mes | El gasto está normalizado y hay datos encima | Alto: migraciones, ventanas, riesgo |
La estimación es la única palanca que actúa en la primera fila. Dicho de otro modo: la factura más difícil de corregir es la que ya has provocado. Un nivel de redundancia elegido a la ligera el primer día se convierte en una migración de datos el año siguiente.
Y hay un segundo motivo, menos obvio y más importante: estimar obliga a entender la arquitectura. Cuando Marta Ríos rehízo la estimación de Contoso con la calculadora, descubrió tres cosas que llevaban meses ahí sin que nadie las viera —una réplica geográfica de base de datos que costaba casi lo mismo que la principal, un grupo de nodos de AKS dimensionado para una prueba de carga que terminó en marzo, y una puerta de enlace de VPN sin ninguna conexión activa—. Estimar es auditar el diseño con una calculadora en la mano.
- Cómo se factura Azure de verdad: unidades de medida
El error de fondo de la estimación fallida de Contoso fue mental: se pensó en Azure como en un catálogo de máquinas con precio mensual. Azure factura unidades de consumo, y cada familia de servicios usa la suya. Hasta que no interiorizas la tabla siguiente, no puedes estimar nada.
| Familia | Unidad de medida principal | Otras unidades que también facturan | Ejemplo en Contoso |
|---|---|---|---|
| Cómputo (VM, VMSS) | Hora de instancia encendida (deallocated no factura) |
Discos gestionados (GB-mes, IOPS), IP pública, licencia de SO | vmss-api-disponibilidad-pro |
| App Service | Hora del plan, no de la aplicación | Certificados, dominios, ranuras adicionales según nivel | plan-contoso-reservas-pro |
| Contenedores (AKS) | Hora de cada nodo (VM) + discos | Plano de control estándar, equilibrador, salida | aks-contoso-operaciones |
| Container Apps / Functions consumo | vCPU-segundo y GiB-segundo + ejecuciones | Réplicas mínimas siempre activas | ca-motor-disponibilidad |
| Almacenamiento | GB-mes por nivel de acceso | Transacciones, recuperación de datos, cambio de nivel | sttarjetascontosopro |
| SQL Database (vCore) | vCore-hora aprovisionado o vCore-segundo sin servidor | Almacenamiento GB-mes, copias LTR, réplica secundaria | db-reservas |
| Cosmos DB | Unidades de solicitud por segundo (RU/s) hora | Almacenamiento GB-mes, copias, cada región adicional | cosmos-contoso-tarifas-pro |
| Synapse sin servidor | TB de datos leídos por consulta | Almacenamiento del lago, canalizaciones por actividad | syn-contoso-analitica-pro |
| Log Analytics | GB ingerido | GB-mes retenido, plan de tabla, consultas sobre archivo | log-contoso-pro |
| Red | GB de salida (egress) | Hora de firewall + GB procesados, hora de bastión, hora de puerta de enlace | fw-contoso-hub-pro |
| Mensajería | Operaciones o unidades de mensajería/rendimiento hora | Entidades adicionales, retención extendida | sb-contoso-pro |
| Logic Apps | Ejecución de acción | Conectores empresariales con tarifa propia | logic-contoso-retrasos-pro |
| IA / Azure OpenAI | Token de entrada y de salida | Unidades de rendimiento aprovisionadas, si se contratan | oai-contoso-pro |
| Copias de seguridad | Instancia protegida + GB almacenado | Redundancia geográfica, restauración entre regiones | rsv-contoso-pro |
Tres lecturas de esta tabla que cambian la forma de estimar:
- La unidad no siempre es el recurso que ves. No pagas
app-contoso-reservas-pro; pagasplan-contoso-reservas-pro, y da igual que alojes una aplicación o cinco. - Casi todo tiene una segunda unidad. El almacenamiento tiene GB y transacciones. El firewall tiene horas y gigabytes procesados. La base de datos tiene cómputo y almacenamiento y copias. Estimar solo la unidad principal produce sistemáticamente estimaciones bajas.
- Algunas unidades no son proporcionales al uso que percibes. Una consulta mal escrita en Synapse sin servidor lee 2 TB y cuesta más que un día entero de máquinas virtuales, aunque el usuario solo haya pulsado «actualizar».
- Los tres costes que casi nadie estima
De la estimación fallida de Contoso, casi la mitad de la desviación vino de tres partidas que ni siquiera aparecían en la hoja de cálculo original.
Salida de datos (egress). El tráfico hacia Azure es gratuito; el tráfico desde Azure hacia internet, no. Y tampoco es gratuito el tráfico entre regiones, ni en muchos casos entre zonas de disponibilidad. Como se anticipó en el módulo 2, esta es la sorpresa habitual de la factura, porque no aparece en ningún recurso: no hay un objeto llamado «salida de datos» en el portal al que mirar. En Contoso la produce todo esto a la vez: cada tarjeta de embarque descargada por un pasajero, cada respuesta de la API de disponibilidad a los agregadores externos, la replicación de db-reservas a North Europe, la replicación geográfica de acrcontosopro y las exportaciones nocturnas hacia el sistema de facturación local. Se estima con una regla sencilla: cuántos objetos salen al mes × tamaño medio, y se documenta el supuesto.
Transacciones y operaciones. Los GB de una cuenta de almacenamiento se estiman bien; las transacciones, casi nunca. Y en cargas con muchos objetos pequeños —que es exactamente el caso de las tarjetas de embarque— las transacciones pueden superar al almacenamiento. Peor aún: los niveles fríos abaratan el GB-mes y encarecen la transacción, así que un ciclo de vida mal ajustado que mueva a Cool datos que aún se leen mucho puede subir la factura. Lo mismo aplica a las operaciones de Key Vault, a las peticiones de Cosmos DB y a las operaciones de Defender for Cloud sobre Storage.
Las funciones «gratis» que arrastran un recurso de pago. Este es el más traicionero, porque el servicio anuncia coste cero y lo cumple:
| Servicio «gratuito» | Lo que sí se paga |
|---|---|
| Azure Policy | Nada por la directiva, pero un efecto DeployIfNotExists crea recursos de pago |
| Configuraciones de diagnóstico | La configuración es gratis; la ingesta en log-contoso-pro no |
| Microsoft Entra ID (nivel base) | Acceso condicional e Identity Protection exigen niveles de pago |
| Defender for Cloud (CSPM básico) | Los planes por carga de trabajo, sí (módulo 4) |
| Azure Advisor | Gratuito de verdad, sin letra pequeña (08-04) |
| Alertas de Azure Monitor | Las de estado del recurso son gratis; las de métrica y de registro se facturan por regla y por serie |
| Grupos de recursos, etiquetas, ARM | Realmente gratis |
| Cuenta de Automation | La cuenta no cuesta; los minutos de ejecución por encima de la franja, sí |
La regla que hay que grabarse: cuando actives algo gratuito, pregunta siempre qué consumo genera aguas abajo. Las configuraciones de diagnóstico del módulo 7 son gratis y produjeron la tercera partida más cara de la plataforma.
- La calculadora de precios de Azure, paso a paso
La calculadora de precios de Azure (azure.microsoft.com/pricing/calculator) es una herramienta pública, sin necesidad de cuenta, que permite montar una estimación completa. Es engañosamente simple, y usarla bien tiene método.
flowchart LR A["Buscar y añadir<br/>los servicios"] --> B["Configurar cada uno:<br/>región, nivel, cantidad,<br/>horas y unidades"] B --> C["Agrupar por<br/>componente o entorno"] C --> D["Aplicar moneda,<br/>oferta y descuentos"] D --> E["Guardar, compartir<br/>y exportar a Excel"] E --> F["Revisar con el equipo<br/>y con Nuria"] F -->|"faltan supuestos"| B
El procedimiento que sigue Marta:
- Buscar el servicio y añadirlo. La calculadora tiene un catálogo por categorías y un buscador. Añade cada servicio de la arquitectura, incluidos los que «no cuestan» —para dejar constancia de que se han considerado—.
- Configurar región, nivel y cantidad. Aquí está el 90 % del trabajo. Para una VM: región, sistema operativo, tipo de instancia, número de instancias, horas al mes (730 si es 24x7, unas 176 si solo es horario laborable), tipo de disco y número de discos, y la opción de ahorro (pago por uso, reserva de 1 o 3 años, plan de ahorro, spot). Este selector es lo que conecta esta lección con la 08-03.
- Agrupar por componente. La calculadora permite crear grupos y renombrarlos. Contoso usa un grupo por bloque de la arquitectura:
Frontal web,API de disponibilidad,Datos,Red y seguridad,Observabilidad,Integración e IA,Desarrollo. Sin grupos, una estimación de cuarenta líneas es ilegible y nadie la revisa. - Fijar moneda, región de facturación y programa de licencias. La calculadora aplica el tipo de oferta (pago por uso, Enterprise, CSP) y permite indicar un porcentaje de descuento negociado.
- Guardar y compartir. Con una cuenta Microsoft, la estimación se guarda y se obtiene un enlace. Es lo que se adjunta a la revisión de arquitectura.
- Exportar a hoja de cálculo. El botón de exportación genera un
.xlsxcon una fila por línea, que es el formato con el que Nuria puede trabajar y comparar meses.
Dos advertencias de uso. La primera: la calculadora no conoce tu carga; solo multiplica lo que le digas. Si pones 730 horas para una máquina que en realidad estará encendida 200, la culpa no es de la herramienta. La segunda: hay servicios cuyo coste no se puede estimar sin datos previos —salida de datos, transacciones, tokens, GB ingeridos—; para esos, la calculadora te obliga a introducir una cantidad, y esa cantidad es un supuesto que hay que documentar (apartado 9).
- La estimación completa de Contoso Airlines
Marta rehizo la estimación de la plataforma tal y como está hoy. El resultado, en euros mensuales orientativos y ficticios:
| Grupo | Línea | Configuración supuesta | € / mes |
|---|---|---|---|
| Frontal web | plan-contoso-reservas-pro + plan-contoso-api-pro |
Premium v3, 3 y 2 instancias, redundancia de zona, 730 h | 1.930 |
| API disponibilidad | vmss-api-disponibilidad-pro |
Media de 6 instancias de las 2-20 del autoescalado | 1.320 |
| API disponibilidad | cae-contoso-pro + ca-motor-disponibilidad |
Entorno + 1 réplica mínima siempre activa | 240 |
| Contenedores | aks-contoso-operaciones |
Nodos sistema (3) + aplicaciones (4) + lotes en spot |
1.980 |
| Contenedores | acrcontosopro |
Premium con replicación geográfica | 90 |
| Desarrollo | Planes y VM de desarrollo | App Service dev + vm-motor-disponibilidad-dev apagada de noche |
285 |
| Almacenamiento | sttarjetascontosopro |
GZRS, 4 TB, ciclo de vida a Cool a los 30 días, transacciones | 420 |
| Almacenamiento | stlagocontosopro |
Data Lake, 12 TB, nivel mixto | 280 |
| Almacenamiento | stoperacionescontosopro + sttarjetascontosodev |
ZRS 1 TB + LRS 300 GB | 75 |
| Datos | db-reservas (primaria) |
vCore De uso general, 8 vCore, redundancia de zona, 500 GB | 1.480 |
| Datos | Réplica fg-contoso-reservas en North Europe |
Secundaria legible del grupo de conmutación | 1.180 |
| Datos | sql-contoso-reservas-dev + cosmos-contoso-tarifas-pro |
Sin servidor con pausa + autoescalado, media 1.400 RU/s | 255 |
| Datos | mysql-contoso-portal-pro + psql-contoso-tripulaciones-pro |
Flexible, 2 vCores cada uno | 345 |
| Datos | syn-contoso-analitica-pro |
SQL sin servidor por TB leídos + sqlpool-contoso puntual |
400 |
| Red y seguridad | fw-contoso-hub-pro |
Azure Firewall: horas + GB procesados | 1.010 |
| Red y seguridad | fd-contoso-global + wafcontosoglobal |
Front Door Premium + reglas de WAF | 385 |
| Red y seguridad | bastion-contoso-pro |
Nivel estándar, 730 h | 205 |
| Red y seguridad | vgw-contoso-pro + puntos de conexión privados |
VPN + 14 puntos privados | 235 |
| Red y seguridad | Salida de datos | ~4,5 TB/mes a internet + replicación entre regiones | 700 |
| Observabilidad | log-contoso-pro + ai-insights-contoso-pro |
~42 GB/día ingeridos + retención por tabla | 1.500 |
| Observabilidad | Defender for Cloud | Planes de SQL, Storage y Key Vault | 310 |
| Observabilidad | rsv-contoso-pro + bv-contoso-pro |
Instancias protegidas + GB, 30 días, GRS | 465 |
| Integración | sb-contoso-pro + evhns-contoso-telemetria-pro + evgt-contoso-reservas-pro |
Service Bus Premium 1 unidad, Event Hubs 2 TU | 780 |
| Integración | func-contoso-tarjetas-pro + logic-contoso-retrasos-pro |
Plan Premium EP1 + acciones de Logic Apps | 335 |
| IA | oai-contoso-pro + ai-contoso-pro |
Coste por token + servicios de IA | 730 |
| Transversal | kv-contoso-pro, aa-contoso-operaciones, Azure DevOps y otros menores |
Operaciones, minutos, licencias, contoso-paquetes, IP, DNS |
515 |
| Total estimado | 17.450 €/mes |
De dónde sale cada bloque merece comentario, porque el aprendizaje está ahí:
- Las cinco líneas que sorprenden son, por este orden:
log-contoso-pro(1.500 €, más que la mitad de la plataforma web),fw-contoso-hub-pro(1.010 €, que factura por hora y por gigabyte procesado tanto si pasa tráfico como si no), el clústeraks-contoso-operaciones(1.980 €, porque los nodos son máquinas virtuales que se pagan íntegras),bastion-contoso-pro(205 € por un servicio que se usa quince minutos al día) yfd-contoso-global(385 € por el nivel Premium que exige el WAF). - La réplica de
db-reservascuesta 1.180 €, un 80 % de la principal. Es el precio explícito de la decisión de recuperación del módulo 7, y ahora se ve en euros: exactamente la clase de dato que permite una conversación honesta con el negocio. - La salida de datos (700 €) no corresponde a ningún recurso. Nadie la habría estimado sin la tabla del apartado 2.
- Todo el entorno de desarrollo son 285 € gracias al runbook
Detener-IniciarEntornosDevy al nivel sin servidor con pausa automática. Sin esas dos decisiones rondaría los 1.100 €.
Comparado con los 8.500 € de la diapositiva original, la diferencia se explica casi entera con cinco líneas: AKS, Log Analytics, firewall, la réplica de base de datos y la salida de datos. Ninguna de ellas es un recurso que el equipo hubiera «pedido»; todas son consecuencias de decisiones de arquitectura correctas que nadie tradujo a dinero.
- La calculadora de coste total de propiedad
Nuria hizo la pregunta inevitable: «¿no era más barato el centro de datos de Barcelona?». Para responderla existe la calculadora de coste total de propiedad (TCO), una herramienta distinta de la de precios: se describe la infraestructura local —servidores, núcleos, memoria, almacenamiento, ancho de banda, licencias— y devuelve una comparación a varios años frente al equivalente en Azure.
El valor de la herramienta no está en el número que produce, sino en que obliga a incluir los costes que la contabilidad local nunca imputa al proyecto:
| Coste local | ¿Se suele incluir? | Comentario |
|---|---|---|
| Hardware (servidores, cabina, red) | Sí | Lo único que casi todos cuentan |
| Licencias de virtualización y de SO | A veces | Y su mantenimiento anual |
| Electricidad y refrigeración | Rara vez | Suele ser un 10-20 % del coste del hardware al año |
| Espacio, suelo técnico y SAI | Casi nunca | Aunque el edificio sea propio, tiene coste de oportunidad |
| Personal de operación | Casi nunca | Guardias, parcheado, sustitución de discos |
| Renovación cada 4-5 años y sobrecapacidad | Mal | Se compra para el pico y se paga todo el año, cada ciclo |
| Coste de la indisponibilidad | Nunca | Sin redundancia geográfica, el riesgo es un coste diferido |
Con la calculadora de TCO y esos ajustes, la comparación de Contoso quedó así (cifras orientativas y ficticias, anuales):
| Escenario | Coste anual | Comentario |
|---|---|---|
| Centro de datos de Barcelona, coste visible | 190.000 € | Lo que aparecía en el presupuesto de TI |
| Centro de datos de Barcelona, coste real ajustado | 340.000 € | Con energía, personal, espacio, renovación y sobrecapacidad |
| Azure, plataforma actual sin optimizar | 209.400 € | 17.450 € × 12 |
| Azure, tras la optimización del módulo 8 | ~150.600 € | Anticipo de 08-05 |
La conclusión que Contoso escribió, y que conviene copiar literalmente en cualquier informe: la comparación no es «Azure es más barato», sino «Azure es más barato que un centro de datos honestamente contabilizado, y además convierte inversión en gasto operativo, elimina la sobrecapacidad y aporta capacidades —redundancia geográfica, escalado en minutos, servicios administrados— que el centro de datos no tenía a ningún precio». Comparar solo hardware contra facturas de Azure es la forma más habitual de mentirse.
- Precios por región: la misma VM a dos precios
El mismo tamaño de instancia cuesta distinto en West Europe, en North Europe, en Suecia Central o en Estados Unidos. Las causas son reales: coste de la energía y del terreno, impuestos, madurez del centro de datos, tipo de cambio y demanda local.
Índice orientativo y ficticio tomando West Europe como 100 para una misma VM:
| Región | Índice de precio | Comentario |
|---|---|---|
| West Europe | 100 | Región principal de Contoso |
| North Europe | 96 | Región secundaria del par |
| Sweden Central | 89 | Más barata, energía abundante |
| East US | 87 | Habitualmente de las más económicas |
| Brazil South | 128 | Fiscalidad e infraestructura |
La tentación es obvia: mover cargas a la región más barata. Antes de hacerlo, cuatro frenos que Contoso aplicó:
- Latencia. La web de reservas sirve a pasajeros europeos. Un 13 % de ahorro en cómputo no compensa 120 ms adicionales en cada compra.
- Residencia del dato. Los datos personales de pasajeros y tripulaciones no salen de la UE. Es una restricción legal, no una preferencia, y la impone la directiva de regiones permitidas del módulo 4.
- Salida entre regiones. Repartir componentes que se hablan mucho entre dos regiones convierte tráfico interno gratuito en tráfico entre regiones facturado.
- Disponibilidad del servicio. No todos los servicios ni todos los tamaños existen en todas las regiones, y las zonas de disponibilidad tampoco.
La regla práctica: la región se elige por latencia, residencia del dato y disponibilidad de servicios, y solo se usa el precio como criterio de desempate, o para cargas que no tienen ninguna de esas ataduras —por ejemplo, un procesamiento por lotes nocturno sin datos personales—.
- La API de precios minoristas
Para automatizar estimaciones —o para comparar regiones sin abrir la calculadora cuarenta veces— Azure publica la API de precios minoristas (Retail Prices), pública, sin autenticación y sin coste. Devuelve los precios de tarifa oficial, sin tus descuentos negociados.
# Precio por hora de un tamaño de VM en West Europe, en euros
curl -s "https://prices.azure.com/api/retail/prices?currencyCode='EUR'&\$filter=\
serviceName eq 'Virtual Machines' and armRegionName eq 'westeurope' and \
armSkuName eq 'Standard_D4s_v5' and priceType eq 'Consumption'" \
| jq -r '.Items[] | select(.productName | contains("Windows") | not)
| "\(.armRegionName)\t\(.meterName)\t\(.retailPrice) \(.currencyCode)"'El parámetro $filter usa sintaxis OData y admite serviceName, armRegionName, armSkuName, meterName, priceType (Consumption, Reservation, DevTestConsumption) y reservationTerm. La cláusula select de jq descarta las variantes con licencia de Windows, que aparecen mezcladas con las de Linux y son el error de lectura más común.
Bucle equivalente sobre varias regiones —el uso que más rendimiento da— sustituyendo armRegionName eq '$REGION' dentro de un for REGION in westeurope northeurope swedencentral eastus, tomando [.Items[].retailPrice] | min y multiplicando por 730 horas para obtener el mes medio. La respuesta viene paginada mediante el campo NextPageLink, así que para consultas amplias hay que iterar. Un uso muy práctico: mantener en contoso-infra un script que, en cada solicitud de incorporación de cambios que modifique un .bicep, consulte los precios de las SKU declaradas y publique la estimación como comentario automático en la propia solicitud (apartado 10).
{
"currencyCode": "EUR",
"retailPrice": 0.2048,
"unitOfMeasure": "1 Hour",
"armRegionName": "westeurope",
"armSkuName": "Standard_D4s_v5",
"serviceName": "Virtual Machines",
"priceType": "Consumption",
"meterName": "D4s v5"
}Cada elemento devuelto tiene esta forma. Fíjate en unitOfMeasure: es la clave para no equivocarse de tres órdenes de magnitud. Hay medidores expresados en «1 Hour», otros en «1 GB/Month», otros en «10K» operaciones y otros en «1M» tokens. Multiplicar sin leer esa columna es el error clásico de quien automatiza estimaciones por primera vez.
- El margen de error y los supuestos escritos
Una estimación es un modelo, y todo modelo tiene error. La diferencia entre una estimación profesional y una cifra improvisada es que la primera declara su error y sus supuestos.
Los componentes de la estimación de Contoso se clasifican por previsibilidad:
| Tipo de coste | Ejemplos | Previsibilidad | Margen recomendado |
|---|---|---|---|
| Fijo | Planes de App Service, firewall, bastión, puerta de enlace | Muy alta | ±5 % |
| Semifijo | Nodos base de AKS, base de datos aprovisionada | Alta | ±10 % |
| Variable acotado | VMSS con autoescalado 2-20, Cosmos con autoescalado | Media | ±25 % |
| Variable abierto | Salida de datos, transacciones, GB ingeridos, tokens | Baja | ±50 % |
Y así se estima lo variable, que es donde todo el mundo se rinde:
- Autoescalado: no se estima el máximo ni el mínimo, sino el perfil horario esperado. Contoso documentó: 2 instancias de 00:00 a 07:00, 6 de 07:00 a 22:00, y un perfil
apertura-temporada-veranocon media de 14 durante tres semanas. La media ponderada mensual salió 6, y por eso la línea dice 6 y no 20. - Transacciones y salida: se estiman desde el negocio, no desde la infraestructura. «92.000 reservas al mes × 1,4 tarjetas por reserva × 180 KB» da los gigabytes de salida de tarjetas; el resto se acota con un factor.
- Tokens: consumo por interacción × interacciones esperadas, con un límite duro configurado en el servicio para que el error no sea ilimitado.
El colchón de Contoso: sobre los 17.450 € base, un 15 % de contingencia da 20.070 €/mes, y esa es la cifra que se llevó al comité. Es deliberadamente conservadora, y responde a una asimetría real: quedarse corto en una estimación cuesta credibilidad ante finanzas; pasarse un poco produce una buena noticia. La regla escrita fue: «se presupuesta la estimación con colchón; se persigue la estimación base».
Los supuestos van en el documento, no en la cabeza:
{
"estimacion": "contoso-plataforma-2026-08",
"moneda": "EUR",
"region_principal": "westeurope",
"vigencia_precios": "2026-08-01",
"total_base_mensual": 17450,
"colchon_pct": 15,
"total_presupuestado": 20070,
"supuestos": [
"Reservas mensuales: 92.000, con pico de 148.000 en agosto",
"vmss-api-disponibilidad-pro: media de 6 instancias (perfil horario documentado)",
"Salida a internet: 4,5 TB/mes, incluida replicacion entre regiones",
"log-contoso-pro: 42 GB/dia ingeridos, retencion por tabla vigente",
"oai-contoso-pro: 40 millones de tokens/mes, limite duro configurado",
"Sin reservas ni planes de ahorro contratados (ver 08-03)",
"Precios de tarifa oficial, sin descuento de acuerdo comercial"
],
"riesgos": ["Verano puede duplicar egress y VMSS", "sqlpool-contoso sin pausar"]
}Ese fichero vive junto a las plantillas en contoso-infra. Su valor aparece tres meses después, cuando la factura no cuadra: se compara el supuesto con la realidad y se sabe qué falló, no solo cuánto.
- La estimación como parte del diseño
Que el coste deje de ser una sorpresa exige integrarlo en dos momentos del proceso, no en una revisión anual.
En la revisión de arquitectura. Ninguna propuesta se aprueba en Contoso sin una estimación adjunta con sus supuestos y, cuando hay alternativas, sin una tabla comparativa. Ejemplo real del diseño de la API de disponibilidad:
| Alternativa | € / mes orientativos | Latencia | Operación | Decisión |
|---|---|---|---|---|
| VMSS con autoescalado | 1.320 | Baja y estable | Media: parches, imágenes | Elegida: carga sostenida y previsible |
| Container Apps | 890 | Baja, con arranque en frío ocasional | Baja | Descartada por el arranque en frío en la apertura de temporada |
| Functions en plan de consumo | 410 | Variable | Muy baja | Descartada: la API es sostenida, no esporádica |
Fíjate en que no ganó la opción más barata, y ese es el punto: la estimación no decide, informa. Lo que sí es inaceptable es decidir sin ella.
En la solicitud de incorporación de cambios de infraestructura. Toda modificación de un .bicep en contoso-infra (05-06) pasa por una comprobación automatizada que compara las SKU declaradas contra la rama principal y comenta el impacto:
# Simplificado: extraer SKU de las plantillas y pedir precio a la API minorista
grep -rhoP "(?<=sku:\s')[A-Za-z0-9_]+" ./infra/*.bicep | sort -u | while read -r SKU; do
P=$(curl -s "https://prices.azure.com/api/retail/prices?currencyCode='EUR'&\$filter=\
armSkuName eq '$SKU' and armRegionName eq 'westeurope' and priceType eq 'Consumption'" \
| jq -r '[.Items[].retailPrice] | min // empty')
[ -n "$P" ] && echo "| \`$SKU\` | $P €/h | $(echo "$P * 730" | bc) €/mes |"
doneLa salida se publica como comentario en la solicitud, con el formato de tabla markdown ya montado. El efecto cultural es mayor que el técnico: quien propone un cambio ve su precio antes de que nadie se lo pregunte, y la conversación sobre coste ocurre en el momento en que corregirlo es gratis.
Errores Comunes y Consejos
- Estimar solo el cómputo y las bases de datos. Es exactamente el error que duplicó la factura de Contoso. Recorre la tabla de unidades del apartado 2 servicio por servicio.
- Olvidar la salida de datos. No tiene recurso propio, no aparece en el portal como objeto y suele ser una de las diez primeras partidas.
- Confundir el recurso con la unidad facturada. Se paga el plan, no la aplicación; los nodos, no el clúster; el vCore-hora, no la base de datos.
- Poner 730 horas a todo, o estimar el máximo del autoescalado. Lo primero infla los entornos apagados de noche; lo segundo produce cifras que nadie se cree y desprestigian la estimación entera. Estima el perfil, y declara el máximo como riesgo.
- Leer mal
unitOfMeasureen la API. «1M tokens» y «1K operaciones» conviven en la misma respuesta. - Activar algo gratuito sin mirar aguas abajo. Las configuraciones de diagnóstico son gratis; la ingesta que provocan, no.
- Consejo: agrupa la estimación por componente de arquitectura, no por servicio de Azure. Nadie discute «Storage»; todo el mundo discute «cuánto cuesta la API de disponibilidad».
- Consejo: guarda la estimación con enlace y expórtala a hoja de cálculo el día que la haces, y revísala cuando cambie la arquitectura, no cuando llegue la factura.
Ejercicios
Ejercicio 1. Estima con la calculadora oficial —usa tu región y tu moneda— un entorno de desarrollo equivalente al de Contoso: un plan de App Service básico, una base de datos SQL sin servidor con pausa automática, una cuenta de almacenamiento LRS de 200 GB y una VM de 2 vCPU encendida solo en horario laborable. Agrupa por componente, exporta y anota qué tres supuestos has tenido que inventarte.
Ejercicio 2. Contoso Millas (centro-coste=CC-2077) va a lanzarse: web en App Service, PostgreSQL flexible, blobs de justificantes, una Function que calcula puntos, un Event Grid y un panel en Log Analytics. Construye la lista de todas las unidades de medida que habrá que estimar, marcando cuáles son fijas, variables acotadas y variables abiertas, y qué margen aplicarías a cada grupo.
Ejercicio 3. Un compañero propone mover vmss-api-disponibilidad-pro de West Europe a East US porque «cuesta un 13 % menos». Escribe la respuesta técnica y económica: qué costes nuevos aparecen, qué restricciones lo impiden y qué cargas de Contoso sí serían candidatas legítimas a esa mudanza.
Soluciones
Solución 1: el ejercicio importa por los supuestos, no por el total. Los tres que inevitablemente hay que inventarse son: (1) horas de la VM —176 h al mes con el patrón laborable de 8 h × 22 días, frente a las 730 que la calculadora propone por defecto—; (2) segundos de cómputo de la base sin servidor, que dependen de cuántas horas al día trabaja el equipo y de la ventana de pausa automática configurada, y que en desarrollo suele quedar en un 15-25 % del mes; y (3) transacciones del almacenamiento, que la calculadora pide en operaciones de escritura, lectura y listado y que en desarrollo nadie ha medido nunca. Además hay dos costes que casi seguro se han omitido y hay que añadir: el disco gestionado de la VM, que se factura aunque la máquina esté desasignada, y su IP pública si la tiene. Comprobación de sensatez: en un entorno así, el disco y la base de datos suelen pesar más que el cómputo, precisamente porque el cómputo se apaga y el almacenamiento no.
Solución 2: unidades por servicio y su clasificación. Fijas (±5 %): hora del plan de App Service; vCore-hora y GB-mes de PostgreSQL flexible si está aprovisionado; réplica de alta disponibilidad si se activa. Variables acotadas (±25 %): ejecuciones y GB-segundo de la Function si está en plan de consumo —acotada porque el número de canjes tiene un techo conocido—; operaciones de Event Grid; GB-mes de los blobs, que crecen de forma previsible al ritmo de canjes. Variables abiertas (±50 %): transacciones del almacenamiento, que en justificantes pequeños pueden superar al GB-mes; GB ingeridos en log-contoso-pro por las configuraciones de diagnóstico del proyecto, que es la partida que más se subestima; y salida de datos por la descarga de justificantes. Costes gratuitos con consumo aguas abajo que hay que declarar aunque valgan cero: Event Grid tiene una franja gratuita generosa, las etiquetas y directivas no cuestan, pero la asignación diagnostico-app-service heredada de la iniciativa «Base de gobernanza de Contoso» generará ingesta desde el primer día. Margen global recomendado: 15 % sobre el total, con los supuestos de canjes mensuales y tamaño medio de justificante escritos en el documento.
Solución 3: el ahorro del 13 % se aplica solo a la línea de cómputo (1.320 € → unos 1.150 €, unos 170 € al mes), y contra eso aparecen costes nuevos: salida entre regiones por cada consulta de disponibilidad que el VMSS haga a db-reservas y a cosmos-contoso-tarifas-pro, que siguen en West Europe —tráfico hoy interno y gratuito que pasaría a facturarse y que, con el volumen de la API, se come el ahorro con holgura—; latencia de ida y vuelta transatlántica en cada petición, que degrada la disponibilidad mostrada al pasajero; y doble operación, porque habría que replicar red, NSG, puntos privados, bastion, reglas de fw-contoso-hub-pro y configuraciones de diagnóstico en una segunda región. La restricción que lo cierra sin discusión es de cumplimiento: los datos de pasajeros no salen de la UE, y la directiva de regiones permitidas del módulo 4 denegará el despliegue. Cargas que sí serían candidatas legítimas: procesos por lotes nocturnos sobre datos ya anonimizados, agentes de compilación autohospedados de contoso-reservas-ci —que además pueden ir en instancias de acceso puntual (08-03)—, y entrenamientos o pruebas de carga puntuales sin datos personales. Regla general: se mueve por precio lo que no tiene latencia crítica, ni datos regulados, ni conversación intensa con recursos de otra región.
Conclusión
Ya sabes por qué la estimación es la única palanca que actúa cuando corregir todavía es gratis, y por qué el error de Contoso —duplicar la previsión— no fue de cálculo sino de modelo mental: Azure no es un catálogo de máquinas con precio mensual, sino un conjunto de unidades de consumo. Tienes la tabla de esas unidades por familia de servicio —hora de instancia, hora de plan, GB-mes, transacción, unidad de solicitud, TB leído, GB ingerido, GB de salida, ejecución, token, instancia protegida—, la advertencia de que casi todo tiene una segunda unidad que nadie estima, y los tres costes que se olvidan siempre: la salida de datos, que no tiene recurso al que mirar; las transacciones, que en objetos pequeños superan al almacenamiento; y las funciones «gratuitas» que arrastran consumo aguas abajo, con las configuraciones de diagnóstico como ejemplo perfecto.
Manejas la calculadora de precios con método —buscar, configurar región, nivel, cantidad y horas, agrupar por componente, fijar moneda y oferta, guardar, compartir y exportar— y has visto la estimación completa de Contoso: 17.450 €/mes orientativos, con las cinco líneas que sorprenden identificadas —Log Analytics, el firewall, los nodos de AKS, el bastión y Front Door— más la réplica de db-reservas, que cuesta el 80 % de la principal y pone precio explícito a la decisión de recuperación del módulo 7. Sabes usar la calculadora de coste total de propiedad y qué costes ocultos del centro de datos hay que sumar para que la comparación sea honesta: energía, personal, espacio, renovación, sobrecapacidad y riesgo. Entiendes por qué la misma VM cuesta distinto en cada región y por qué la región se elige por latencia, residencia del dato y disponibilidad, con el precio solo como desempate; y puedes automatizarlo con la API de precios minoristas, vigilando siempre unitOfMeasure. Por encima de la herramienta llevas lo que convierte una cifra en una estimación: el margen de error declarado, la forma de estimar lo variable a partir del perfil horario y del negocio en lugar del máximo teórico, el colchón del 15 % que llevó los 17.450 € a los 20.070 € presupuestados, y el fichero de supuestos y riesgos versionado junto a las plantillas.
Pero una estimación, por buena que sea, sigue siendo una hipótesis. La pregunta de Nuria —«¿por qué sube la factura cada mes?»— solo se responde con datos reales: qué se gastó, en qué recurso, de qué equipo, en qué día y por qué. Eso es Azure Cost Management, y es la lección siguiente: la jerarquía de facturación y su diferencia con la de recursos, el análisis de costes agrupado por servicio, ubicación, grupo de recursos y etiqueta —donde por fin se cobra la disciplina de centro-coste=CC-1042 sembrada en el módulo 1 y forzada por la política hereda-centro-coste del módulo 4—, los presupuestos con sus alertas automatizadas, el reparto entre equipos, las exportaciones a stlagocontosopro y la detección de anomalías. De estimar el coste pasamos a medirlo.
Curso de Azure
Módulo 1: Introducción a Azure
- ¿Qué es Azure?
- Modelos de servicio, regiones y zonas de disponibilidad
- Crear y configurar tu cuenta de Azure
- Recorrido por el portal de Azure
- Azure Resource Manager: suscripciones, grupos de recursos y etiquetas
- Azure CLI, PowerShell y Cloud Shell
Módulo 2: Servicios principales de Azure
- Máquinas virtuales de Azure
- Escalado y alta disponibilidad del cómputo
- Azure App Service
- Azure Storage: blobs, archivos, colas y tablas
- Redes en Azure: redes virtuales, subredes y NSG
- Conectividad híbrida y entrega global
Módulo 3: Bases de datos de Azure
- Elegir el servicio de datos adecuado
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de datos: Data Lake, Data Factory y Synapse
Módulo 4: Seguridad en Azure
- Microsoft Entra ID y gestión de identidades
- RBAC e identidades administradas
- Azure Key Vault
- Protección DDoS y firewall de aplicaciones web
- Microsoft Defender for Cloud
- Gobernanza y cumplimiento con Azure Policy
Módulo 5: Azure DevOps
- Introducción a Azure DevOps
- Azure Repos
- Azure Pipelines: integración continua
- Despliegue continuo con entornos y aprobaciones
- Azure Artifacts
- Infraestructura como código con Bicep
Módulo 6: Servicios avanzados de Azure
- Contenedores en Azure: Container Registry y Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Mensajería y eventos: Service Bus, Event Grid y Event Hubs
- Servicios de IA de Azure
Módulo 7: Monitoreo y gestión
- Azure Monitor: métricas, alertas y paneles
- Log Analytics y consultas KQL
- Application Insights
- Azure Automation y runbooks
- Copias de seguridad y recuperación ante desastres
Módulo 8: Gestión y optimización de costos
- Calculadora de precios y estimación de costes
- Azure Cost Management: análisis, presupuestos y alertas
- Reservas, planes de ahorro y Azure Hybrid Benefit
- Azure Advisor
- Estrategias de optimización y cultura FinOps
