2017-09-26 106 views
0

我創建了一個python腳本來獲取我的AWS RDS實例端點。Python boto3過濾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 

它連接到RDS,我看到數據在dbs變量。

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

不幸的是,我有恩的錯誤:

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

你能告訴我什麼是錯?我的目標是通過TAG獲得RDS端點(名稱= APP1)。

謝謝。

回答

0

這是您的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

謝謝,我現在看! –

0

就像helloV指出的那樣,您的縮進是不正確的。如果你想找到標籤查找數據庫,你可能想用這個:

#!/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) 

數據庫實例你正在尋找將被存儲爲target_db。 有關列出數據庫實例標籤的更多信息,請參閱this

+0

謝謝,我會檢查代碼:) –