2016-10-25 1 views
0

Voici ce que j'ai essayé:AWS RDS: comment obtenir le dernier instantané avec boto3 et 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) 

Ce que je reçois est:

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

J'ai essayé ce jour la création (hier dans le script) et le transmettre à la recherche jmepath mais je ne pouvais pas comprendre comment passer cet objet date à la recherche. "+" ne fonctionne pas sur les objets datetime et si je le convertis en sting avec str(), je reviens à l'erreur affichée ci-dessus.

Répondre

1

Première réponse, describe_db_snapshot pour SnapShotCreateTime est un objet datetime

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

Alors vous essayez de comparer datetime avec une ficelle. Pour résoudre ce problème, vous devez convertir la chaîne en datetime ou vice-versa

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) 

Vous devriez pouvoir interroger des choses similaires en utilisant AWS CLI qui mettent en œuvre JMESpath, mais AWS CLI soins déjà pris de la conversion de chaîne. Et la valeur de date doit être englober dans backticks.

More reading: 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]'