AWS 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, и если я конвертирую его в sting с помощью str (), я возвращаюсь к сообщенной выше ошибке.


person ERIK_SON    schedule 25.10.2016    source источник


Ответы (1)


Сначала ответ describe_db_snapshot для SnapShotCreateTime это объект datetime.

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

Итак, вы пытаетесь сравнить datetime со строкой. Чтобы исправить это, вам нужно преобразовать строку в datetime или наоборот.

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)

Вы должны иметь возможность запрашивать аналогичные данные с помощью AWS CLI, реализующего JMESpath, однако AWS CLI уже позаботился о преобразовании строк. И значение даты должно быть заключено в `обратные кавычки`.

Дополнительная литература: Используйте фильтр «Время запуска», чтобы найти все экземпляры новее, чем дата X

aws rds describe-db-snapshots --query 'DBSnapshots[?SnapshotCreateTime >`2016-10-24 06:11:30`].[DBSnapshotIdentifier]'
person mootmoot    schedule 25.10.2016
comment
Это не работает - person code_mechanic; 17.06.2021