Узнайте, как определить неиспользуемые тома EBS и как удалить их с помощью скрипта Python

Если вы какое-то время использовали AWS EC2, возможно, вы также использовали тома EBS для своего инстанса EC2.

Но из-за многократного создания и завершения инстансов EC2 некоторые тома EBS, которые были присоединены к этим инстансам, которые были прерваны, все еще остаются там. Эти тома не служат никакой цели и требуют затрат. В этой статье мы увидим, как можно сэкономить деньги, выявляя и удаляя неиспользуемые тома. Этот материал можно разделить на следующие подтемы:

  1. Подготовить предпосылки для скрипта Python
  2. Выясните неиспользуемые тома EBS
  3. Эффективное удаление неиспользуемых томов EBS

Давайте рассмотрим их один за другим.

Подготовьте предварительные условия для скрипта Python

Для скрипта Python мы будем использовать библиотеку AWS boto3 и библиотеку python-dotenv для загрузки переменных среды. Поэтому, пожалуйста, установите эти две библиотеки, прежде чем продолжить.

Теперь давайте создадим каталог с именем delete-unused-ebs-volumes, где у нас будут файлы сценариев и среды.

mkdir delete-unused-ebs-volumes
cd delete-unused-ebs-volumes

Внутри этого каталога создадим файл среды с именем .env со следующим содержимым:

#aws credentials
AWS_ACCESS_KEY_ID = <your access key>
AWS_SECRET_ACCESS_KEY = <your secret key>
AWS_REGION = <your region>

Теперь мы готовы перейти к следующему шагу.

2. Определите неиспользованные тома EBS

Давайте сначала создадим файл Python с именем delete_unused_ebs_volumes.py в каталоге, который мы создали ранее.

И добавим туда следующие строки:

Здесь мы просто импортировали необходимые библиотеки, загрузили переменную среды с помощью dotenv.load_dotenv() (которая по умолчанию принимает файл .env, который мы создали) и, наконец, создали клиент ec2, который нам понадобится в дальнейшем.

Теперь мы можем начать копаться в томах EBS и выяснить, какие из них используются, а какие нет. Добавим следующий код:

Во-первых, мы создали список volumes_to_delete, в котором будем хранить идентификаторы неиспользуемых томов. Затем мы вызвали describe_volumes() метод клиента, который вернет список всех томов с их подробностями в данном регионе.

Я добавил дополнительное ведение журнала для визуализации деталей списка томов, но основная концепция определения неиспользуемого тома такова: если прикрепленный список данного тома пуст - это означает, что он не прикреплен к какому-либо экземпляру, и состояние тома available - тогда этот конкретный том не используется и, следовательно, может быть добавлен в список volumes_to_delete.

Теперь у нас есть список неиспользуемых идентификаторов томов. Перейдем к следующему шагу: удалению.

3. Эффективное удаление неиспользуемых томов EBS

Теперь мы переберем идентификаторы томов в списке volumes_to_delete и выполним удаление, используя delete_volume() метод клиента.

Мы также будем использовать waiters, чтобы убедиться, что удаление успешно завершено.

Давайте добавим еще код:

Полный сценарий и другие связанные файлы можно найти в этом репозитории GitHub.

Мы можем запустить этот скрипт как задание cron или запланированное задание через некоторый интервал и сэкономить деньги.

Думаю, мы подошли к концу этого фрагмента. Спасибо за чтение, комментарии и предложения всегда приветствуются.