2011-07-12 80 views
2

我得到某个特定区域的elb详细信息,例如欧洲,然后我可以获得与ELB相关的实例。问题是我无法获得这些实例的公共DNS。我做的是如何使用BOTO python获得AWS中实例的公共dns

conn = regions[3].connect(aws_access_key_id= access, aws_secret_access_key = secret_key) 
loadbalancers = conn.get_all_load_balancers() 
for lb in loadbalancers: 
print lb.instances 

如何获得这些实例的public_dns_name

当我尝试

for i in lb.instances: 
    i.public_dns_name 

AttributeError的: 'InstanceInfo' 对象有没有属性 'public_dns_name'

回答

9

的LoadBalancer类的“instances”属性只包含一小部分关于实例的信息 - 它不是一个完整的Instance对象。要获取完整的实例对象,您必须使用可用的instanceId来查询更多信息。此代码片段将您的所需电话扩展为:

#Create connection to ec2, credentials stored in environment 
ec2_conn = connect_ec2() 

conn = regions[3].connect(aws_access_key_id= access, aws_secret_access_key = secret_key) 
loadbalancers = conn.get_all_load_balancers() 
for lb in loadbalancers: 
    for i in lb.instances: 
     #Here, 'i' is an InstanceInfo object, not a full Instance 
     instance_id = i.id 

     #Query based on the instance_id we've got 
     #This function actually gives reservations, not instances 
     reservations = ec2_conn.get_all_instances(instance_ids=[instance_id]) 
     #pull out our single instance 
     instance = reservations[0].instances[0] 

     #Now we've got the full instance and we can get parameters from here 
     print(instance.public_dns_name) 
相关问题