You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3查询EC2实例挂载卷的最近快照时间与状态的实现方法

实现步骤与完整代码

核心逻辑为:拿到卷ID列表后,对每个卷ID调用ec2.snapshots.filter()方法,过滤出当前账号下该卷对应的所有快照,按创建时间降序排序后取第一条,即为该卷的最新快照。

import boto3
from operator import attrgetter

ec2 = boto3.resource('ec2')
instance = ec2.Instance('instance1')

# 原有获取挂载卷ID逻辑(优化为列表推导式写法,功能和你原代码一致)
listVolumes = [v.id for v in instance.volumes.all()]
print("当前实例挂载的EBS卷ID列表:", listVolumes)

# 遍历查询每个卷的最新快照信息
for volume_id in listVolumes:
    # 过滤当前账号下、指定卷ID的所有快照
    snapshots = ec2.snapshots.filter(
        OwnerIds=['self'],
        Filters=[
            {
                'Name': 'volume-id',
                'Values': [volume_id]
            }
        ]
    )
    # 按快照创建时间倒序排序
    sorted_snapshots = sorted(snapshots, key=attrgetter('start_time'), reverse=True)
    if sorted_snapshots:
        latest_snap = sorted_snapshots[0]
        print(f"\n卷ID {volume_id} 最新快照信息:")
        print(f"- 快照ID:{latest_snap.id}")
        print(f"- 快照状态:{latest_snap.state}")
        print(f"- 创建时间:{latest_snap.start_time}")
    else:
        print(f"\n卷ID {volume_id} 暂无任何快照记录")
关键说明
  • 筛选条件加OwnerIds=['self']是为了排除AWS公开快照、其他账号共享的快照,仅返回你自己账号为对应卷创建的快照,避免结果混乱
  • 用attrgetter('start_time')作为排序依据,比手动读取属性效率更高,reverse=True设置为倒序,排序后的第一条就是最新生成的快照
  • 快照的state字段返回值包含pending(创建中)、completed(创建完成)、error(创建失败)三类
  • 如果你需要查询其他区域的快照,初始化ec2资源时指定对应区域即可:ec2 = boto3.resource('ec2', region_name='ap-southeast-1')

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:30:03