Python-boto3脚本无法获取全部AWS EC2实例问题求助
解决AWS EC2实例列表漏取问题:遍历所有Reservation下的实例
我一眼就看到问题所在啦!你的代码现在只处理了每个Reservation(预留记录)里的第一个实例(通过ec2['Instances'][0]),但每个Reservation里可能包含多个EC2实例,所以才会出现5个实例只输出3个的情况。
问题核心
你当前的循环逻辑是:
for ec2 in resp['Reservations']: # 只处理 ec2['Instances'][0] 这个实例
但每个Reservation的Instances是一个列表,里面可能有多个实例对象,你需要再套一层循环来遍历这个列表里的每一个实例。
修改后的完整代码
import csv import boto3 from botocore.config import Config output = "Prod.csv" # 假设你的config已提前定义,保留原初始化逻辑 ec = boto3.client('ec2', config=config, region_name=rg) def get_instance_tag(instance, tag_key, default='Null'): """封装标签获取逻辑,减少重复代码""" try: return next(item for item in instance['Tags'] if item['Key'] == tag_key)['Value'] except StopIteration: return default def get_tags(): tag_result = [['Name','InstanceId','State','bt:product','bt:environment-type','bt:environment-name']] resp = ec.describe_instances() # 遍历每个Reservation,再遍历其中所有实例 while True: for reservation in resp['Reservations']: for instance in reservation['Instances']: tag_list = [] # 获取各类标签与实例信息 tag_list.append(get_instance_tag(instance, 'Name')) tag_list.append(instance['InstanceId']) tag_list.append(instance['State']['Name']) tag_list.append(get_instance_tag(instance, 'bt:product')) tag_list.append(get_instance_tag(instance, 'bt:environment-type')) # 修正原代码的b1拼写错误 tag_list.append(get_instance_tag(instance, 'bt:environment-name')) # 修正原代码的b1拼写错误 tag_result.append(tag_list) # 处理分页:如果还有更多实例,通过NextToken继续获取 if 'NextToken' not in resp: break resp = ec.describe_instances(NextToken=resp['NextToken']) return tag_result def main(): tag = get_tags() with open(output,'w', newline='') as resultFile: # 添加newline=''避免Windows下CSV空行问题 wr = csv.writer(resultFile, dialect='excel') wr.writerows(tag) if __name__ == "__main__": main()
关键改动说明
- 新增实例层循环:在遍历
Reservations的循环内,新增for instance in reservation['Instances']:,确保每个实例都被处理 - 修正标签键拼写错误:原代码里把
bt:误写成b1:,导致无法正确获取对应标签,现在统一修正为bt: - 添加分页处理:AWS的
describe_instances默认最多返回1000个实例,通过NextToken循环获取所有结果,避免实例过多时遗漏 - 封装标签获取逻辑:把重复的标签判断代码封装成函数,让代码更简洁易维护
- CSV写入优化:添加
newline=''参数,避免Windows系统下生成的CSV出现多余空行
内容的提问来源于stack exchange,提问作者user2404382
相关产品推荐
相关产品推荐

