如何统计不同AWS资源类型数量?有无Boto API统计单服务资源数?
统计AWS资源数量的方法
一、统计不同AWS资源类型的总数量
下面是几种常用的方案,各有适用场景:
1. AWS Config的get_discovered_resource_counts() API
这是你已经了解到的方法,它能直接返回已发现的各类资源的数量统计,但前提是必须在你的AWS账户中启用了AWS Config服务。用Boto3调用的示例代码如下:
import boto3 config_client = boto3.client('config') response = config_client.get_discovered_resource_counts( resourceTypes=['AWS::EC2::Instance', 'AWS::IAM::User', 'AWS::S3::Bucket'] # 按需指定要统计的资源类型 ) for resource in response['resourceCounts']: print(f"资源类型: {resource['resourceType']}, 数量: {resource['count']}")
如果不传入resourceTypes参数,会返回所有已发现的资源类型的统计数据。
2. AWS Resource Groups Tagging API
这个API可以统计带标签的资源数量(未打标签的资源会被遗漏),适合关注有标签资源的场景。示例代码:
import boto3 tagging_client = boto3.client('resourcegroupstaggingapi') response = tagging_client.get_resources( ResourceTypeFilters=['AWS::EC2::Instance'] ) instance_count = len(response['ResourceTagMappingList']) print(f"带标签的EC2实例数量: {instance_count}")
二、单个AWS服务内的资源统计(以IAM为例)
很遗憾,包括IAM在内的大部分AWS服务,并没有提供专门的「获取资源总数」的API。官方推荐的方式是分页调用列表类API并计数——但你可以优化这个过程:只统计数量,不处理所有资源的详细数据,效率其实很高。
比如针对IAM的Users、Roles、Groups,用Boto3分页器统计的示例:
import boto3 def count_iam_resource(client, paginator_name): count = 0 paginator = client.get_paginator(paginator_name) for page in paginator.paginate(): # 根据API名称自动匹配结果键(比如list_users对应返回的Users字段) resource_key = paginator_name.split('_')[-1] + 's' count += len(page[resource_key]) return count iam_client = boto3.client('iam') user_count = count_iam_resource(iam_client, 'list_users') role_count = count_iam_resource(iam_client, 'list_roles') group_count = count_iam_resource(iam_client, 'list_groups') print(f"IAM资源统计: 用户 {user_count} 个, 角色 {role_count} 个, 用户组 {group_count} 个")
这种方式通过分页器自动处理分页逻辑,只累加每页的资源数量,不会占用过多内存,哪怕是资源量较大的账户也能高效运行。
补充说明
其他服务的统计逻辑类似:
- EC2实例数量:用
describe_instances分页器,统计每页Reservations下的Instances数量 - S3存储桶数量:直接调用
list_buckets,取Buckets列表的长度(S3的该接口无分页限制)
内容的提问来源于stack exchange,提问作者Bipul
相关产品推荐
相关产品推荐

