2

这是我尝试过的:

#!/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,我将返回上面发布的错误。

4

1 回答 1

3

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

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

因此,您正在尝试将日期时间与字符串进行比较。要修复它,您需要将字符串转换为日期时间,反之亦然。

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 已经处理了字符串转换。并且日期值必须包含在“反引号”中。

更多阅读:使用过滤器“启动时间”查找所有比 X 日期新的实例

aws rds describe-db-snapshots --query 'DBSnapshots[?SnapshotCreateTime >`2016-10-24 06:11:30`].[DBSnapshotIdentifier]'
于 2016-10-25T08:18:50.463 回答