5 puntos por GN⁺ 2024-01-16 | 1 comentarios | Compartir por WhatsApp
  • 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-1 y hasta $0.154 por GB en af-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-1 y hasta $0.147 por GB en af-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-1a a us-east-1b, son $10 por envío y $10 por recepción, para un total de $20
  • 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-1a o us-east-1b, sino a un bucket us-east-1
    • AWS replica internamente los datos en al menos 3 zonas de disponibilidad dentro de la región
  • 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-1a o desde us-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-1a a otra en us-east-1b cuesta $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-1 cuesta $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
  • 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 cp maneja 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-1a y us-east-1b, y en la instancia de us-east-1a se 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-1b y la instancia de us-east-1a transfirió 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-1a subió el archivo de 1 TB y luego la instancia de us-east-1b lo descargó y lo eliminó
  • 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

 
GN⁺ 2024-01-16
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”

    • https://aws.amazon.com/service-terms/
      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
    • Otra forma es usar el free tier de CloudFront, que permite descargar 1 TB gratis al mes desde AWS
      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
    • Viéndolo en detalle, 2 TB por $5 sale mejor que 3 TB por $10
    • Es un buen truco, pero por los términos de AWS se parece bastante a jugar con fuego
  • 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

    • No parece muy probable
      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
    • Sí sé de una forma de sacar datos gratis de GCP, pero nunca la he probado
      Me pregunto si podría encontrar a alguien dispuesto a comprar esa información
    • Más que una laguna, esto da la impresión de que AWS optimizó S3 y pretendía que las instancias de EC2 usaran S3 como almacenamiento
      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

    • He usado este método y otras técnicas durante años y nunca me han bloqueado
      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

    • Puede haber casos donde se use una configuración como “la DB en la zona b y el único servidor en la zona a”, pero me cuesta imaginarlo
      ¿Será por costos? Aunque tampoco parece una forma de ahorrar
    • Como punto 4, también se puede activar la clase de almacenamiento S3 Intelligent-Tiering
  • 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

    • Esto no es una laguna, sino diseño intencional
      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

    • Si estás haciendo un análisis detallado de costos cloud, en realidad significa que sí estás usando bien la nube
      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
    • Decir “si llegaste al punto de analizar en detalle los costos cloud, deja la nube” implica perder parte de la razón original para usarla
      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
    • La solución del artículo es relativamente fácil de aplicar
      Si ya estás amarrado a AWS, salir puede costar bastante, y en algunos casos este enfoque puede ser un buen punto intermedio
    • Para hacer hosting propio, si en realidad estás usando las funciones de la nube, es decir, servicios administrados, necesitas montar un departamento de TI con capacidades que muchas empresas no tienen
      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
    • En este caso, no parece que el “hosting propio” hubiera ayudado
      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

    • Eso parece bastante inusual
      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

    • Los datos tienen “gravedad”
      Te dejan atado a donde están los datos, y así como cuesta dinero escapar de la gravedad, también cuesta mover los datos
    • Cuando todas las VM y contenedores están en AWS, y S3 tiene soporte muy sólido sin importar qué lenguaje, framework o configuración uses, es realmente difícil pedirle al equipo que use otro proveedor de almacenamiento de objetos
      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
    • Hicimos una nueva función para un SaaS que consume bastante ancho de banda usando R2, y ha funcionado muy bien
      El ahorro también es realmente grande
      Seguimos usando AWS-SDK(Node.js) tal cual y solo apuntamos al endpoint de R2
    • Confío mucho menos en Cloudflare que en AWS
      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
    • R2 todavía es bastante nuevo
      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