Таким образом, команда для удаления моментального снимка AWS с использованием SnapshotID приведена ниже.
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0
У меня есть список из 400 идентификаторов моментальных снимков, которые необходимо удалить. Какую команду я должен использовать для их массового удаления с помощью SnapshotID.
**PS: Ни один из снимков не помечен.
получить список снимков и передать его во что-то и проверить, можете ли вы перебрать файл. Или скопируйте снимки в редактор, войдите в режим выбора столбца и вставьте команду aws впереди, или замените каждый разрыв ссылки командой aws и т. д. Есть миллион ответов, которые нужно получить, вам просто нужно найти тот, который вам больше всего нравится. знаком с.
что-то вроде этого может работать: ec2-describe-snapshots | grep SNAPSHOT | sort -k 5 | head -200 | awk '{print "Deleting-> " $2; system("ec2-delete-snapshot " $2)}'
CLI и формат вывода по умолчанию, возможно, изменились? Мой опыт: * Пришлось использовать aws ec2 describe-snapshots
в качестве первой команды. * Пришлось добавить опцию --snapshot-id
к команде удаления. * Приходилось настраивать вывод текста с помощью команды aws config
или опции --output
. * Все еще были некоторые проблемы с столбцом сортировки и столбцом печати. * Вместо того, чтобы бороться с разделителями полей и количеством столбцов, может быть проще использовать вывод JSON или YAML и выполнять итерацию с помощью Python.
Вот решение, которое может показаться глупым, но очень эффективным...
Обычно я создаю электронную таблицу Excel со списком идентификаторов в первом столбце.
Затем я создаю второй столбец с формулой, содержащей полную команду, со ссылкой на первый столбец, который вставляет идентификатор в соответствующее место. Затем я копирую формулу для всех строк.
Чтобы проверить формулу, я копирую первую строку и вставляю ее в свою оболочку, чтобы убедиться, что она работает должным образом.
Затем я вставляю все строки, сгенерированные формулой, в текстовый файл, а затем запускаю текстовый файл в оболочке. Он будет работать быстрее, если вы сделаете это из инстанса Amazon EC2, так как это уменьшит задержку в сети, но запуск с вашего собственного компьютера будет работать так же хорошо. Просто сходите за чашечкой кофе.
Если мысль об использовании Excel вызывает у вас отвращение, вы можете написать простой скрипт на Python, который выполняет итерацию по списку и вызывает команду delete_snapshot().
Именно этому я следовал, используя скрипт bash. Пришлось немного подправить, потому что некоторые снимки находятся в другом регионе. Но это решение сработало как шарм.
@John Rotenstein, не могли бы вы поделиться формулой Excel для этого?
@Maciej Если идентификатор находится в первом столбце, это будет просто = "aws ec2 delete-snapshot --snapshot-id "&a1
Протестировано на следующей версии/системе:
% aws --version
aws-cli/2.2.26 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off
Подождите... он усекает идентификаторы моментальных снимков, поэтому удаление не удается. (?!)
Черт. Я вернусь к этому через некоторое время. :-(
Команда:
% aws ec2 describe-snapshots | grep SNAPSHOT | sort -k 6 | head -20 \
| awk '{print "Deleting-> " $4,$6,$8,$9,$10; \
system("aws ec2 delete-snapshot --snapshot-id " $8)}'
Выход:
Deleting-> image.vmdk 099720109477 snap-005349429a002f03b 2019-05-08T11:09:45.481000+00:00 completed
Deleting-> image.vmdk 099720109477 snap-00ea72d226a56a8cf 2019-05-29T16:27:54.246000+00:00 completed
:
Примечания:
Поля изменены по сравнению с теми, которые были даны предыдущим комментатором.
Спасибо за идеи в этой ветке форума AWS.
Примечание. Это приведет к удалению всех моментальных снимков из вашего региона, настроенных в AWS CLI. используйте эту команду, чтобы сохранить все идентификаторы моментальных снимков в файле sgn.txt.
Команда:
aws ec2 description-snapshots --owner-id self --query 'Snapshots[].SnapshotId' > sgn.txt
[
"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455"
]
уберите скобки и сделайте так, чтобы файл выглядел так, и добавьте ',' к последнему идентификатору
"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455",
теперь используйте приведенный ниже код Python, чтобы удалить все снимки
код:
import boto3
client = boto3.client('ec2',region_name='us-east-1')
file=open('sgn.txt','r')
l=file.readlines()
for i in l:
s=i.strip()
s=s[1:len(s)-2]
client.delete_snapshot(SnapshotId=s)
print(s,"deleted")
Примечание:- вы должны настроить aws cli для запуска этого файла python, а также вам необходимо установить модуль boto3 в python
# Удалить все снимки в регионе us-west-2:
for K in $(aws ec2 --region us-west-2 describe-snapshots --owner-ids=${AWS_OWNER_ID} --query 'Snapshots[*].SnapshotId' --output=text); do
aws ec2 --region us-west-2 delete-snapshot --snapshot-id $K
done
Вы можете просто сделать --owner-ids self
, чтобы получить список моментальных снимков, принадлежащих текущей учетной записи AWS.
Использование ответа @Lock-o-motiffe
Если вы пытаетесь выполнить поиск по описанию или фильтровать по каким-либо другим параметрам, например по тегам, а также у вас есть aws sso, сначала выполните
aws ec2 describe-snapshots --region us-west-2 --owner-ids self --profile <your-profile> --filters '{"Name":"description","Values":["Created by CreateImage(*) for *"]}' --query 'Snapshots[*].SnapshotId' --output=text --max-items 5
Затем сделайте следующее и удалите флаг --max-items:
for K in $(aws ec2 describe-snapshots --region us-west-2 --owner-ids self --profile <your-profile> --filters '{"Name":"description","Values":["Created by CreateImage(*) for *"]}' --query 'Snapshots[*].SnapshotId' --output=text); do
aws ec2 delete-snapshot --region us-west-2 --profile <your-profile> --snapshot-id $K
done
Имя может быть любым из перечисленных в параметрах фильтра здесь https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html, например, архитектура, имя, тег , и т. д.
вы не можете, так как на данный момент нет команды сделать это.