GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Script para cambiar automáticamente todos los volúmenes gp2 a gp3 con aws-cli

No hay comentarios

El pasado diciembre Amazon anunció sus nuevos volúmenes EBS gp3, los cuales ofrecen mejores prestaciones y un ahorro en el coste del 20% respecto a los que se venían utilizando hasta ahora, los gp2. Pues bien, tras probar satisfactoriamente estos nuevos volúmenes en varios clientes, no puedo hacer otra cosa más que recomendar su utilización, pues son todo ventajas y en estos 2 meses y medio que han transcurrido desde el anuncio no he apreciado ningún problema ni efecto secundario.

Hacer el cambio es tremendamente sencillo, tan sólo hay que seleccionar un volumen desde la consola de AWS y cambiar su tipo así:

Sin embargo, hacerlo de esta manera cuando se dispone de múltiples clientes que pueden tener cientos o miles de estos volúmenes, hace que esto se convierta en una tediosa tarea que nos llevará mucho tiempo y que además será propensa a cometer errores, pues podemos seleccionar un volumen que no era gp2 sin querer, o cambiarlo a otro tipo que no es el gp3 esperado. Y una vez que nos hemos equivocado, el volumen permanece en estado «modifying» bastante tiempo y luego en estado «optimizing» más tiempo todavía, lo cual nos obligará a pasar a otra cosa y luego acordarnos de revisar todos los volúmenes y corregir aquellos en los que nos hayamos equivocado.

Para evitar estos problemas cuando tenemos una gran cantidad de volúmenes EBS, he escrito un sencillísimo script en bash que automatiza completamente la tarea, con lo cual nos ahorrará un montón de tiempo y de tedio y nos protegerá a su vez de cometer errores:

#! /bin/bash

region='us-east-1'

# Find all gp2 volumes within the given region
volume_ids=$(/usr/bin/aws ec2 describe-volumes --region "${region}" --filters Name=volume-type,Values=gp2 | jq -r '.Volumes[].VolumeId')

# Iterate all gp2 volumes and change its type to gp3
for volume_id in ${volume_ids};do
    result=$(/usr/bin/aws ec2 modify-volume --region "${region}" --volume-type=gp3 --volume-id "${volume_id}" | jq '.VolumeModification.ModificationState' | sed 's/"//g')
    if [ $? -eq 0 ] && [ "${result}" == "modifying" ];then
        echo "OK: volume ${volume_id} changed to state 'modifying'"
    else
        echo "ERROR: couldn't change volume ${volume_id} type to gp3!"
    fi
done

El único requisito es disponer de la herramienta jq para manejar mejor el JSON que devuelve el comando aws. La podemos instalar ejecutando simplemente un apt install jq o yum install jq, pues viene incluida en los repositorios de todas las distribuciones Linux.

Hay que tener en cuenta que este script hará que se establezcan los valores por defecto para los parámetros IOPS (3000) y Throughput (125 MB/s), pero como éstos superan ampliamente las prestaciones que ofrecían los volúmenes gp2, no habrá ningún problema.

Ni que decir tiene que este mismo script se puede usar para cambiar masivamente volúmenes EBS de otros tipos, como io1, io2, sc1, st1, etc.

¡Espero que os ayude a ahorrar tiempo y quebraderos de cabeza!



 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, DevOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielScript para cambiar automáticamente todos los volúmenes gp2 a gp3 con aws-cli

Artículos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *