Как удалить AMI с помощью boto? - PullRequest
5 голосов
/ 15 марта 2011

(кросс-публикация для пользователей-бото )

При наличии идентификатора изображения, как я могу удалить его с помощью boto?

Ответы [ 3 ]

7 голосов
/ 08 августа 2012

С более новым boto (протестировано с 2.38.0) вы можете запустить:

ec2_conn = boto.ec2.connect_to_region('xx-xxxx-x')
ec2_conn.deregister_image('ami-xxxxxxx')

или

ec2_conn.deregister_image('ami-xxxxxxx', delete_snapshot=True)

Первый удалит AMI, второй также удалит прикрепленный снимок EBS

6 голосов
/ 29 апреля 2011

Вы используете API deregister ().

Существует несколько способов получения идентификатора изображения (т. Е. Вы можете перечислить все изображения и искать их свойства и т. Д.)

Вот фрагмент кода, который удалит один из ваших существующих AMI (при условии, что он находится в регионе ЕС)

connection = boto.ec2.connect_to_region('eu-west-1', \
                                    aws_access_key_id='yourkey', \
                                    aws_secret_access_key='yoursecret', \
                                    proxy=yourProxy, \
                                    proxy_port=yourProxyPort)


# This is a way of fetching the image object for an AMI, when you know the AMI id
# Since we specify a single image (using the AMI id) we get a list containing a single image
# You could add error checking and so forth ... but you get the idea
images = connection.get_all_images(image_ids=['ami-cf86xxxx'])
images[0].deregister()

(правка): на самом деле, посмотрев онлайн-документацию по 2.0, есть другой способ.

Определив идентификатор изображения, вы можете использовать метод deregister_image (image_id) в boto.ec2.connection ... что равняется тому, что я думаю.

4 голосов
/ 25 января 2018

Для Boto2 см. katriels answer .Здесь я предполагаю, что вы используете Boto3.

Если у вас есть AMI (объект класса boto3.resources.factory.ec2.Image), вы можете вызвать его функцию deregister.Например, чтобы удалить AMI с заданным идентификатором, вы можете использовать:

import boto3

ec2 = boto3.resource('ec2')

ami_id = 'ami-1b932174'
ami = list(ec2.images.filter(ImageIds=[ami_id]).all())[0]

ami.deregister(DryRun=True)

Если у вас есть необходимые разрешения, вы должны увидеть исключение Request would have succeeded, but DryRun flag is set.Чтобы избавиться от примера, оставьте DryRun и используйте:

ami.deregister() # WARNING: This will really delete the AMI

В этом посте подробно описывается, как удалять AMI и снимки с помощью Boto3.

...