如何使用Python字典按标签名称对AWS实例进行分组?

时间:2017-12-29 14:59:32

标签: python amazon-web-services dictionary

例如: 我有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脚本。

1 个答案:

答案 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,]