我正在尝试使用Python的boto库从我的AWS账户中的实例获取标签。
虽然此代码段可以正常显示所有代码:
tags = e.get_all_tags()
for tag in tags:
print tag.name, tag.value
(e是EC2连接)
当我从各个实例请求标签时,
print vm.__dict__['tags']
或
print vm.tags
我得到一个空列表(vm实际上是一个实例类)。
以下代码:
vm.__dict__['tags']['Name']
当然导致:
KeyError: 'Name'
我的代码一直工作到昨天,突然间我无法从实例中获取标签。
有人知道AWS API是否存在问题?
答案 0 :(得分:32)
在访问之前,您必须确保“名称”标记存在。试试这个:
import boto.ec2
conn=boto.ec2.connect_to_region("eu-west-1")
reservations = conn.get_all_instances()
for res in reservations:
for inst in res.instances:
if 'Name' in inst.tags:
print "%s (%s) [%s]" % (inst.tags['Name'], inst.id, inst.state)
else:
print "%s [%s]" % (inst.id, inst.state)
将打印:
i-4e444444 [stopped]
Amazon Linux (i-4e333333) [running]
答案 1 :(得分:4)
尝试这样的事情:
import boto.ec2
conn = boto.ec2.connect_to_region('us-west-2')
# Find a specific instance, returns a list of Reservation objects
reservations = conn.get_all_instances(instance_ids=['i-xxxxxxxx'])
# Find the Instance object inside the reservation
instance = reservations[0].instances[0]
print(instance.tags)
您应该会看到与实例i-xxxxxxxx
相关联的所有标签。
答案 2 :(得分:1)
对于boto3,您需要这样做。
import boto3
ec2 = boto3.resource('ec2')
vpc = ec2.Vpc('<your vpc id goes here>')
instance_iterator = vpc.instances.all()
for instance in instance_iterator:
for tag in instance.tags:
print('Found instance id: ' + instance.id + '\ntag: ' + tag)
答案 3 :(得分:0)
我的代码中发现了一个错误。我没有考虑没有标签'Name'的情况。
有一个没有标记“Name”的实例,我的代码试图从每个实例中获取此标记。
当我在没有标记'Name'的实例中运行这段代码时,
vm.__dict__['tags']['Name']
我得到了:KeyError:'姓名'。 vm是一个AWS实例。 对于实际设置了此标记的实例,我没有任何问题。
感谢您的帮助,很遗憾地询问这只是我自己的错误。