Esta es la historia de cómo reducimos nuestros costos de AWS en un 80 % en menos de dos semanas.
Necesito comenzar con una introducción. Hemos utilizado AWS desde 2018 para todos nuestros proyectos y ha hecho milagros para nosotros. Somos un equipo completamente distribuido y tener nuestro propio centro de datos en algún lugar del mundo sería problemático. Es mucho más fácil alquilar recursos de AWS y omitir todos los gastos de capital.
El problema con AWS es que los desarrolladores básicamente pueden crear cualquier recurso sin tener que aprobarlo con nuestro departamento financiero. Con los centros de datos tradicionales, este no es el caso: comprar un servidor adicional necesitaría obtener una factura de la tienda y pedirle al departamento financiero que la pague.
Entonces, básicamente, la base del problema es que con AWS, los desarrolladores pueden comprar los recursos en las cantidades que quieran y cuando quieran.
No somos una gran empresa y nuestros costos de AWS son solo un poco más altos que $ 7k por mes en todas las cuentas de AWS. Además, vale la pena mencionar que solo alojamos stands DEV y QA, ya que nuestros clientes pagan los stands PROD. Nuestros recursos son principalmente máquinas de desarrollo individuales, bases de datos de prueba y varios recursos personalizados para proyectos de investigación como Kinesis Firehose, Sage Maker, etc. Por lo tanto, tenemos muchos recursos aleatorios que son difíciles de categorizar, estructurar, predecir y controlar.
Entonces, ¿cómo abordamos la reducción de nuestros costos de AWS?
Primero , comenzamos a buscar en Cost Explorer e identificamos los artículos más caros:
Encontramos un nodo de Bitcoin que estuvo funcionando durante los últimos cuatro meses y nos costó $ 600 / mes, ya que requería un SSD grande con velocidad adicional aprovisionada. Hicimos una pequeña investigación sobre Bitcoin Ordinals y no retiramos la máquina.
Resolución: archivamos el volumen (cuesta $6/mes) y finalizamos la máquina virtual.
Ahorros: $594/mes
Encontramos una máquina GPU Nvidia Tesla que cuesta $531/mes. Lo usamos hasta el día de hoy para experimentos generativos de IA. Estamos pensando en crear nuestra propia aplicación que genere texto a video, por lo que necesitamos esta máquina.
Resolución: movió el volumen a una instancia puntual.
Ahorros: $360/mes
No es el hallazgo más costoso, pero el más sorprendente fue que olvidamos quitar un soporte de demostración de PROD en una de las regiones no utilizadas donde implementamos nuestros scripts de terraformación para probar el lanzamiento de PROD "desde cero".
Ahorros: $340/mes.
Muchos artículos más pequeños.
Resoluciones: variar.
Ahorros: $1700/mes
En segundo lugar , comenzamos a mover todo lo posible para detectar instancias. Este es un procedimiento simple. Para una máquina individual, debe apagarla, desconectar el volumen (recuerde anotar la ruta de montaje) y luego terminar la máquina. Luego, crea una nueva instancia puntual (sin importar qué AMI, solo asegúrese de que la arquitectura de la CPU sea compatible con su volumen anterior). Una vez que se crea la instancia de spot, separe (¡y no olvide eliminar!) el nuevo volumen y adjunte el volumen anterior en la misma ruta de montaje que estaba en la máquina original. Para entornos Beanstalk, es más simple: simplemente cambiamos la configuración de capacidad para utilizar solo instancias puntuales.
Ahorros: $1000/mes
En tercer lugar , limpiamos depósitos S3 no utilizados (hicimos algunos bots de intercambio automático que acumularon una gran cantidad de datos de transmisión). Y configure la eliminación automática de datos en varios cubos S3, de modo que no almacenemos datos comerciales durante más de un año, ya que se vuelven completamente obsoletos e inútiles.
Ahorros: $300/mes
Cuarto , redujimos algunos recursos. Es cuestión de comprobar la CPU y la RAM consumidas, y si vemos menos del 50% de uso constante, bajamos la grada.
Ahorro: $300/mes (sería 3 veces más en instancias bajo demanda)
Quinto , configuramos el apagado automático en máquinas individuales. Creamos múltiples funciones lambda para diferentes tipos de tareas: apagar una VM de SageMaker Jupyter después de 1 hora de inactividad, apagar VM individuales, DEV y QA representan el período nocturno cuando nadie está trabajando. Estas funciones lambda se ejecutan diariamente en eventos de vigilancia en la nube. Hay lambdas para permitir soportes de DEV y QA también para facilitar el proceso.
Ahorros: $500/mes
Además, implementamos algunas soluciones más pequeñas para obtener más ahorros, pero no se tratan en este artículo.
Hasta ahora, hemos ahorrado alrededor de $5500 de nuestra factura mensual de $7000, ¡lo que representa alrededor del 80 % de todos los costos! Sabía que estábamos gastando demasiado en AWS, pero nunca supe que era TANTO. En el transcurso del año, significa alrededor de $66,000 en ahorros.
Después de tener nuestra propia experiencia con la optimización de costos de la nube, entendí lo importante que es realizar un seguimiento cuidadoso de los costos de la nube. Básicamente, la optimización de costos en la nube puede ahorrar lo suficiente para impulsar el negocio si invierte el dinero ahorrado en marketing. O podría sacarlo como dividendos y comprar un auto nuevo. La suma es genial y hay muchas cosas que se pueden hacer con ella.
Dado que está fuera de discusión que la optimización de costos de la nube es un esfuerzo absolutamente necesario, ¿cómo lo abordan las empresas? Pensemos en formas de implementar la gestión de residuos en la nube, desde la más sencilla hasta la más avanzada.
Podría abordar el problema de la manera más tradicional posible. Niegue las innumerables posibilidades que brinda AWS y simplemente restrinja a sus desarrolladores la compra de máquinas EC2.
SQS? No. ¿DynamoDB? No. Solo use máquinas virtuales EC2 e instale todo en ellas.
Ventajas:
Puedes predecir muy bien el gasto, ya que hay una tarifa plana para cada tipo de EC2 VM
Los desarrolladores llenarán las máquinas disponibles con el software que necesitan. Al igual que en un centro de datos físico tradicional en las instalaciones, lo que aumenta la efectividad del gasto de dinero
Contras:
Te pierdes los beneficios del escalado automático
Tus desarrolladores pierden el tiempo implementando cosas que ya existen
Echas de menos las actualizaciones automáticas de software que se aplicarían automáticamente
En definitiva, no es una buena estrategia trabajar con la nube como si solo alquilaras hosting en GoDaddy.
¿Qué sucede si permite que los desarrolladores usen y escalen cualquier recurso, pero tienen que negociarlos con el departamento especial que controla los costos? Los desarrolladores no tienen sus propios derechos para comprar/escalar recursos, pero pueden pedirle a una persona especial que compre/escale un recurso para ellos.
Supongamos que un desarrollador necesita un extremo de Kinesis Firehose (sí, menciono un servicio del que probablemente ni siquiera haya oído hablar). ¿Sería una tarea sencilla para el desarrollador explicar lo que quiere al controlador? Y luego, el desarrollador también debe explicar el razonamiento detrás de la escala y probablemente incluso demostrar que la elección de la arquitectura es buena y no un desperdicio en términos de administración de costos.
Al proporcionar un ejemplo específico, uno podría ver que simplemente no funciona de esta manera. Solo podría funcionar si el equipo de gestión de costes está formado por expertos.
Y eso es solo la punta del iceberg. Ahora considera:
Un recurso que se vuelve innecesario debido al cambio arquitectónico
Un desarrollador que deja el trabajo y no elimina los recursos que utilizó para sus propósitos de desarrollo individuales.
Una emergencia cuando un recurso debe escalarse rápidamente para evitar problemas comerciales
Ventajas:
Los desarrolladores pueden utilizar los máximos beneficios de los recursos administrados por AWS
El gasto está bien controlado.
Contras:
Una forma más avanzada sería encontrar y contratar expertos en AWS que controlen el gasto. Pueden usar las herramientas que proporciona AWS para controlar los gastos de forma inmediata. Tiene:
un explorador de costos
un subsistema de etiquetado
instancias reservadas
planes de ahorro
anomalías de costos
mucho más
Estas herramientas no son fáciles de usar y requieren personal bien formado que sepa qué hacer con ellas. Sin embargo, en realidad puede comenzar a controlar los costos de la nube. Este enfoque requiere no solo herramientas y trabajadores altamente calificados, sino también un marco en el que trabaje el equipo: revisiones periódicas de recursos infrautilizados, procedimientos de reducción y limpieza, entre otros.
Un equipo que es básicamente DevOps con un enfoque consciente de las finanzas se llama FinOps.
Ventajas:
Los desarrolladores tienen todo el poder de AWS
Pequeña sobrecarga burocrática para los desarrolladores.
El equipo financiero tiene control total sobre el gasto en varios aspectos: por proyecto, por equipo, etc.
Los desarrolladores consumen recursos de manera consciente
Contras:
Una vez que piense seriamente en contratar (o hacer crecer su propio) equipo de FinOps, también debe considerar un software de optimización de costos en la nube de terceros, como Infinops. Es su miembro automático del equipo FinOps que trabaja las 24 horas del día, los 7 días de la semana y no es susceptible a errores humanos. Dicho software controla automáticamente su nube en busca de recursos infrautilizados y otras formas conocidas de ahorro, como:
Uso de instancias puntuales
Uso de instancias reservadas
Reducción del número de clústeres de OpenSearch en el entorno de control de calidad
Deshabilitar máquinas virtuales personales para la noche
Apagado automático de costosas máquinas virtuales de SageMaker con Jupyter
etc.
Todos esos consejos vienen automáticamente, ya que su sistema se escanea constantemente en busca de cambios. Y tal asesoramiento puede ahorrarle hasta el 80% de su factura mensual . Esto generalmente significa ahorrar al menos decenas de miles de dólares en el transcurso del año.
Ventajas:
Gran herramienta para el equipo FinOps
Ayuda a FinOps principiantes con técnicas de optimización
Reduce el factor humano
Hace cumplir las revisiones periódicas del consumo de recursos
Hace cumplir las etiquetas, la gestión del ciclo de vida, etc.
Permite rastrear varias cuentas de AWS a la vez
Contras:
En conclusión , me gustaría decir que administrar los costos de AWS puede ser complicado. Los ahorros del 80% de la compañía muestran que es posible gastar menos con los movimientos correctos. Ya sea que esté estableciendo límites en los recursos, obteniendo aprobaciones, utilizando equipos de expertos o herramientas automatizadas, es esencial vigilar de cerca los gastos. Después de todo, el uso de la nube debería tratarse de hacer las cosas más fáciles, no más caras.