В итоге мы получили достаточное количество снимков AWS EC2, в которых AMI был удален, но снимок оставлен гнить. Я хотел бы, чтобы не ручной способ выявления и удаления этих сирот сэкономил нам деньги и пространство.
В идеале я думаю, что bash-скрипт использует CLI , но мой AWS-fu слабый. Я предполагаю, что кто-то делал это раньше, но я не могу найти сценарий, который действительно работает.
В лучшем случае это также проверит тома и очистит их, но это может быть лучше для второго вопроса.
Ответы:
В значительной степени вдохновленный постами в блоге и суть, уже связанная в других ответах, вот мой взгляд на проблему.
Я использовал некоторые запутанные функции JMESpath, чтобы получить список снимков и не требовать
tr
.Отказ от ответственности : Используйте на свой страх и риск , я сделал все возможное, чтобы избежать каких-либо проблем и сохранить нормальные значения по умолчанию, но я не буду брать на себя вину, если это вызовет проблемы для вас.
Надеюсь, сам сценарий достаточно прокомментирован.
При использовании по умолчанию (без параметров) будут перечислены команды удаления потерянных снимков для текущей учетной записи и региона eu-west-1, извлеките:
Вы можете перенаправить этот вывод в файл для просмотра, прежде чем использовать его для выполнения всех команд.
Если вы хотите, чтобы скрипт выполнял команду вместо их печати, замените
print(cmd)
наsystem(cmd)
.Использование как следует со скриптом с именем
snap_cleaner
:для команд сухого хода в регионе us-west-1
для полезных команд в eu-central-1
Третий параметр можно использовать для доступа к другой учетной записи (я предпочитаю переключать роль на другую учетную запись раньше).
Развернутая версия скрипта с awk-скриптом в качестве единого участника:
источник
Я использовал следующий скрипт на GitHub Родрига Коффи (bonclay7), и он работает довольно хорошо.
https://github.com/bonclay7/aws-amicleaner
Команда:
Из публикации блога документации он делает еще несколько вещей:
источник
Вот один скрипт, который может помочь вам найти осиротевшие снимки
( отсюда )
Также вы можете проверить эту статью от serverfault
PS Конечно, вы можете изменить регион, чтобы отразить ваши
PPS Вот обновленный код:
Пример пояснения того, что делает код:
отправить в STDOUT список снимков. эта конструкция:
создайте виртуальный временный обработчик файлов, чтобы
comm
команда читала из двух «файлов» и сравнивала ихисточник
Вот фрагмент кода GitHub Gist именно того, о чем вы просите Даниила Ярославцева.
Он использует список всех изображений и их снимков и сравнивает идентификаторы со списком всех идентификаторов снимков. Все, что осталось - осиротевшие. Код работает по тому же принципу, что и ответ выше, но лучше отформатирован и немного более читабелен.
Код использует JMESPath с
--query Snapshots[*].SnapshotId
опцией (вы также можете использовать утилиту командной строки jp для этого, если она уже есть в вашем дистрибутиве. Форматирует вывод как текст--output text
. Вот ссылка на API-ссылку и несколько примеров. Это немного более элегантный, чем длинная цепочка труб grep / awk / sort / uniq / tr.Предупреждение от Тодда Уолтона : не путайте с утилитой jq, которая использует другой язык запросов для анализа документов json.
источник
Я написал скрипт snapshots.py, который перебирает все снимки (в определенном списке регионов) и генерирует
report.csv
. Этот файл содержит информацию об экземпляре, AMI и томе, на который ссылаются все снимки.Существует также команда для интерактивного удаления висячих снимков.
источник