通过AWS Config获取资源后,如何获取各类资源的标签?
无需构造ARN获取AWS Config资源标签的简便方案
直接使用AWS Resource Groups Tagging API的get_resources接口即可,不用手动构造ARN或初始化多服务客户端,具体操作如下:
- 给Lambda执行角色添加
tag:GetResources权限,确保能调用该API。 - 将
list_discovered_resources返回的资源按类型分组,批量传入get_resources查询标签:- 相同资源类型的ID可以批量查询,避免多次调用API。
- Tagging API会自动处理资源类型与ID到ARN的映射,无需你手动构造。
示例Python代码
import boto3 def lambda_handler(event, context): config_client = boto3.client('config') tagging_client = boto3.client('resourcegroupstaggingapi') # 获取Config发现的资源列表(这里可按需指定资源类型或遍历所有类型) discovered_resources = config_client.list_discovered_resources( resourceType='AWS::EC2::Instance' )['resourceIdentifiers'] # 按资源类型分组ID,方便批量查询 resource_groups = {} for res in discovered_resources: res_type = res['resourceType'] resource_groups.setdefault(res_type, []).append(res['resourceId']) # 批量获取所有资源的标签(处理分页,单次最多查100个ID) resource_tags = {} for res_type, res_ids in resource_groups.items(): paginator = tagging_client.get_paginator('get_resources') for page in paginator.paginate(ResourceTypeFilters=[res_type], ResourceIds=res_ids): for mapping in page['ResourceTagMappingList']: resource_tags[mapping['ResourceARN']] = mapping['Tags'] # 后续业务逻辑处理 return resource_tags
优势说明
- 无需手动构造各类型资源的ARN,API自动完成映射
- 仅需初始化一个Tagging API客户端,不用为EC2、S3等资源单独初始化客户端
- 支持批量+分页查询,减少API调用次数,提升执行效率
内容的提问来源于stack exchange,提问作者DenCowboy
相关产品推荐
相关产品推荐

