AWS Python脚本统计EC2实例按AMI分组无法拉取全量数据问题咨询
问题根因
你当前的脚本调用了describe_images接口,这个接口的作用是查询AWS镜像(AMI)的元数据,而非查询EC2实例列表,同时你创建的带自定义profile的session没有被实际使用,直接调用boto3.client会读取默认凭证配置,可能出现权限、区域不匹配导致数据不全的问题。
修正后完整代码
import boto3 import pprint # 初始化带指定profile和区域的session session = boto3.Session(profile_name='kenjiro310', region_name='us-east-2') # 从session创建ec2客户端,确保使用指定的凭证和区域 ec2_client = session.client('ec2') # 调用describe_instances接口拉取所有运行中的EC2实例,加过滤条件只保留运行中状态 response = ec2_client.describe_instances( Filters=[ { 'Name': 'instance-state-name', 'Values': ['running'] } ] ) # 初始化统计字典 ami_count = {} # 遍历返回的实例列表,按AMI分组统计 for reservation in response['Reservations']: for instance in reservation['Instances']: ami_id = instance['ImageId'] # 计数累加 if ami_id in ami_count: ami_count[ami_id] += 1 else: ami_count[ami_id] = 1 # 输出统计结果 pprint.pprint(ami_count)
补充说明
- 如果需要统计所有状态(包含已停止)的实例,删除
Filters参数即可 - 如果实例数量超过1000台,需要处理
NextToken分页参数,循环拉取全量数据 - 如果你还需要同步获取AMI的名称等信息,可以在统计完成后批量调用
describe_images接口补充字段
内容的提问来源于stack exchange,提问作者john r
相关产品推荐
相关产品推荐

