- Un caso en el que un error de configuración de red de VPC y NAT Gateway en AWS provocó costos de transferencia de datos a S3 de unos $900 en un solo día y más de $1,000 acumulados en un mes
- Aunque suele decirse que la transferencia de EC2 a S3 es gratuita, si pasa por un NAT Gateway dentro de la VPC se generan cargos por procesamiento de datos
- La causa del problema fue la falta de un VPC Gateway Endpoint para S3, es decir, no existía una configuración para conectarse directamente a S3 sin pasar por el NAT Gateway
- El Gateway Endpoint es gratuito y no genera cargos por transferencia de datos, y puede configurarse fácilmente con Terraform, entre otras herramientas
- Es un caso que muestra la importancia de vigilar los costos y revisar la configuración de VPC Endpoint al operar infraestructura en AWS
Contexto del problema
- Geocodio usa AWS para replicar en S3 archivos internos de datos geográficos de gran volumen
- Los datos incluyen puntos de direcciones, datos de límites e información censal, con tamaños que van desde varios GB hasta cientos de GB
- Se requiere sincronización periódica desde una plataforma ETL alojada en Hetzner hacia la infraestructura de procesamiento en AWS
- Los altos costos de transferencia de datos en AWS son una queja común en toda la industria, y Cloudflare y Corey Quinn, entre otros, han señalado este problema
- Antes de iniciar el proyecto, el autor revisó la estructura de costos y estimó el gasto confirmando que
- la transferencia EC2–S3 dentro de la misma región es gratuita
- la subida de datos a S3 (ingreso) es gratuita
Costos inesperados
- Después de desplegar el proceso de sincronización con S3, recibió una alerta de anomalía de AWS Cost Anomaly Detection
- En un solo día, el volumen de transferencia de datos del NAT Gateway fue de 20,167.32GB, con un costo de $907.53
- El costo acumulado del mes ya había superado los $1,000
- Ante la idea de que la transferencia EC2–S3 era gratuita, investigó por qué se estaban cobrando cargos del NAT Gateway
Análisis de la causa: paso por NAT Gateway
- Cuando una VPC usa un NAT Gateway, el tráfico hacia S3 también se enruta por defecto a través del NAT Gateway
- Incluso si las solicitudes van a servicios de AWS dentro de la misma región, si pasan por NAT se aplica un cargo por procesamiento de datos de $0.045 por GB
- Por eso, aunque la transferencia entre EC2 y S3 sea gratuita, sí se generaron costos por el NAT Gateway
- La solución es crear un VPC Gateway Endpoint para S3
- Permite una conexión directa desde la VPC hacia S3 sin pasar por NAT Gateway ni Internet Gateway
- Es totalmente gratuito, sin cargos por hora ni por transferencia
Proceso de solución
- Como la infraestructura se administraba con Terraform, se agregó el recurso de Gateway Endpoint y se vinculó a la tabla de rutas
- AWS actualizó automáticamente el enrutamiento para enviar el tráfico hacia S3 al Endpoint en lugar del NAT Gateway
- Después de eso, dejaron de generarse cargos relacionados con el NAT Gateway
Lecciones y recomendaciones
- A pesar de llevar mucho tiempo usando AWS, se generaron costos por haber omitido la configuración del VPC Endpoint para S3
- Las redes en AWS son complejas y la estructura de costos puede cambiar mucho según cómo se configure todo
- Recomendaciones para evitar que vuelva a ocurrir
- Activar AWS Cost Anomaly Detection: permite detectar costos anómalos de forma temprana
- Usar VPC Endpoint: es esencial al acceder a S3 y DynamoDB desde una VPC que usa NAT Gateway
- Verificar los supuestos: no confiar solo en la idea de que “la transferencia EC2–S3 es gratuita”; conviene probar a pequeña escala y monitorear costos
- La nube es compleja: incluso los usuarios de largo plazo necesitan mantener atención constante
- También se menciona un caso similar en el que Recall.ai pagó $1 millón al año por costos de procesamiento de datos WebSocket
Medidas posteriores
- Geocodio revisó la ruta de comunicación con S3 en todas sus VPC y completó la configuración de Gateway Endpoint
- Recomienda a los usuarios de AWS verificar la configuración de VPC Endpoint
- Resumen: el NAT Gateway también cobra por tráfico hacia servicios de AWS, y usar VPC Endpoint permite evitar ese costo
Material adicional
1 comentarios
Opiniones de Hacker News
Veo muy seguido que en los tres principales subreddits sobre la nube aparece un caso de factura sorpresa como este casi una vez al día
Los proveedores de nube siempre ofrecen alertas tardías, y los usuarios no pueden hacer más que rezar y pedir ayuda
Además, algunos afirman que “técnicamente es imposible ofrecer cuentas con tope duro”, pero en realidad Azure ya tiene ese tipo de cuentas
Llevo más de 10 años usando AWS, y la discontinuidad de diseño entre servicios y la fragmentación en silos dentro de la organización ha sido grave
En las organizaciones grandes no hay ejecutivos dispuestos a resolver problemas que dañen sus KPI; en cambio, se enfocan en sumar puntos para ascender lanzando servicios de moda como AI o blockchain
Puedes elegir entre planes mensuales de $0, $15 o $200, lo que evita facturas sorpresa por aumentos inesperados de solicitudes o transferencia de datos
Enlace al blog oficial de AWS
Hilo relacionado en HN
Mantener la estabilidad del servicio al mismo tiempo que se fija un límite de costos sí es difícil, pero este caso demuestra que técnicamente sí es posible
Es para evitar el riesgo reputacional de cortar servicios o provocar fallas en la infraestructura
Pero el problema podría ser la nube misma. Para negocios pequeños que necesitan una estructura de costos predecible, quizá la nube no sea la opción adecuada
Esto pasa tan seguido que creo que los S3 VPC endpoints deberían configurarse por defecto al crear una VPC
Y si usas una alternativa como fck-nat en lugar de un NAT gateway, puedes ahorrar cargos de tráfico por GB
Debe negar el acceso por defecto y permitir explícitamente el acceso a internet; de lo contrario, un atacante podría exfiltrar datos
A mí también me pasó algo parecido
Subí datos de prueba al algoritmo de recomendaciones de AWS y me olvidé de ellos; meses después, el banco me mandó una alerta de fondos insuficientes
El algoritmo siguió ejecutándose y me cobraron más de mil dólares al mes, así que al final desaparecieron 5 mil dólares
Reviso el saldo todos los días y marco como importantes todos los correos de cobro
Y adopté el hábito de poner un límite de tarjeta virtual para cada servicio
Yo cometí el mismo error y perdí 60 mil dólares
No entiendo por qué los endpoints de S3 no se despliegan por defecto
Me preguntan seguido “¿por qué explotó la factura de AWS?”, y casi siempre es la combinación de NAT + S3 + suposiciones incorrectas
La transferencia de EC2 a S3 es gratis, pero si pasa por NAT se cobra
Por eso doy la siguiente lista de verificación
Menos mal que Cost Anomaly Detection funcionó a tiempo. Perder mil dólares duele, pero es mejor que perder 20 mil
Me sorprendió ver que AWS cobra $0.09 por GB para descargar datos
¿Subir datos es gratis, pero para volver a sacarlos hay que pagar?
Este caso fue especial porque, por un error en la configuración de NAT, una transferencia interna se contabilizó como si fuera externa
Me pregunto si Amazon reembolsa este tipo de errores
El VPC NAT Gateway tiene muy mala fama
Cuando trabajaba en Amazon pasé por un problema parecido, pero como era una cuenta de la empresa no tuve que pagarlo
La gente que sí tiene que pagar de su bolsillo realmente da pena
Esto no ayuda directamente en este caso, pero ayer AWS lanzó planes de precio fijo para CDN
También hay un nivel de $0 que incluye almacenamiento S3 y ancho de banda
Enlace relacionado
Ojalá en el futuro se extienda a otros servicios
A los 22 años, cuando apenas estaba tocando infraestructura por primera vez, a mí también me cayó una factura de $300 en dos días
AWS es excelente, pero para principiantes el cálculo de costos es demasiado opaco