如何通过标签获取AWS RDS ARN?代码中ResourceName参数该怎么填?
解决方法
你可以直接使用RDS实例描述信息里的db['DBInstanceArn']作为add_tags_to_resource接口的ResourceName参数值,这个字段就是当前RDS实例的ARN,已经在describe_db_instances的返回结果中提供了。
另外你的代码还有几个需要修正的地方:
- 代码里的
client未定义,应该用你初始化的rds客户端对象 - 标签判断逻辑可以优化,不用遍历所有标签后才执行启动和打标操作,找到匹配标签后即可执行并跳出循环
- 打标时要填写正确的Key和Value,对应需求的
rdsonly:true
修正后的完整代码如下:
import boto3 rds = boto3.client('rds') def lambda_handler(event, context): # 获取所有RDS实例 dbs = rds.describe_db_instances() for db in dbs['DBInstances']: # 只处理处于停止状态的实例 if db['DBInstanceStatus'] == 'stopped': try: # 获取当前实例的标签列表 tag_list = rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList'] # 检查是否存在autostart=yes标签 has_autostart_tag = any(tag['Key'] == 'autostart' and tag['Value'] == 'yes' for tag in tag_list) if has_autostart_tag: # 启动RDS实例 rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier']) print(f"正在启动实例: {db['DBInstanceIdentifier']}") # 为实例添加rdsonly:true标签 rds.add_tags_to_resource( ResourceName=db['DBInstanceArn'], # 这里直接使用实例的ARN Tags=[ { 'Key': 'rdsonly', 'Value': 'true' } ] ) print(f"已为实例 {db['DBInstanceIdentifier']} 添加rdsonly:true标签") except Exception as e: print(f"无法启动实例 {db['DBInstanceIdentifier']}") print(str(e)) if __name__ == "__main__": lambda_handler(None, None)
关键说明
- ResourceName参数:直接使用
db['DBInstanceArn'],这个值是AWS返回的实例唯一ARN标识,完全符合add_tags_to_resource接口对ResourceName的要求 - 客户端对象统一:全程使用初始化的
rds客户端,避免未定义变量错误 - 标签判断优化:使用
any()函数简化标签检查逻辑,代码更简洁高效 - 标签内容正确:将Tags参数里的Key设为
rdsonly,Value设为true,匹配你的需求
内容的提问来源于stack exchange,提问作者neeson.lee
相关产品推荐
相关产品推荐

