- En AWS, la transferencia entre zonas de disponibilidad dentro de la misma región cobra $0.01 por GB tanto por envío como por recepción, así que transferir 1 TB directamente cuesta unos $20, pero usando S3 como escala temporal el costo puede bajar a apenas centavos
- Los buckets estándar de S3 operan a nivel de región y AWS replica los datos en al menos 3 zonas de disponibilidad dentro de la región, por lo que se puede acceder igual desde varias AZ de la misma región
- Si una instancia EC2 sube datos a S3 en la misma región y otra AZ los descarga, la tarifa de transferencia de datos es gratuita, y el costo real se reduce al almacenamiento en S3 por poco tiempo y a las solicitudes de API
- En
us-east-1, guardar 1 TB durante menos de 1 hora cuesta solo alrededor de $0.03, que es 1/720 de S3 Standard a $23/TB-month; incluso 1 PB baja de $20,000 por transferencia directa a alrededor de $32 - Este método no es un reemplazo drop-in para código de transferencia de red y puede aumentar la latencia, pero cuando la prioridad absoluta es el costo en transferencias masivas cross-AZ, puede reducirlo en más del 99%
Dónde se disparan los costos de transferencia de datos en AWS
- Si se mueven datos en AWS sin cuidado, los costos de transferencia se acumulan rápidamente
- Al momento de escribir esto, las principales tarifas de transferencia de datos son las siguientes
- La transferencia desde AWS hacia internet público cuesta $0.09 por GB en
us-east-1y hasta $0.154 por GB enaf-south-1, así que transferir 1 TB cuesta entre $90 y $154 - La transferencia saliente de una región de AWS a otra cuesta $0.02 por GB en
us-east-1y hasta $0.147 por GB enaf-south-1, así que incluso sin salir de la red de AWS puede costar entre $20 y $147 por 1 TB - La transferencia entre distintas zonas de disponibilidad dentro de la misma región cuesta $0.01 por GB en cada dirección; si se envía 1 TB de
us-east-1aaus-east-1b, son $10 por envío y $10 por recepción, para un total de $20
- La transferencia desde AWS hacia internet público cuesta $0.09 por GB en
- La transferencia a internet y entre regiones solo cobra egress por los datos salientes, pero entre AZ dentro de la misma región el costo aplica en ambos sentidos
- Desplegar recursos en varias zonas de disponibilidad mejora la resiliencia y la disponibilidad, pero si los recursos en distintas AZ intercambian datos, aparece el costo cross-AZ
Precauciones con PrivateLink y los VPC endpoints
- Si una instancia EC2 transfiere 1 TB a un bucket público de S3 en otra región, en vez del costo esperado de $20 por transferencia entre regiones, podría terminar pagando $90 de egress a internet
- AWS PrivateLink y los VPC endpoints son útiles en precio y seguridad porque garantizan que los datos entre regiones no salgan de la red de AWS
- Sin embargo, estas funciones no son gratuitas y tienen sus propios límites y detalles de cobro
- Material relacionado
Cómo evitar el costo de transferencia cross-AZ usando S3
- La mayoría de las clases de almacenamiento de S3 guardan los buckets a nivel de región, no de zona de disponibilidad
- El usuario no sube datos a un bucket
us-east-1aous-east-1b, sino a un bucketus-east-1 - AWS replica internamente los datos en al menos 3 zonas de disponibilidad dentro de la región
- El usuario no sube datos a un bucket
- Se puede acceder por igual a los datos de un bucket estándar de S3 desde cualquier zona de disponibilidad de la misma región; para S3 da lo mismo si se descargan desde
us-east-1ao desdeus-east-1b - En S3 Standard, las descargas dentro de la misma región son gratuitas, y solo se aplican las tarifas normales de transferencia al descargar a otra región o a internet público
- Las subidas a S3 no tienen costo de transferencia de datos en ninguna clase de almacenamiento
- Aun así, sí se cobran las solicitudes a la API de S3
- El costo por solicitudes es relativamente pequeño
Cálculo de costos para 1 TB y 1 PB
- Enviar 1 TB directamente desde una instancia EC2 en
us-east-1aa otra enus-east-1bcuesta $20 - Si se suben esos mismos datos a S3 y luego una instancia en otra AZ los descarga, tanto la subida como la descarga no tienen costo de transferencia de datos
- El costo restante es el de almacenamiento en S3
- El almacenamiento S3 Standard en
us-east-1cuesta $0.023 por GB al mes, es decir, $23 por TB al mes - La facturación se calcula por hora
- Si se diseña el flujo para que los datos permanezcan en S3 menos de 1 hora, el costo es aproximadamente $0.03, o sea 1/720 de $23
- Hay que borrar el objeto de S3 después de la transferencia
- El almacenamiento S3 Standard en
- Con este cálculo, el costo de transferencia baja de $0.02 por GB a $0.000032/GB, alrededor del 0.15% de la tarifa original
- Como ejemplo extremo, transferir 1 PB cuesta cerca de $32 con este método, en vez de $20,000 con el enfoque estándar
Escalabilidad y restricciones
- S3 escala muy bien, así que también sirve para escenarios donde muchas instancias en otra AZ descargan al mismo tiempo un objeto subido desde una AZ
- Miles de instancias en la segunda AZ pueden descargar el mismo objeto de S3
- El costo de almacenamiento en S3 se mantiene igual
- El costo de descarga también sigue siendo gratuito
- El tamaño de los objetos en S3 tiene límites
- Un objeto individual no puede superar los 5 TB
- Los archivos de más de 5 TB deben dividirse
- Una sola subida no puede superar los 5 GB, así que los archivos más grandes requieren multipart upload
aws s3 cpmaneja internamente multipart upload
- S3 One Zone-Infrequent Access y S3 Express One Zone almacenan los datos en una sola zona de disponibilidad
- El costo de almacenamiento es menor, pero con una contrapartida en disponibilidad
- En
us-east-1, S3 One Zone-Infrequent Access cuesta $0.01 por GB y S3 Infrequent Access cuesta $0.0125 por GB - S3 One Zone-Infrequent Access está diseñado con un objetivo de disponibilidad de 99.5%, y S3 Infrequent Access con 99.99%
Configuración del experimento y costos observados
- Para reducir el ruido en los costos, en el experimento se usaron 2 cuentas nuevas de AWS para cada parte
- En cada cuenta había 2 instancias EC2 en
us-east-1ayus-east-1b, y en la instancia deus-east-1ase generó un archivo aleatorio de 1 TB - Se compararon dos enfoques
- En el primero, dentro de un VPC con subredes privadas en ambas AZ, se levantó un servidor de netcat en la instancia de
us-east-1by la instancia deus-east-1atransfirió directamente el archivo de 1 TB - En el segundo, dentro de un VPC con S3 Gateway endpoint, se creó un bucket de S3, la instancia de
us-east-1asubió el archivo de 1 TB y luego la instancia deus-east-1blo descargó y lo eliminó
- En el primero, dentro de un VPC con subredes privadas en ambas AZ, se levantó un servidor de netcat en la instancia de
- El AWS Free Tier podría haber afectado ligeramente los resultados del experimento
- El nivel gratuito de S3 incluye 5 GB-months durante 12 meses
- 5 GB-months es menos que 1 TB-hours, aunque no por mucho
- Después de que Cost Explorer se actualizó, el experimento de transferencia directa mostró $21.49, cerca de los $20 esperados
- El hecho de haber interrumpido y reiniciado la transferencia una vez explica parte del costo extra
- El archivo generado era técnicamente de 1024 GB, así que el costo base era de $20.48
- El experimento de transferencia vía S3 apareció inicialmente como $0.08, y no se mostró costo de transferencia de datos
- Después se confirmó que el costo de almacenamiento en S3 se reporta por bucket y por día, y que tarda más en reflejarse en Cost Explorer que otros cargos
- Como se esperaba, el costo de almacenamiento reportado fue de unos pocos centavos
- El Free Tier de almacenamiento S3 se agotó por completo
- Esta posibilidad fue señalada por Dieter Matzion de la comunidad FinOps
Cuándo vale la pena usarlo
- AWS replica internamente los datos de S3 entre zonas de disponibilidad, y ese costo ya está incluido en el costo de almacenamiento de S3 que paga el usuario
- El enfoque de pasar por S3 aprovecha que ese costo cross-AZ ya quedó pagado indirectamente al momento de subir los datos
- Si los datos se dejan mucho tiempo en S3, puede salir mucho más caro que una transferencia directa cross-AZ
- Si el objeto se elimina justo después de la transferencia, se puede lograr la reducción de costos del 99% buscada
- También tiene desventajas claras
- No es un reemplazo drop-in del código existente de transferencia de datos
- La latencia puede ser mucho mayor que con una conexión de red directa
- Si la prioridad absoluta es el costo, puede ser una forma práctica de reducir en más de un 99% el costo de transferencia de datos cross-AZ en AWS
1 comentarios
Comentarios en Hacker News
Para compartir mi truco, puedes usar una instancia de Lightsail para “hacer de proxy” de datos de otros recursos de AWS, por ejemplo instancias de EC2 o buckets de S3
Cada instancia de Lightsail incluye una cuota de transferencia de datos en el precio: la instancia de $3.5 incluye 1 TB, la de $5 incluye 2 TB, la de $10 incluye 3 TB, la de $20 incluye 4 TB y la de $40 incluye 5 TB
En precio por volumen transferido, la mejor opción es 3 TB de la instancia de $10
Según los datos del artículo, 3 TB de tráfico desde EC2 cuestan $276.48 en us-east-1, y desde un bucket de S3 cuestan $69
La desventaja es que en Lightsail tanto el tráfico de entrada como el de salida cuentan como “tráfico”
Según la sección 51.3 de los términos de AWS, no se debe usar Amazon Lightsail para evitar los cargos de datos de otros servicios
Por ejemplo, no se puede usar para hacer proxy de tráfico de red desde otros servicios hacia la Internet pública u otros destinos, ni para procesar datos en exceso mediante servicios de balanceo de carga o CDN; si se infringe, pueden limitar los servicios de datos o suspender la cuenta
Solo hay que configurar S3 o el servidor HTTP que prefieras como origen
Antes eran 50 GB al mes durante los primeros 12 meses, pero justo después de que Cloudflare publicara https://blog.cloudflare.com/aws-egregious-egress, cambió a 1 TB gratis permanente
GCP también cerró una laguna parecida en 2023, probablemente porque algunos clientes la estaban explotando
Si este método se populariza lo suficiente, creo que AWS hará lo mismo
https://cloud.google.com/storage/pricing-announce#network
La “laguna” que cerró GCP era la transferencia gratuita entre regiones del mismo continente con GCS, y en AWS eso ya es de pago
Lo que menciona la publicación original es que incluso la transferencia entre zonas de disponibilidad dentro de la misma región cuesta $0.02 por GB, y que esto permite esquivarlo
Me pregunto si podría encontrar a alguien dispuesto a comprar esa información
Aunque quizá no para usarlo como canal de transferencia, sino más bien esperando que subas los datos ahí y los dejes guardados
Hay muchísimos trucos de este tipo para bajar costos y obtener recursos gratis
Son ingeniosos, pero no son confiables
Es el mismo tipo de hack que usar un repositorio OSS para minar criptomonedas con GitHub Actions
Está bien tratarlo como un ejercicio interesante de hacking, pero no conviene desplegar estas soluciones en producción
Como mínimo, deberías tener la aprobación del responsable de tu cuenta; si no, corres el riesgo de despertar un día con la cuenta de AWS cerrada
La vía de pasar por S3 también suele ser más eficiente que ejecutar procesos de sincronización cuando distribuyes datos a varios destinos
El costo de almacenamiento en S3 se cobra por GB-mes, así que 1 TB × $0.023 por GB ÷ 730 horas al mes debería dar unos 3 centavos por dejarlo una hora en el bucket
Pero como parece que lo borraron casi de inmediato, si los datos estuvieron ahí alrededor de 1 minuto, podría ser algo como 0.03 ÷ 60
Normalmente esperaría que AWS redondeara eso hacia arriba a $0.01
El valor de TimedByteStorage en el informe de costos y uso es el criterio definitivo
https://handbook.vantage.sh/aws/services/s3-pricing/
S3 también es un buen truco, y además hay más
Si eres un gran cliente de AWS, por ejemplo alguien que gasta más de $1 millón al año, puedes pedir descuentos
Hubo una época en la que los descuentos por transferencia entre zonas de disponibilidad eran muy grandes
Otra opción es concentrar todo lo posible en una sola zona de disponibilidad
Tener una configuración donde la DB está en la zona “b” y el único servidor en la zona “a” es peor que simplemente estandarizar todo en una sola zona
Cuando usas varias zonas de disponibilidad, deberías hacer balanceo entre zonas con conciencia de carga
¿Será por costos? Aunque tampoco parece una forma de ahorrar
Esto se siente como una evasión fiscal en versión tecnológica
Si demasiada gente hace esto, AWS simplemente “cerrará la laguna”
AWS no es una sola cosa, sino más bien decenas o cientos de AWS distintos, cada uno con sus propios KPI
Algunos equipos quieren que bajes el gasto, pero no te dicen realmente cómo hacerlo
Cuando construyes algo tan complejo como AWS, todo queda tan entrelazado que para el cliente se vuelve imposible optimizar solo un elemento
AWS quiere que uses ciertos servicios de cierta manera, y por eso, si los usas así, los deja muy baratos
Usar endpoints de S3 es una de las formas en que AWS quiere que se use el servicio S3
CloudFront es otro ejemplo
AWS quiere que uses CloudFront, así que lo hace más barato que otras formas de salida de datos
La alternativa a un sistema complejo para minimizar costos en la nube es simplemente no usar la nube
Puedes hacer hosting propio o usar Cloudflare, donde la tarifa de salida por GB es de 0 centavos
O rentar servidores en la nube de varios proveedores de VPS mucho más baratos y dejar de usar servicios cloud caros y complejos que te exprimen con 9, 12 o 17 centavos por GB y te empujan al lock-in
En serio, si ya llegaste al punto de tener que analizar con tanto detalle los costos de la nube, deberías considerar dejarla
En otros lugares ese tipo de análisis simplemente es imposible
Quienes dicen que te vayas on-premise parecen no saber cuánto cuesta el personal para operar un datacenter sin tratarlo como si fuera un homelab
Incluso Apple iCloud usa AWS y GCP porque es económicamente conveniente
Pensar que hay que volver a on-premise porque no puedes usar la nube, o no darle mucha importancia a la confiabilidad
Empieza por calcular el costo de mitigación de DDoS por encima de 10G y luego intenta decir que la nube sale más cara
Nosotros gastamos más de 100 mil dólares en ancho de banda de AWS, pero sigue siendo más barato que una línea dedicada a internet porque no tenemos que pagar ingenieros de red para administrar 3 zonas de disponibilidad
Muchas organizaciones se pasan al hosting basado en la nube porque, entre muchas ventajas, permite profundizar mucho más en FinOps y el control de costos
Dependiendo de la infraestructura, si la demanda de almacenamiento o cómputo varía, una solución basada en la nube puede encajar muy bien
Al final, solo es una herramienta
He trabajado tanto en lugares donde entrábamos por SSH a servidores bare metal de producción para actualizar software, administrar firewalls y revisar almacenamiento, como en otros donde la mayor parte del hosting la resolvía un proveedor cloud, e incluso he visto transiciones de un modelo al otro
La “nube” no es mejor ni peor que los servidores bare metal o un VPS; depende del caso de uso
Solo hay que evaluar por qué una opción encaja mejor y volver a hacerlo cada vez que cambie el entorno
Esa actitud de “la nube es mala” es infantil
Si ya estás amarrado a AWS, salir puede costar bastante, y en algunos casos este enfoque puede ser un buen punto intermedio
En muchos casos ese costo puede compensar fácilmente o incluso superar el ahorro
Esa es una gran razón por la que para tantas empresas elegir la nube se volvió una decisión tan obvia
AWS parece estar operando con pérdidas en este caso
El autor encontró una grieta en el esquema de precios de AWS, y por eso sale tan barato
Si lo hubiera hecho por su cuenta, probablemente habría sido más caro
Solo se puede especular por qué AWS fija los precios así, pero probablemente sea para empujar a que se use más un servicio que otro
Si eres un usuario con mucho consumo de ancho de banda, vale la pena revisar Leaseweb, PhoenixNAP, Hetzner, OVH
El precio del ancho de banda es ridículamente más barato
Hubo una situación extraña hace tiempo en la que, aunque con los precios estándar la empresa no podía sostenerse, los ejecutivos de ventas de AWS no quisieron bajar en absoluto el precio del ancho de banda
Los costos de transferencia parecen ser una de las partidas que normalmente sí se pueden negociar
Otro truco es usar ECR
Puedes transferir gratis 5TB al mes hacia internet
Las imágenes de contenedor deben ser públicas, pero su contenido puede cifrarse
Es útil cuando guardas archivos multimedia en Glacier
No entiendo cómo AWS puede seguir sacándole dinero a la gente con estas absurdas tarifas de transferencia de datos
Justo al lado está Cloudflare R2 ofreciendo condiciones 100 veces mejores
Te dejan atado a donde están los datos, y así como cuesta dinero escapar de la gravedad, también cuesta mover los datos
Si en R2 pasa algo como pérdida de datos o transferencias lentas, me van a culpar a mí o al menos me van a pedir ayuda
En cambio, si S3 pierde datos o se pone lento en ciertos casos, la gente piensa que nosotros estamos usando algo mal y busca la forma de mejorarlo
Nadie recibe la culpa
Honestamente, si el negocio genera cualquier tipo de valor, las tarifas de transferencia de datos son lo bastante pequeñas como para ignorarlas y no vale la pena optimizarlas
El ahorro también es realmente grande
Seguimos usando AWS-SDK(Node.js) tal cual y solo apuntamos al endpoint de R2
Cuando los datos están en AWS, todas las aplicaciones en la misma región pueden usarlos sin costo de transferencia
Además, el precio citado en el artículo es el precio de lista; si el cliente precompra ancho de banda por contrato, sale mucho más barato
No tengo claro qué tan buen rendimiento y disponibilidad tenga en operación real
Especialmente la durabilidad es difícil o casi imposible de evaluar
S3 tiene una historia y un historial mucho más largos, y eso le da una ventaja
Si ya tienes todo dentro de AWS, también existe la ventaja de mantener los datos cerca
Dependiendo de cómo se usen los datos, el costo de salida no siempre tiene que ser tan grande
Pero cuando de verdad empiezas a generar un volumen importante de tráfico saliente, se vuelve absurdamente caro
Si un competidor como R2 puede ofrecer una confiabilidad y un rendimiento razonablemente competitivos, esperaría que gane cuota de mercado