Назад | Перейти на главную страницу

Как удалить EC2 AMI

Я знаю что команда ec2-create-image instance-id будет создавать образ экземпляра ec2, создавать файл моментальных снимков и регистрироваться как AMI. Но что представляет собой эквивалентная команда для удаления изображения, которая удаляет связанные файлы снимков и отменяет регистрацию AMI?

Обновленный ответ из документов aws:

  1. Откройте консоль Amazon EC2 на https://console.aws.amazon.com/ec2/.
  2. На панели навигации подтвердите свой регион.
  3. На панели навигации щелкните AMI.
  4. Выберите AMI, щелкните Действия, а затем щелкните Отменить регистрацию. При появлении запроса на подтверждение нажмите «Продолжить».
  5. На панели навигации щелкните Снимки.
  6. Выберите снимок, щелкните Действия, а затем щелкните Удалить. При запросе подтверждения нажмите Да, Удалить.

Надеюсь, это поможет кому-то вроде меня! : D

Есть обычно 4 шага к тому, что вы ищете:

  1. Завершить экземпляры с помощью AMI (рекомендуется практика, особенно для AMI с поддержкой S3) [Не требуется перед удалением AMI любого типа]
  2. Отменить регистрацию AMI с помощью ec2-deregister
  3. Удалите пакеты / снимки, поддерживающие AMI, используя ec2-delete-bundle (для S3) или ec2-delete-snapshot (для EBS).
  4. Удалите тома EBS (если они не настроены на удаление при завершении, в этом случае они будут удалены на шаге № 1). Это не обязательно для экземпляров, поддерживаемых S3. [Опять же, нет необходимости завершать экземпляры или удалять тома, если вы просто хотите удалить AMI.]

Помните, что снимки и изображения независимы. Вы можете создать том 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