Saltar al contenido
Home » Blog » Optimización de costos en AWS Cloud

Optimización de costos en AWS Cloud

Optimización de costos en AWS Cloud

Fecha /

Por /

La optimización de costos es uno de los 5 pilares del marco de buenas prácticas de arquitectura en AWS.

La variedad de servicios y opciones de precios de AWS ofrecen la flexibilidad para gestionar eficazmente tus costos y mantener el rendimiento y la capacidad que se necesite. 

AWS, a través de BigCheese, ayudan a los clientes a lograr el mayor rendimiento de los servicios AWS por el menor costo. Estas son las certificaciones de BigCheese y su equipo:

AWS Cloud

A continuación, y ampliando lo expuesto sobre este tema en nuestro blog, les describimos las 5 acciones que deberías hacer para optimizar los costos del uso de los servicios AWS. Estas prácticas las puedes implementar con tu equipo de TI o puedes apoyarte en la experiencia de BigCheese para comenzar a transitar este camino.

Optimización de costos en AWS:

Objetivos, al finalizar de leer este documento queremos que:

  • Sepas las acciones a gran escala que debes tener en cuenta para optimizar los costos de uso de AWS. 
  • Sepas qué acciones tienes que seguir para optimizar el rendimiento de tu infraestructura AWS. 
  • Puedes indicarle a tu equipo qué cuidados tener. O puedes contratar a alguien que lo haga con la seguridad de conocer el alcance. 
  • Puedas armar tu “Plan de optimización de costos”. BigCheese puede ayudarte en este punto ya sea en la definición o implementación, BigCheese te entregará un roadmap armado en conjunto de cuáles pudieran ser los siguientes pasos para que optimices los costos en tu cuenta de AWS. El objetivo es que entiendas ese roadmap y la importancia de cada paso. Una vez realizada la consultoría, te entregamos el know how para continuar aplicando lo aprendido de forma constante para crear un proceso de mejora continua al resto de los productos y áreas de la empresa.
  • Que conozcas a BigCheese como expertos y partners estratégicos de AWS en Uruguay.

La capacidad debe coincidir con la demanda

Uno de los principales beneficios de utilizar los servicios de AWS es poder hacer uso de los servicios en forma elástica y así crear una optimización de costos en AWS.

En caso de que ya estén utilizando servicios en forma no optimizada, el primer paso es Identificar el desperdicio de recursos, lo que nos implicará remover infraestructura en desuso para poder pasar a un plan de uso elástico de los recursos.

A continuación describimos las acciones concretas a tomar para detectar oportunidades de optimización de costos para los servicios mayormente utilizados.

Identificar las instancias de Amazon EC2 con bajo uso y reducir el costo deteniendo o reduciendo el tamaño te ayudará a la optimización de costos en AWS .

Recomendamos utilizar la herramienta de optimización AWS Cost Explorer Resource Optimization, para hacer un informe de las instancias EC2 que están inactivas o tienen baja utilización. Se puede reducir los costos deteniendo o reduciendo el tamaño de estas instancias que están sobre-dimensionadas. 

Es posible automatizar el proceso de detener las instancias inactivas utilizando AWS Instance Scheduler, por ejemplo para apagar instancias que no se utilizan fuera del horario de oficina, o durante los fines de semana (ahorrando hasta un 68%).

También es posible automatizar el cambio de tamaño de las instancias de EC2 usando AWS Operations Conductor.

Otra alternativa interesante es utilizar los EC2 Autoscaling groups para iniciar o apagar instancias según los picos de carga que tenga tu aplicación, logrando tener menos servidores ociosos durante los períodos de poco uso, y a su vez permitiendo escalar para soportar las ráfagas de tráfico altas que tenga tu negocio, sin perder performance y optimizando los costos.

Identificar las instancias de Amazon RDS, Amazon Redshift con baja utilización y reducir los costos

Desde el Trusted Advisor Amazon podemos ejecutar la comprobación de instancias de base de datos inactivas de RDS, para identificar las instancias de base de datos que no ha tenido alguna conexión durante los últimos 7 días. 

Para reducir estos costos asociados a las inactividades, es posible detener estas instancias en forma automatizada, lo cual está explicado paso a paso por el blog de AWS en esta publicación

Para Redshift, usar el reporte de clústeres de Redshift infrautilizados de Trusted Advisor, para identificar los clústeres que no han tenido conexiones durante los últimos 7 días, y menos del 5% del clúster uso de CPU promedio amplio durante el 99% de los últimos 7 días. 

Para reducir los costos, podemos pausar estos clústeres en forma automatizada con el paso a paso explicado en este blog

Analizar el uso de Amazon DynamoDB y reducir los costos aprovechando los modos autoscaling y on-demand.

Primero debemos analizar el uso de DynamoDB supervisando 2 métricas en Cloudwatch: ConsumedReadCapacityUnits y ConsumedWriteCapacityUnits.

