例如: 我有50个AWS实例。 这些实例的标签中键的名称是AP1,AP2,AP3,AP4,AP5
现在我想使用Python字典按标签名称对AWS实例进行分组。 像这样:{AP1:[1,2,3 .... 10],AP2:[11,12 ..... 20],AP3:[21,22,...... 30],AP4:[ 31 ..... 40],AP5:[41,42,..... 50]}
根据这篇文章: Obtaining tags from AWS instances with boto
我像这样使用这个python脚本:
#!/usr/bin/env python
# -*- encoding: utf8 -*-
import boto.ec2
conn = boto.ec2.connect_to_region('us-west-1')
reservations = conn.get_all_instances()
InstanceMap={}
for reservation in reservations:
for instance in reservation.instances:
if 'Name' in instance.tags:
InstanceMap[instance.tags['Name']].append(instance.id)
当我运行此脚本时,它显示: [root @Redhat脚本] #python group.py
追踪(最近一次呼叫最后一次):
文件“group.py”,第11行,
InstanceMap[instance.tags['Name']].append(instance.id)
KeyError:u'AP1'
我的剧本出了什么问题? 请给我一个正确的python脚本。
答案 0 :(得分:1)
当您尝试附加到InstanceMap[instance.tags['Name']]
时,您尝试附加到instance.tags['Name']
中的密钥(InstanceMap
)尚不存在的列表中,因为它是空的。
首先,您需要检查InstanceMap
中是否已存在该密钥,如果确实存在,请使用append。否则,创建它。
#!/usr/bin/env python
# -*- encoding: utf8 -*-
import boto.ec2
conn = boto.ec2.connect_to_region('us-west-1')
reservations = conn.get_all_instances()
InstanceMap={}
for reservation in reservations:
for instance in reservation.instances:
if 'Name' in instance.tags:
tag_name = instance.tags['Name']
if tag_name in InstanceMap
InstanceMap[tag_name].append(instance.id)
else:
InstanceMap[tag_name] = [instance.id,]