AWS boto 获取时间范围内的快照

1 投票
2 回答
2928 浏览
提问于 2025-04-18 14:17

我正在使用AWS,并通过boto(这是一个用来和亚马逊网络服务互动的Python库)来获取快照。我用conn.get_all_snapshots()这个方法来获取所有的快照,但我只想要必要的数据。我正在用日历来查看这些快照,所以如果能只获取当前月份的快照,那就太好了。

请问有没有什么限制(可能是过滤条件)可以加在conn.get_all_snapshots()上,让我只获取这个月的快照呢?

如果需要的话,这里有boto的文档链接:http://boto.readthedocs.org/en/latest/ref/ec2.html

2 个回答

0

使用快照的 start_time 字段(这是一个字符串,所以需要进行解析):

import datetime

# Fetch all snaps
snaps = conn.get_all_snapshots()
# Get UTC of 30-days ago
cutoff = datetime.datetime.utcnow() - datetime.timedelta(days=30)
# datetime parsing format "2015-09-07T20:12:08.000Z"
DATEFORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
# filter older
old_snaps = [s for s in snaps \
             if datetime.datetime.strptime(s.start_time, DATEFORMAT) < cutoff]
# filter newer
new_snaps = [s for s in snaps \
             if datetime.datetime.strptime(s.start_time, DATEFORMAT) >= cutoff]

old_snaps 将包含这个月之前的快照,而 new_snaps 将包含这个月的快照。 (我感觉你想删除旧的快照,所以我加了 old_snaps 这一行。)

我在上面使用了 datetime.strptime(),因为这是内置的函数,但如果你安装了 dateutil,它会更强大一些。 (详细信息可以查看这个链接: https://stackoverflow.com/a/3908349/1293152

0

我不知道有什么办法可以做到这一点。EC2的API允许你根据快照ID或者一些其他条件来筛选结果,比如status(状态)或者progress(进度)。甚至还有一个create-time(创建时间)的筛选条件,但很遗憾的是,无法指定一个时间范围来返回这个范围内的所有内容。而且在筛选查询中也不能使用<(小于)或>(大于)这样的运算符。

撰写回答