2016-10-25 4 views
0

Вот что я пробовал: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(), я вернусь к ошибке, указанной выше.

ответ

1

Во-первых, describe_db_snapshot ответ на SnapShotCreateTime является объектом DateTime

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

Таким образом, вы пытаетесь сравнить 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 уже позаботились о преобразовании строки. И значение даты должно быть объявлено в backticks.

Больше чтение: 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]'