Python boto3过滤RDS标记

Python boto3过滤RDS标记

问题描述:

我创建了一个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)。

谢谢。

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

谢谢,我现在看! –

就像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

谢谢,我会检查代码:) –