Después, podemos escalar automáticamente las tablas DynamoDB configurando la función AutoScaling, siguiendo los pasos que aquí se explican

Otra alternativa es utilizar la opción bajo demanda. Esta opción te permite pagar solo por lo que se usa, sin necesidad de aprovisionar recursos. Obviamente, el costo del cómputo on-demand es un poco más caro que con ProvisionedCapacity, pero para determinadas carga de trabajo puntuales es una opción viable.

Analiza el uso de  los volúmenes de Amazon EBS.

  • Los volúmenes de EBS que tienen una actividad muy baja (menos de 1 IOPS por día) durante un período de 7 días indican que probablemente no estén en uso. Identifica estos volúmenes con Trusted Advisor Underutilized Amazon EBS Volumes Check
  • Para reducir los costos, primero hay que hacer un snapshot del volumen (en caso de que lo necesite más adelante), luego eliminar estos volúmenes. Se puede automatizar la creación de instantáneas utilizando Amazon Data Lifecycle Manager. Siga estos pasos para eliminar volúmenes de EBS.

Analiza el uso de Amazon S3 y reduce los costos aprovechando almacenamiento de menor costo.

  • Para analizar los patrones de acceso al almacenamiento en el conjunto de datos del objeto durante 30 días o más hay que utilizar S3 Analytics. De esta manera obtendrás recomendaciones sobre dónde puedes aprovechar S3 con acceso infrecuente (S3 IA) para reducir costos. 
  • Podemos automatizar el traslado de estos objetos a un nivel de almacenamiento de menor costo mediante las políticas de ciclo de vida. 
  • Alternativamente, también puedes utilizar S3 Intelligent-Tiering, que analiza y mueve automáticamente sus objetos al nivel de almacenamiento apropiado.

Revisa las redes y reduce los costos eliminando los balanceadores de carga inactivos.

  • Utiliza (Load Balancers check) para la verificación de los balanceadores de carga inactiva de Trusted Advisor y así obtener un informe de los balanceadores de carga que tienen RequestCount de menos de 100 durante los últimos 7 días. 
  • Luego, sigue estos pasos para eliminar estos balanceadores de carga y reducir los costos. 
  • Además, también puedes seguir estos pasos para revisar tus costos de transferencia de datos utilizando Cost Explorer.

Mantén tus instancias en la última generación

Cada nueva generación de instancias que AWS disponibiliza tienden a mejorar su eficiencia y además bajar los costos. Por ejemplo, una instancia t3.medium tiene mejor performance y cuesta menos que una t2.medium (AWS asegura que T3 mejora en un 30% la relación precio-perfomance en comparación con instancias T2). Entonces, actualizar tus instancias a la última generación te dará más valor por tu dinero.

Elegir el modelo de precios según tus necesidades para la optimización de costos en AWS.

AWS nos permite usar las instancias reservadas (RI) para reducir costos de Amazon RDS, Amazon Redshift, Amazon ElastiCache y Amazon Elasticsearch.

Para ciertos servicios como Amazon EC2 o Amazon RDS, podemos comprometernos al uso reservando capacidad por tiempos determinados (1 o 3 años). 

Si bien no requiere el pago por adelantado (es una opción), lo que hacemos es comprometernos a pagar por cierto servicio durante un tiempo fijo. Por ejemplo, vamos a reservar una instancia EC2 t3.medium linux por un año, y no importa el uso que le demos (incluso podemos apagar una y crear otra igual), el hecho es que esa instancia se descontará del costo on-demand de nuestra factura, y la pagaremos a un precio diferenciado (como RI en la misma factura) durante 12 meses.

Con instancias reservadas (Reserved Instances), podemos lograr la optimización de costos en AWS hasta un 72% sobre la capacidad on-demand equivalente. 

