Blog de Amazon Web Services (AWS)

Administrando la capacidad de entrada/salida de volúmenes EBS de manera programática

Por Leandro Santi, Arquitecto de Soluciones, Sector Público en AWS

 

Una de las principales ventajas de la computación en la nube radica en la posibilidad de ajustar tus recursos de procesamiento dinámicamente, de forma tal de contar con la capacidad adecuada en función de la demanda que imprime el negocio a cada instante. En el momento de desplegar una nueva carga de trabajo, una mala decisión de capacidad de procesamiento puede llevar a un impacto negativo en la performance de la solución y una mala experiencia de usuario cuando la capacidad aprovisionada es menor a la demanda. Por otro lado, el sobre-aprovisionamiento de recursos puede elevar innecesariamente los costos de la solución.

Es por esta razón que el marco de buenas practicas de arquitectura de AWS define un principio de diseño específico para orientar mejor este tipo de decisiones, y de esta manera ayudar a nuestros clientes a tomar mejores decisiones de capacidad.

Algunas cargas de trabajo como pueden ser los sistemas de liquidación de sueldos o sistemas de facturación de empresas de servicios suelen correr bajo regímenes cíclicos de operación, y muchas veces necesitan contar con mayor cantidad de recursos de entrada/salida unos pocos días al mes (dado que estos sistemas muchas veces deben continuar operando regularmente mientras se liquidan los sueldos o se corren los ciclos de facturación para clientes).

En este artículo te mostraré cómo desplegar una herramienta basada en AWS Step Functions y Lambda para poder modificar programáticamente el tipo de tecnología de almacenamiento y cantidad de IOPs de los volúmenes de almacenamiento de instancias EC2, y así poder controlar los recursos de entrada/salida a lo largo del ciclo operativo de este tipo de aplicaciones.

 

Modificaciones de volúmenes EBS

Amazon EBS permite realizar modificaciones tanto en el tipo de volúmen como en la capacidad de entrada/salida del sistema de almacenamiento: para ello, nuestros clientes pueden escoger entre una serie de opciones de tecnologías que difieren en cuanto a tipo, rendimiento, y precio. En líneas generales dos grandes categorías en cuanto a tecnologías de respaldo:

  • Volúmenes respaldados por SSD, optimizados para cargas de trabajo de transacciones que impliquen operaciones de lectura/escritura frecuentes de pequeño tamaño de entrada/salida, en las que el atributo de rendimiento dominante son los IOPS o cantidad de operaciones de entrada/salida por segundo.
  • Volúmenes respaldados por HDD, optimizados para cargas de trabajo de streaming de gran escala, en las que la velocidad de procesamiento (medida en MiB/s) suele ser una medición del rendimiento más representativa que la métrica de IOPS.

Entre las opciones disponibles para volúmenes respaldados por SSD provistos por AWS se encuentran los volúmenes de tipo gp2, recomendados para uso general debido a la combinación combinan precio y rendimiento compatible con una gran variedad de cargas de trabajo.

Por otro lado, los volúmenes de IOPs aprovisionadas como io1 e io2 proveen rendimiento superior para cargas de trabajo de importancia crítica y baja latencia o de alto rendimiento.

Entre las opciones de respaldo por HDD  se encuentran las unidades con velocidad optimizada o st1, diseñadas para cargas de trabajo de uso intensivo a las que se obtiene acceso con frecuencia; y cold HDD o sc1, para aquellas cargas de trabajo que posean una menor frecuencia de acceso.

 

Soporte en EBS para modificar volúmenes

Una característica muy útil que posee Amazon EBS es la capacidad de modificar de manera dinámica el tamaño, rendimiento, y tipo de volumen sin necesidad de desconectar el mismo o introducir interrupción en el servicio.

Usando las solicitudes de modificación de los volúmenes de EBS, podemos incrementar la capacidad de entrada/salida y así contar con capacidad extra durante el período de mayor actividad del mes. Y una vez finalizado el proceso, podemos reducir nuevamente la capacidad y evitar así costos innecesarios en aquellos períodos del ciclo que tengan menor actividad de negocio.

Estos cambios pueden hacerse fácilmente a través de la consola de AWS (y contamos con una publicación en el blog que trata específicamente este tema) pero también es posible automatizar este proceso usando funciones Lambda orquestadas con AWS Step Functions.

 

Operaciones automáticas en volúmenes elásticos

Para facilitar la automatización de las solicitudes de modificación de volúmenes construí una herramienta que permite cambiar dinámicamente el tipo de volumen (*) y la cantidad de IOPs del mismo cuando el tipo en cuestión es io1 ó io2.

Siguiendo las recomendaciones sugeridas para este tipo de modificaciones, la herramienta genera primero una instantánea del volúmen EBS por si más adelante fuera necesario revertir los cambios. A continuación, la herramienta genera una solicitud de modificación del volumen en función de los parámetros solicitados por el usuario:

  1. volume_id para especificar el identificador del volumen EBS a modificar.
  2. instance_id para indicar el identificador de la instancia EC2 asociada a ese volumen.
  3. volume_type, para configurar el tipo de volumen EBS (por ejemplo “gp2”, “io1”, “io2”).
  4. volume_iops para especificar la cantidad de IOPs cuando el tipo sea “io1” ó “io2” (y en los otros casos este parámetro debe ser el string vació, es decir “”).

