如何将EC2 describe_instances返回的标签正确写入CSV?
解决EC2实例标签导出为指定格式CSV的问题
问题根源
原代码存在两个核心问题:
write_csv函数仅创建了CSV写入对象,但未执行任何实际写入操作- 循环逐个写入单个标签的键值对,导致输出为每行一组键值,而非期望的「表头为标签键、单行对应值」的格式
修正后的代码
import csv import boto3 # 初始化boto3会话与EC2客户端(按需添加凭证配置) session = boto3.Session() client = session.client('ec2') def write_tags_to_csv(tags, filename): # 提取所有标签键作为CSV表头 headers = [tag['Key'] for tag in tags] # 提取所有标签值作为单行数据 values = [tag['Value'] for tag in tags] # 一次性完成文件写入 with open(filename, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(headers) # 写入表头行 writer.writerow(values) # 写入值行 # 获取目标实例的详情 response = client.describe_instances( Filters=[ { 'Name': 'instance-id', 'Values': [ 'i-xxxxxxxxx', # 替换为你的实际实例ID ], }, ], ) # 提取第一个实例的标签集合 tags = response['Reservations'][0]['Instances'][0]['Tags'] # 生成CSV报告 write_tags_to_csv(tags, 'ec2_tags_report.csv')
代码说明
- 先从标签列表中批量提取
Key和Value,分别组成表头和数据行 - 一次性打开文件完成写入,避免多次追加写入的格式混乱
- 指定
encoding='utf-8',避免中文等特殊字符出现乱码问题
最终输出格式
生成的CSV内容结构如下:
| tag1 | tag2 | tag3 |
|---|---|---|
| value1 | value2 | value3 |
内容的提问来源于stack exchange,提问作者Teckfrekk
相关产品推荐
相关产品推荐

