如何通过AMI(镜像)ID筛选Amazon EBS快照?
获取特定AMI关联的EBS快照方法
可以实现,但无法直接用ImageId作为describe_snapshots的筛选条件(该API的过滤器里没有image-id这个选项),不过你可以通过describe_images直接提取指定AMI关联的所有EBS快照ID,这是最直接高效的方式。
方法一:通过describe_images提取关联快照
指定目标AMI ID调用describe_images,从返回的镜像信息中解析BlockDeviceMappings字段,里面的Ebs.SnapshotId就是创建该AMI时使用的EBS快照ID。示例代码如下:
import boto3 # 初始化EC2客户端 ec2 = boto3.client('ec2') # 替换为你要查询的目标AMI ID target_ami_id = 'ami-xxxxxxxxx' # 获取指定AMI的详细信息 response = ec2.describe_images(ImageIds=[target_ami_id]) images = response['Images'] # 提取所有关联的EBS快照ID associated_snapshot_ids = [] for image in images: # 遍历镜像的块设备映射 for block_device in image.get('BlockDeviceMappings', []): ebs_details = block_device.get('Ebs') # 只提取有快照关联的EBS卷 if ebs_details and 'SnapshotId' in ebs_details: associated_snapshot_ids.append(ebs_details['SnapshotId']) # 输出结果 print(f"与AMI {target_ami_id}关联的EBS快照ID:") for snap_id in associated_snapshot_ids: print(snap_id) # 如果要删除这些快照,直接遍历列表操作即可 for snap_id in associated_snapshot_ids: print(f"Deleting snapshot {snap_id}") ec2.delete_snapshot(SnapshotId=snap_id)
关于describe_snapshots的补充说明
describe_snapshots的过滤器支持标签、所有者、状态等条件,但不支持按ImageId筛选。如果非要用这个API,只能先通过上述方法拿到快照ID列表,再用SnapshotIds参数批量查询,比如:
# 用已获取的快照ID列表查询快照详情 snapshots = ec2.describe_snapshots(SnapshotIds=associated_snapshot_ids)['Snapshots']
但这种方式多了一步,不如直接从describe_images提取高效。
内容的提问来源于stack exchange,提问作者Tommy B.
相关产品推荐
相关产品推荐

