Uno de los temas que hay que tener siempre presentes para controlar los costes en AWS so los recursos abandonados. Es sencillo, cuando tienes una capacidad virtualmente ilimitada, dejar instancias EC2 encendidas o apagadas y olvidarse de ellas. Eso al final del mes repercute en la factura. Cuando tienes cientos o miles de instancias EC2, hay que controlar bien los recursos que no se utilizan. Hoy vamos a ver como localizar volumenes sin uso en AWS.

Esta es la primera de una serie de entradas sobre EC2 en las que ire poniendo cosas que me son utiles para trabajar en el día a día con AWS.

Listar los volumenes sin uso en AWS (modo sencillo)

Si tenemos un entorno pequeño, podemos usar la consola e ir a Servicios > EC2 > Volumes. Ahi, en el apartado de búsqueda, especificaremos el filtro “State: Available”

volumenes sin uso en aws

Listar los volumenes sin uso en AWS usando aws cli

Ahora bien, si manejamos de forma habitual una infraestructura AWS, es más que probable que usemos aws cli. Para encontrar los volumenes sin uso con aws cli usaremos la siguiente línea de comandos:

aws ec2 describe-volumes --filters Name=status,Values=available --region NOMBRE-REGION

Recuerda poner en NOMBRE-REGION una de las regiones de AWS. no es necesario indicar la zona de disponibilidad (la letra después de la región).

Buscar volumenes sin uso en AWS en varias cuentas y regiones

Esta es la que en mi caso me resulta más útil. Yo tengo el archivo de configuración de AWS CLI definiendo los perfiles con el identificador númerico de la cuenta. Por ejemplo:

[profile 123456789012] 
role_arn = arn:aws:iam::123456789012:role/SuperadminFederado
source_profile = default
region = eu-west-1

Con el siguiente oneliner, recorro todas las cuentas definidas en ~/.aws/config y pido los volúmenes disponibles en cada región de esa cuenta. Con esto sacamos todos los discos sin utilizar de nuestra infraestructura AWS EC2.

for cuenta in $(grep -E ‘profile [0-9]{12}’ config |awk -F'[ \\]]’ ‘{print $2}’); do for region in us-east-2 us-east-1 us-west-1 us-west-2 ap-northeast-1 ap-northeast-2 ap-south-1 ap-southeast-1 ap-southeast-2 ca-central-1 eu-central-1 eu-west-1 eu-west-2 eu-west-3; do echo “Cuenta: $cuenta – Region: $region”; aws ec2 describe-volumes –filters Name=status,Values=available –profile $cuenta –region $region; done; done