AWS RDS:如何使用boto3和jmespath获取最新快照?

时间:2016-10-25 06:57:51

标签: amazon-web-services amazon-rds boto3 jmespath

以下是我的尝试:

#!/usr/bin/env python3
import boto3
import jmespath
from datetime import datetime, timedelta

now = datetime.utcnow()
yesterday = now - timedelta(days=1)

boto3.setup_default_session(profile_name='profilename')
rds_client = boto3.client('rds')

response = rds_client.describe_db_snapshots(DBInstanceIdentifier='instanseid')

snaplist=jmespath.search("DBSnapshots[?SnapshotCreateTime >`2016-10-24 06:11:30`].[DBSnapshotIdentifier]", response)

print(snaplist)

我得到的是:

TypeError: unorderable types: datetime.datetime() < str()

我尝试创建日期(昨天在脚本中)并将其传递给jmepath搜索,但我无法弄清楚如何将该日期对象传递给搜索。 “+”对datetime对象不起作用,如果我用str()将其转换为sting,我将返回上面发布的错误。

1 个答案:

答案 0 :(得分:3)

首先,SnapShotCreateTime的describe_db_snapshot响应是一个日期时间对象。

'SnapshotCreateTime': datetime(2015, 1, 1)

所以你试图将datetime与string进行比较。要修复它,您需要将字符串转换为日期时间,反之亦然。

search_date = datetime.strptime('2016-10-24 06:11:30', '%Y-%m-%d %H:%M:%s')
snaplist=jmespath.search(
    "DBSnapshots[?SnapshotCreateTime > search_date].[DBSnapshotIdentifier]",
    response)

您应该能够使用实现JMESpath的AWS CLI查询类似的内容,但是AWS CLI已经处理了字符串转换。并且日期值必须包含在“反引号”中。

更多阅读:Use filter "launch-time" to find all instances newer than X date

aws rds describe-db-snapshots --query 'DBSnapshots[?SnapshotCreateTime >`2016-10-24 06:11:30`].[DBSnapshotIdentifier]'