Almacenamiento y transferencia en Azure: por dónde se va el dinero callado
El almacenamiento parece barato por gigabyte, así que nadie lo audita. Luego la redundancia, las transacciones, las penalizaciones por borrado anticipado y el tráfico entre regiones convierten una línea pequeña en una grande.
El desperdicio de cómputo hace ruido. Alguien acaba fijándose en la máquina virtual sobredimensionada. El desperdicio de almacenamiento es callado: no despierta a nadie, crece un poco cada día y el precio por gigabyte es lo bastante bajo como para que nadie crea que merece una tarde.
En un entorno maduro de Azure, almacenamiento y transferencia juntos son habitualmente entre el 15 y el 25 por ciento de la factura, y la mayor parte es estructural, no de volumen. Esto es lo que revisamos.
La redundancia es el mayor multiplicador
La configuración de redundancia de una cuenta de almacenamiento multiplica su precio antes de que ninguna otra decisión importe. El almacenamiento con redundancia geográfica cuesta aproximadamente el doble que el local, y la variante con acceso de lectura, más todavía. Es la elección correcta para datos cuya pérdida acabaría con el negocio. Es la elección equivocada, tomada por defecto, para artefactos de compilación, logs, exportaciones temporales y la zona de aterrizaje de un pipeline que de todas formas relee del sistema origen.
Recorre las cuentas y hazte una pregunta por cuenta: si esta región desapareciera una semana, ¿restauraríamos esto desde otro sitio? Si la respuesta es sí, con redundancia de zona o local basta. Cambiar la redundancia de una cuenta viva es una operación con restricciones reales, así que planifícala, pero el ahorro es dividir por dos todo lo que haya en la cuenta.
Niveles, y la penalización que nadie lee
Frecuente, esporádico, frío y archivo intercambian precio de almacenamiento por precio de acceso. Bajar de nivel los datos que se leen poco es obviamente correcto, y es también donde los equipos pierden dinero, porque cada nivel frío lleva un periodo mínimo de retención con un cargo por borrado anticipado si mueves o borras el blob antes de que pase. Esporádico son 30 días, frío 90, archivo 180. Una regla de ciclo de vida que baja de nivel el primer día y borra el día 45 paga penalización en cada objeto.
Dos reglas que funcionan:
- Cambia de nivel por fecha de último acceso, no por fecha de creación, si el patrón de acceso es desigual. Azure la registra si activas el seguimiento de acceso en la cuenta, y te evita enfriar precisamente el fichero que todo el mundo abre.
- Haz que la edad de la regla de borrado sea mayor que la retención mínima del nivel, siempre. Si quieres un ciclo de vida de 30 días, déjalo en frecuente.
El archivo merece su propia advertencia: rehidratar tarda horas y cuesta dinero real por gigabyte. Es el sitio correcto para copias de seguridad y copias de cumplimiento, y el sitio equivocado para cualquier cosa que un ingeniero pueda necesitar durante un incidente.
Las transacciones pueden superar al almacenamiento
Los niveles esporádico y archivo cobran más por transacción que el frecuente. Una carga que hace millones de lecturas pequeñas contra almacenamiento esporádico puede pagar más en transacciones de lo que ahorra en precio de almacenamiento, que es la forma más común en que una política de ciclo de vida bienintencionada sale por la culata. Si un contenedor sirve un patrón de lectura de alta frecuencia, déjalo en frecuente sin importar la edad de los objetos.
La misma aritmética se aplica a los blobs en bloques Premium: precio alto por gigabyte, precio muy bajo por transacción. Para objetos pequeños leídos constantemente, a veces es la opción más barata en total, no la más cara.
Lo que se va acumulando
- Discos gestionados y snapshots huérfanos de máquinas virtuales borradas y puntos de restauración viejos. Todos los entornos los tienen, y en los que llevan años funcionando son considerables.
- Borrado temporal y versionado sin caducidad. Los dos vienen activados en muchas plantillas. Los dos son correctos de activar. Ninguno es correcto dejarlo sin límite, porque entonces guardas todas las versiones de todos los objetos para siempre. Añade una regla de ciclo de vida que caduque las versiones antiguas y los blobs borrados temporalmente a los 30 o 90 días.
- Cargas por partes incompletas. Las subidas fallidas dejan bloques sin confirmar que facturan y que ningún listado de blobs te muestra. Una regla de ciclo de vida los limpia.
- Almacenes de copias con una política que nadie ha revisado, guardando puntos de recuperación diarios de hace dos años con una retención que alguien eligió por si acaso.
- Recursos compartidos de archivos vacíos u olvidados en Premium, que facturan por capacidad aprovisionada y no por lo que usaste.
La transferencia de datos, en el orden en que muerde
La entrada es gratis. Todo lo demás es cuestión de dónde está la frontera.
- Replicación y tráfico entre regiones. El almacenamiento con redundancia geográfica replica de forma continua, y una aplicación parlanchina repartida entre dos regiones paga en cada salto. Esto suele ser un hallazgo de arquitectura, no una palanca.
- Tráfico entre zonas de disponibilidad. La transferencia entre zonas dentro de una región se factura. En un clúster de Kubernetes multizona con servicios que ignoran la topología, la mayor parte del tráfico entre pods cruza una frontera, el mismo efecto que describimos en lo que cuesta AKS.
- Salida a internet, que tiene una franquicia mensual gratuita y luego baja de precio por tramos de volumen. Pon una CDN delante de todo lo que sirva los mismos bytes repetidamente; el precio de salida de la CDN es menor y el origen deja de pagar del todo por los objetos cacheados.
- Procesamiento de datos de la NAT gateway, que se cobra por gigabyte además de la tarifa por hora. Los endpoints privados y los service endpoints sacan del camino de la NAT todo el tráfico hacia servicios de Azure, lo que es un argumento de coste encima del argumento de seguridad que damos en endpoints privados y el problema de DNS.
- Procesamiento de datos del endpoint privado. Private Link tampoco es gratis por gigabyte. Para tráfico interno de muchísimo volumen, los service endpoints cuestan menos; el precio a pagar es una frontera de seguridad más débil.
Entonces, y solo entonces, reserva
Azure vende capacidad reservada para almacenamiento de blobs y para algunas cargas de base de datos y de archivos, con descuento a uno o tres años. Funciona, y va al final, exactamente por la razón por la que va al final en la factura de Azure: reservar una huella que estabas a punto de reducir a la mitad es pagar con descuento por datos que deberías haber borrado.
Qué hacer esta semana
Lista todas las cuentas de almacenamiento con su configuración de redundancia y todos los discos gestionados sin máquina virtual asociada. La primera lista te dice si estás pagando el doble por datos que no echarías de menos. La segunda es dinero gratis, y siempre es más larga de lo que nadie espera. Hacemos las dos en la fase de costes de un proyecto cloud.