Я знаю что команда ec2-create-image instance-id
будет создавать образ экземпляра ec2, создавать файл моментальных снимков и регистрироваться как AMI. Но что представляет собой эквивалентная команда для удаления изображения, которая удаляет связанные файлы снимков и отменяет регистрацию AMI?
Обновленный ответ из документов aws:
Надеюсь, это поможет кому-то вроде меня! : D
Есть обычно 4 шага к тому, что вы ищете:
ec2-deregister
ec2-delete-bundle
(для S3) или ec2-delete-snapshot
(для EBS).Помните, что снимки и изображения независимы. Вы можете создать том EBS из моментального снимка и использовать его как дополнительный диск, а не как загрузочный. Более того (в случае экземпляров Linux) можно создать новый образ из существующего снимка, что дает основание предположить, что не каждый, кто хочет удалить изображение, также хочет удалить связанный снимок (-ы). (Хотя вы можете зарегистрировать моментальный снимок для создания Windows AMI, AMI не запускается.)
Стоит отметить, что AWS не позволит вам удалить моментальный снимок, связанный с AMI, до отмены регистрации AMI.
Сосредоточившись на шагах 2 и 3 выше, вам сначала нужно найти идентификаторы снимков, связанные с AMI. Это должно быть указано как часть сопоставлений блочных устройств. Обычно корневой том EBS имеет точку монтирования / dev / sda1. Вы можете отменить регистрацию AMI из командной строки (или использовать консоль AWS), а затем удалить моментальный снимок (опять же, либо из командной строки, либо из консоли AWS).
Если вам нужно выполнять эту задачу чаще, вы можете написать сценарий процесса. Некоторые библиотеки, такие как Python Boto, включают функцию, которая делает именно это:
deregister_image(image_id, delete_snapshot=False)
Unregister an AMI.
Parameters:
image_id (string) – the ID of the Image to unregister
delete_snapshot (bool) – Set to True if we should delete the snapshot associated with an EBS volume mounted at /dev/sda1
Например, образец сценария (полностью непроверенный и просто собранный вместе - используйте на свой страх и риск!), Основанный на вышеизложенном, может выглядеть так:
#!/usr/bin/env python
import os
import sys
def ec2delete(imageid=None):
conn = boto.ec2.connect_to_region('your_region', aws_access_key_id='your_key', aws_secret_access_key='your_secret')
conn.deregister_image(imageid, delete_snapshot=True)
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
options, args = parser.parse_args()
sys.stderr.write("Deleting %s and snapshots\n" % str(args))
ec2delete(args)
В awscli тоже может это сделать.
Сначала получите идентификатор снимка, используя describe-images
:
aws ec2 describe-images --image-ids ami-0123456789
Затем отмените регистрацию изображения и удалите снимок:
aws ec2 deregister-image --image-id ami-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
#!/bin/bash
#put your ami's in ami.txt
for i in `cat ami.txt`;
do
#put the regions in regions.txt
for r in `cat regions.txt`;do echo $r >>/dev/null;
for e in `cat regions.txt`;do aws ec2 describe-images --image-ids $i --region $r | grep "ImageId\|SnapshotId" | awk -F':' '{print $2}' | tr -d '"',',' | grep "snap" > snapshot.txt;
for s in `cat snapshot.txt`;do aws ec2 deregister-image --image-id $i --region $r;
aws ec2 delete-snapshot --snapshot-id $s --region $r;echo $i $s >> amidel.txt;done;done;
done;
done
#you can check the ami/snapshots which has been de-registered/deleted