删除AMI图像

时间:2015-04-21 07:20:22

标签: python python-2.7 amazon-web-services boto

我想根据其计数删除AMI图像。也就是说,我已经在图像的名称标签中定义了实例-id,这样我就可以知道图像的实例。我希望删除图像,如果该特定实例的图像数量超过30,并且删除的图像必须是较旧的图像而不是最新图像。

2 个答案:

答案 0 :(得分:0)

它看起来非常自定义..所以自定义脚本将能够解决它。使用CLI命令,如describe-images。 您还应该将图像的创建存储为标记。

我假设您没有那么多图像(数千个),因此您可以轻松地构建关于不同图像的数组,计算它们并在O(n)时间内选择最新的图像。然后你需要调用deregister-image命令。

脚本可以定期运行。

最好将它作为lambda函数运行,但由于缺少触发,它可能还没有准备好。 (目前没有cron样式触发器。)但是你可以通过创建新的AMI来触发该功能。

答案 1 :(得分:0)

你正在寻找这样的东西:

from boto.ec2 import connect_to_region
images = sorted(connect_to_region('us-west-1').get_all_images(owners='self'))
for candidates in images[30:]:
    candidates.deregister()

假设您的.boto / boto.cfg已使用您的密钥设置

<强>更新

如果您想按日期而不仅仅是AMI的顺序(抱歉我错过了),那么您将需要一个自定义脚本,例如:

from boto.ec2 import connect_to_region
images = (connect_to_region('us-west-1').get_all_images(owners='amazon'))
amis = {}
amis = dict([(image.id, image.creationDate) for image in images if 'ami' in image.id ])
candidates = [x for (x,y) in sorted(amis.items(), key=lambda (k,v): v)][:30]
import pdb; pdb.set_trace()
len(candidates)
for image in images:
    print image.id
    if str(image.id) in candidates:
        print "try to remove"
        image.deregister()
    else:
        print "current 30"