以下是我的尝试:
#!/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,我将返回上面发布的错误。
答案 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]'