Estos parámetros son suministrados a la herramienta mediante un archivo JSON que contiene el siguiente formato:

{
    "parameters": {
        "instance_id": "i-09d7ace268bd7f4e4",
        "volume_id": "vol-07189f5751cf87f68",
        "volume_type": "io1",
        "volume_iops": "400"
    }
}

 

Implementación y prueba de la herramienta

Para desplegar la herramienta, es necesario descargar el template de CloudFormation (disponible aquí) y luego dirigirse a la consola de AWS, seleccionar el servicio CloudFormation, y ejecutar el script de esta manera:

 

 

A continuación, CloudFormation va a solicitar un nombre para desplegar el stack de la solución ( por ejemplo RescaleEBSIOPs).

 

 

En el paso 3 (Configure Stack Options) tocamos Next para pasar al paso 4 (Review). Aquí simplemente tenemos que tildar el aviso de creación de recursos de IAM y luego disparar la creación del stack tocando “Create stack”.

 

 

La instrumentación de esta herramienta puede demorar unos 5 minutos aproximadamente. Una vez desplegada la solución, podemos hacer una prueba de la herramienta dirigiéndonos a la consola de Step Functions y seleccionando la máquina de estados recién creada (en mi caso, el nombre que elegí es RescaleEBSIOps).

 

 

Para disparar la prueba, cliqueamos en “Start execution” e ingresamos el archivo JSON con los parámetros que definen la modificación del volumen:

 

 

De esta manera lanzamos la solicitud de modificación automática para nuestro volúmen EBS. Usando la consola de Step Functions, podemos monitorear el avance de este proceso: cuando termine, la consola nos mostrará un detalle del resultado:

 

 

En la vista de volúmenes de la consola de EC2 podemos ver que el cambio haya sido efectivizado:

 

 

Ejecución programada con CloudWatch Events

Podemos automatizar la ejecución de la herramienta usando reglas de CloudWatch events, y de esta manera permitir que nuestras cargas de trabajo cuenten con la capacidad de entrada/salida necesaria en un momento específico de tiempo: para ello, nos dirigimos a la consola de CloudWatch, seleccionamos la opción “Events”, y allí podemos configurar una regla usando expresiones de tipo cron, de esta manera:

 

 

En este caso, hemos configurado el evento de modificación del volumen EBS para las 0 hs de los días 22 de cada mes.

Luego, configuramos el target u objetivo de la regla, de esta manera, usando archive JSON de entrada similar al que mostramos más arriba.

 

 

En la siguiente pantalla (paso 2), sólo tendremos que ingresar un nombre para la ejecución y (optativamente) una descripción. Por último, cliqueamos en “Create rule”.

De manera similar, podemos crear una regla complementaria que permita reducir la capacidad original del volumen EBS una vez finalizado el ciclo de actividad: para ello se debe tener en cuenta la documentación de Amazon EBS en cuanto a los requisitos al modificar volúmenes, y en particular el mínimo de 6 horas de tiempo entre solicitudes de modificación.

 

Validación de la ejecución

Para validar los resultados de las ejecuciones programadas en el paso anterior, podemos dirigirnos a la consola de Step Functions y seleccionar la máquina de estados desplegada en el stack de CloudFormation (RescaleEBSIOPs). Sobre el final de la página tenemos un detalle de las ejecuciones individuales disparadas desde CloudWatch Events:

 

 

En nuestro ejemplo, al duplicar la cantidad de IOPs de la instancia m5.large, usando las métricas de CloudWatch podemos ver el efecto del cambio tanto en la cantidad de IOPs como en la latencia de las operaciones de entrada/salida y el throughput del sistema de almacenamiento:

 

 

Límites

Existen ciertas limitaciones en cuanto a los tipos de modificaciones que pueden realizarse sobre los volúmenes, y la frecuencia con que un dado volúmen puede modificarse. Para más detalle, puedes acceder a los requisitos al modificar volúmenes y límites en la documentación de Amazon EBS.

 

Conclusiones

Usando las modificaciones elásticas de volúmenes EBS puedes contar con la tecnología de almacenamiento apropiada y la capacidad de entrada/salida necesaria para un dado momento en en ciclo de operación de tu organización.

Esta característica puede ser muy útil para cargas de trabajo como por ejemplo sistemas de liquidación de sueldos o sistemas de facturación de empresas de servicios, ya que muchas veces estas aplicaciones corren bajo regímenes cíclicos de operación, necesitando una mayor cantidad de recursos de entrada/salida unos pocos días al mes para satisfacer la demanda de procesamiento.

Estas capacidades permiten que clientes de AWS puedan realizar modificaciones en sus volúmenes, y de esa manera contar con la capacidad de entrada/salida necesaria y así evitar pagar demás por sus recursos sin que ello impacte en la experiencia que sus propios usuarios tengan al acceder a estos sistemas.

Para aprender sobre determinados casos especiales y algunas limitaciones en cuanto a tipos de instancias, puedes leer las consideraciones de rendimiento de volúmenes de Amazon EBS en instancias de Linux y el documento de cuotas y puntos de enlace para Amazon Elastic Block Store.

 

(*) Para mayor detalle sobre los tipos de volúmenes , casos de uso recomendados y características de rendimiento de los mismos, puedes consultar en la documentación de Amazon EBS siguiendo este enlace.