Reserved Instances está disponibles en 3 opciones: 

  • Pagando todo por adelantado (AURI), 
  • Haciendo un pago parcial por adelantado (PURI
  • Sin pagar nada por adelantado (NURI). 

Obviamente, a mayor adelanto de pago, mayor el descuento.

Utiliza las sugerencias proporcionadas en las recomendaciones de compra de instancias reservadas de AWS Cost Explorer, que se basa en el uso on-demand de los servicios Amazon EC2, Amazon RDS, Amazon Redshift, Amazon ElastiCache y Amazon Elasticsearch.

En cualquiera de los casos, BigCheese sugiere pasar a un esquema de instancias reservadas luego de que la carga de trabajo está estabilizada sobre la infraestructura definida.

En caso de pensar en reservas de largo plazo (3 años) sugerimos analizar la opción de instancias convertibles.. 3 años es mucho tiempo en tecnología y podríamos estar perdiendo la posibilidad de hacer uso de nuevas instancias incluso a un mejor precio en algún momento de este período. 

Analiza la factura de servicios de AWS en forma periódica

AWS nos provee de varias herramientas para analizar el consumo de los servicios que estamos utilizando y así entender qué es lo que estamos pagando.

BigCheese sugiere sistematizar el análisis de la factura de AWS para encontrar oportunidades de optimización de costos en AWS. En forma específica, te proponemos que sigas los siguientes pasos:

  • Analiza el “Cost and Usage” report para ver si hay servicios candidatos a ser redimensionados.
  • Trusted Advisor ayudará a encontrar servicios no utilizados.
  • Crea planes de presupuesto para monitorizar cambios en la facturación.
  • Comparte la información del billing con los diferentes equipos/secciones de tu empresa que hagan uso de servicios en AWS. Involúcralos en el “cost optimization” plan.

Moderniza tus aplicaciones

Este apartado es todo un tema en sí, que probablemente amerite su propio whitepaper.

A modo de resumen, consideremos que muchos de nuestros sistemas fueron concebidos en contextos diferentes y eventualmente no fueron “pensados” para utilizar la nube como servicio. 

Algunos de los puntos involucrados en el análisis de modernización de sistemas son:

Licenciamiento

A veces utilizamos determinados sistemas que requieren licenciamiento, sin que tengamos restricciones concretas para operar con dichas opciones. Para el caso particular de bases de datos AWS nos ayuda en la ejecución de la migración mediante AWS Migration Service.

Evaluar la posibilidad de prescindir de licenciamiento cuando no es estrictamente requerido nos puede generar una importante disponibilidad de recursos.

Arquitecturas Serverless

Migrar todo un sistema monolítico a arquitectura serverless o microservicios puede ser muy costoso y eventualmente implica muchos riesgos. Pero hay estrategias menos traumáticas y que pueden generar beneficios concretos tanto en performance como en costos.

Tal vez podemos desacoplar parte de nuestros sistemas, pensando en aquellas funcionalidades que generan mayor demanda de recursos o son las que se transforman en el cuello de botella cuando compiten por recursos de nuestros servidores. 

Es cada vez más común ver arquitecturas más tradicionales o monolíticas que hacen uso de funciones Lambda y Dynamo DB mediante integración de estos servicios a las soluciones actuales, generando así arquitecturas híbridas que mantienen la confianza de los sistemas que ya están funcionando y mejoran el hecho de requerir determinada infraestructura, en general sobredimensionada para atender cargas de trabajo puntuales o funcionalidades particulares.

Considerar uso de Aurora

Aurora es la base de datos relacional de AWS, compatible con MySQL y PostgreSQL. Es hasta cinco veces más rápida que las bases de datos de MySQL estándar y tres veces más rápida que las bases de datos de PostgreSQL estándar y ofrece la seguridad, disponibilidad y fiabilidad de las bases de datos de nivel comercial por una décima parte del costo.

En caso de no tener requerimientos específicos sobre MySQL o PostgreSQL, Aurora puede convertirse en una opción que nos brinde mayor rendimiento por menor costo, sin requerir mayores adaptaciones técnicas de nuestros sistemas.

Optimización de costos AWS

Resumen para obtener lo máximo de tus recursos actuales de AWS Cloud:

En resumen, muchas veces podemos obtener un poco más por lo que ya estamos pagando, o pagar un poco menos por el mismo servicio/uso.

Hay muchos puntos para atacar cuando de optimización de costos se trata. BigCheese sugiere que se analicen los costos por tipos de servicio utilizados en AWS y aplicar Paretto para, en primera instancia, ejecutar alguna de las estrategias planteadas a los consumos más significativos.

En forma de bullets, va nuestro resumen de acciones concretas que se pueden ejecutar con poco esfuerzo y sirvan para dar los primeros pasos en optimización de costos:

  • Crea S3 lifecycle policies para mover archivos que no se acceden frecuentemente a un almacenamiento “cold-storage”.
  • Usa Reserved Instances siempre que sea posible (cuando hace ya algún tiempo que estás pagando por la misma instancia on-demand).
  • Dimensiona tus servidores según la demanda actual y no sobredimensiones. Siempre podrás ajustar en forma automática cuando necesites más poder.
  • Crea calendarios para apagar/encender servidores que no utilizas fuera del horario de oficina (por ejemplo los servidores de testing!).
  • Entrega tu contenido estático a través de un CDN y no directo desde su fuente. Imágenes, estilos, y sitios estáticos son buenos candidatos para bajar el cómputo utilizado.
  • Siempre que sea posible deberíamos elegir el escalado horizontal. Tener menos servidores pero más grandes, generalmente entrega menos performance (y cuesta más caro) que tener más servidores más chicos.
  • Actualizar a la última generación de instancias AWS, siempre que sea posible.
  • No dejes de analizar tu factura de AWS.
  • Cuando hayas realizado estos pasos, ¡vuelve a empezar!

Noticias relacionadas