2017-09-26 5 views
0

J'ai créé un script python pour obtenir mes instances Endpoint AWS RDS.Python boto3 filtre l'étiquette RDS

#!/usr/bin/env python 
import boto3` 
rds = boto3.client('rds') 
try: 
# get all of the db instances 
    dbs = rds.describe_db_instances() 
for db in dbs['DBInstances']: 
print ("%[email protected]%s:%s %s") % (
     db['MasterUsername'], 
     db['Endpoint']['Address'], 
     db['Endpoint']['Port'], 
     db['DBInstanceStatus']) 
except Exception as error: 
print error 

Il se connecte à RDS et je vois les données dans la variable dbs.

{u'DBInstances': [{u'PubliclyAccessible': False, u'MasterUsername':  'dbadmin', u'MonitoringInterval': 0, u'LicenseModel': 'general-public-license', ... 

Malheureusement, je suis arrivé en erreur:

File "rds2.py", line 7 
for db in dbs['DBInstances']: 
^
SyntaxError: invalid syntax` 

Pourriez-vous me dire ce qui est erroné? Mon but est d'obtenir Endpoint of RDS avec TAG (Name = APP1).

Merci.

Répondre

0

Il s'agit d'un problème avec votre indentation Python.

import boto3 
rds = boto3.client('rds') 
try: 
# get all of the db instances 
    dbs = rds.describe_db_instances() 
    for db in dbs['DBInstances']: 
     print ("%[email protected]%s:%s %s") % (
      db['MasterUsername'], 
      db['Endpoint']['Address'], 
      db['Endpoint']['Port'], 
      db['DBInstanceStatus']) 
except Exception as error: 
    print error 
+0

Merci, je vois maintenant !!! –

0

Comme helloV a souligné, votre indentation est incorrecte. Si vous voulez trouver la base de données par étiquette recherche, vous pouvez utiliser ceci:

#!/usr/bin/env python 
import boto3 

rds = boto3.client('rds') 
dbs = rds.describe_db_instances() 


def get_tags_for_db(db): 
    instance_arn = db['DBInstanceArn'] 
    instance_tags = rds.list_tags_for_resource(ResourceName=instance_arn) 
    return instance_tags['TagList'] 


target_db = None 

for db in dbs['DBInstances']: 
    print ("%[email protected]%s:%s %s") % (
     db['MasterUsername'], 
     db['Endpoint']['Address'], 
     db['Endpoint']['Port'], 
     db['DBInstanceStatus']) 

    db_tags = get_tags_for_db(db) 
    tag = next(iter(filter(lambda tag: tag['Key'] == 'Name' and tag['Value'] == 'APP1', db_tags)), None) 
    if tag: 
     target_db = db 
     break 

print(target_db) 

Le DB d'instance que vous recherchez sera stocké sous forme target_db. Pour plus d'informations sur les points de liste pour une instance de base de données, voir this.

+0

Merci, je vais vérifier le code :) –