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

Если вы какое-то время использовали AWS EC2, возможно, вы также использовали тома EBS для своего инстанса EC2.
Но из-за многократного создания и завершения инстансов EC2 некоторые тома EBS, которые были присоединены к этим инстансам, которые были прерваны, все еще остаются там. Эти тома не служат никакой цели и требуют затрат. В этой статье мы увидим, как можно сэкономить деньги, выявляя и удаляя неиспользуемые тома. Этот материал можно разделить на следующие подтемы:
- Подготовить предпосылки для скрипта Python
- Выясните неиспользуемые тома EBS
- Эффективное удаление неиспользуемых томов 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 или запланированное задание через некоторый интервал и сэкономить деньги.
Думаю, мы подошли к концу этого фрагмента. Спасибо за чтение, комментарии и предложения всегда приветствуются.