Eliminar volúmenes EBS (Elastic Block Storage) no utilizados en AWS mediante una función Lambda

Amazon Elastic Block Store (EBS) es un servicio de almacenamiento en bloque de alto rendimiento y fácil de usar. Es como un disco externo que se puede adjuntar a una Instancia EC2 y utilizarlo para almacenar nuestros datos en ella. Si los volúmenes EBS no están en uso y no se necesitan y siguen disponibles en la cuenta, entonces AWS te cobrará por ellos innecesariamente. Para ahorrar costes, veremos la función Lambda que puede utilizarse para encontrar y eliminar esos Volúmenes EBS no utilizados.

Requisitos previos

  1. Cuenta de AWS (Crea si no tienes una).
  2. Conocimiento básico de la Instancia EC2, haz clicaquí para saber más sobre la Instancia EC2.
  3. Conocimiento básicode Lambda, haz clicaquí para saber más sobre las Funciones Lambda.

¿Qué vamos a hacer?

  1. Iniciar sesión en AWS.
  2. Crea una Función Lambda para eliminar los Volúmenes EBS no utilizados.

Inicia sesión en AWS

  1. Haz clic en aquí para ir a la página de inicio de sesión de AWS.

Cuando pulsemos el enlace anterior, veremos una página web como la siguiente en la que se nos pide que iniciemos sesión con nuestros datos de acceso.

Una vez que iniciemos sesión en AWS con éxito, veremos la consola principal con todos los servicios listados.

Crea una Función Lambda para eliminar los Volúmenes EBS no utilizados.

Haz clic en «Servicios» en la parte superior izquierda, busca «EC2» y ve al panel principal de EC2.

En el panel principal de EC2, desplázate hacia abajo y haz clic en «Volúmenes» en «Elastic Block Almacenamiento«.

Aquí verás todos los Volúmenes EBS que tienes en la región seleccionada. Los volúmenes con el estado «disponible» son volúmenes no utilizados y no están unidos a ninguna de las Instancias de EC2. Estos volúmenes son seguros de eliminar si no tienen datos importantes o no tienen datos en ellos.

Los volúmenes se pueden eliminar desde esta consola, pero si hay 100s-1000s de sin usarvolúmenes, es mejor tener algún tipo de automatización.

Para automatizar el proceso de eliminación de volúmenes no utilizados podemos utilizar «Lambda Functions». Haz clic en «Servicios» en la parte superior izquierda de la pantalla y busca «Lambda».

En el panel principal de Lambda, haz clic en «Crear función».

Crea una función con «Author from Scratch», dale un nombre a la función que vas a crear y elige el Runtime. Aquí vamos a ver una Función Lambda con Runtime de Python para automatizar el proceso de eliminación de los Volúmenes EBS no utilizados. Haz clic en «Crear función» para seguir adelante.

Verás la siguiente pantalla con el código de la función de ejemplo.

Utiliza el siguiente código para eliminar los Volúmenes EBS no utilizados. Elimina el código de función existente y pega el siguiente código en el cuadro de código de función. Si no quieres eliminar los Volúmenes EBS específicos no utilizados, etiquétalos como «Nombre: DND». El siguiente código no eliminará dichos volúmenes.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
def lambda_handler(event, context):
    for vol in ec2.volumes.all():
        if  vol.state=='available':
            if vol.tags is None:
                vid=vol.id
                v=ec2.Volume(vol.id)
                v.delete()
                print ('Deleted ' +vid)
                continue
            for tag in vol.tags:
                if tag['Key'] == 'Name':
                    value=tag['Value']
                    if value != 'DND' and vol.state=='available':
                        vid=vol.id
                        v=ec2.Volume(vol.id)
                        v.delete()
                        print ('Deleted ' +vid)

O puedes especificar la lista de Volúmenes EBS no utilizados que deben ser eliminados.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
volume_ids = ['vol-029af2107c0a0807d', ‘vol-029af2107c0a08123’]
def lambda_handler(event, context):
    for volid in volume_ids:
        vid=volid
        v=ec2.Volume(vid)
        v.delete()
        print ('Deleted ' +vid)

Guarda la función haciendo clic en el botón Guardar.

Antes de ejecutar/probar el código, necesitamos crear un evento. Crearemos un evento sencillo. Para crear un evento, haz clic en «Seleccionar un evento de prueba» – > Configurar evento de prueba.

En la siguiente pantalla, ponle un nombre al evento y mantén la plantilla del evento como está y haz clic en «Crear».

Una vez que el código y el evento están listos, lo último que queda antes de probar o ejecutar la función es asignar las políticas necesarias a la Función Lambda. Para asignar la política necesaria, desplázate hacia abajo y haz clic en «Ver el rol delete-unused-ebs-volumes-role-ruemgr4x» y ábrelo en la nueva ventana.

Haz clic en «Adjuntar política» para adjuntar la política requerida a este rol de IAM.

Busca EC2 y adjunta la política «AmazonEC2FullAccess». Esta política dará acceso completo a la Función Lambda en las Instancias EC2.

Ahora, estamos listos para ejecutar la Función. Haz clic en «Probar».

Una vez ejecutada la función, podrás ver los registros en Resultado de la ejecución.

Puedes confirmar si el volumen EBS no utilizado se ha eliminado o no yendo al panel principal de la instancia EC2.

Aquí, como ves, el Volumen EBS no utilizado ya no está disponible en la consola, lo que significa que ha sido eliminado con éxito por la Función Lambda.

Conclusión

En este artículo hemos visto cómo escribir una Función Lambda para eliminar los Volúmenes EBS no utilizados. Esto puede ayudarnos a ahorrar algún coste extra en la cuenta de AWS.

También te podría gustar...