Python BOTO3脚本无法提取AWS EC2实例NAME标签值问题求助
错误原因
原代码中Instances['Tags']返回的是由多个标签键值对组成的列表,而非字典结构,Instances['Tags']['Key'=='Name']的写法实际会先计算'Key'=='Name'得到布尔值False,等价于取列表索引为0的元素,因此无法正确筛选到KEY为NAME的标签值。
修正后完整代码
import boto3 import csv client = boto3.client('ec2') response = client.describe_instances( Filters=[ { 'Name':'tag:STATE','Values':['GREEN'] } ] ) detail=[] for Reservations in response["Reservations"]: for Instances in Reservations["Instances"]: # 查找NAME标签对应的值,无标签时默认填充「无名称」 instance_name = "无名称" for tag in Instances['Tags']: if tag['Key'] == 'NAME': instance_name = tag['Value'] break detail.append({ 'ID':Instances['InstanceId'], 'Status':Instances['State']['Name'], 'Name':instance_name }) header=['ID','Status','Name'] with open('EC2_Detail.csv','w', encoding='utf-8') as file: writer=csv.DictWriter(file, fieldnames=header) writer.writeheader() writer.writerows(detail)
补充说明
- 新增了标签匹配逻辑,遍历实例标签列表精准匹配KEY为
NAME的标签取值 - 增加了缺省值处理,若实例未配置NAME标签会自动填充「无名称」,避免代码运行报错
- 导出CSV时新增了
utf-8编码声明,避免中文名称乱码
内容的提问来源于stack exchange,提问作者Joel P
相关产品推荐
相关产品推荐

