我知道该命令ec2-create-image instance-id
将创建 ec2 实例的映像、创建快照文件并注册为 AMI。但是删除映像的等效命令是什么?该命令将删除关联的快照文件并取消注册 AMI?
答案1
来自 aws 文档的更新答案:
- 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
- 在导航栏中,验证您的地区。
- 在导航面板中,单击 AMI。
- 选择 AMI,单击操作,然后单击取消注册。当系统提示确认时,单击继续。
- 在导航窗格中,单击“快照”。
- 选择快照,单击操作,然后单击删除。当系统提示确认时,单击是,删除。
希望这对我这样的人有帮助!:D
答案2
这awscli也可以做到这一点。
首先使用以下方法获取快照 ID 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
答案3
有通常只需 4 个步骤即可找到您要查找的内容:
使用 AMI 终止实例(特别推荐针对 S3 支持的 AMI 的做法)[删除任何类型的 AMI 之前无需执行]- 使用以下方式取消注册 AMI
ec2-deregister
- 使用以下命令删除支持 AMI 的捆绑包/快照
ec2-delete-bundle
(适用于 S3)或ec2-delete-snapshot
(对于 EBS)。 删除 EBS 卷(除非它们被设置为在终止时删除,在这种情况下,它们将在步骤 #1 中被删除)。对于 S3 支持的实例,这不是必需的。[再次强调,如果您只是想删除 AMI,则无需终止实例或删除卷。]
请记住,快照和图像是独立的。您可以从快照创建 EBS 卷并将其用作辅助驱动器而不是启动驱动器。此外(对于 Linux 实例而言),可以从现有快照创建新图像 - 这让人们有理由相信,并不是每个想要删除图像的人都想删除相关的快照。(虽然您可以注册快照来创建 Windows AMI,但 AMI 无法启动。)
值得注意的是,在您取消注册 AMI 之前,AWS 不会允许您删除与 AMI 关联的快照。
关注上述步骤 2 和 3,您首先需要找到与 AMI 关联的快照 ID。这应列为块设备映射的一部分。通常,根 EBS 卷具有挂载点 /dev/sda1。您可以从命令行(或使用 AWS 控制台)取消注册 AMI,然后删除快照(同样,从命令行或 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)
答案4
#!/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