2011-07-12 3 views
2

Je reçois les détails elb d'une région spécifique dire l'Europe alors je suis en mesure d'obtenir les instances qui sont liées à l'ELB. Le problème est que je ne suis pas en mesure d'obtenir le DNS public de ces instances. ce que je fais estComment puis-je obtenir les dns publics d'une instance dans AWS en utilisant BOTO python

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 

comment obtenir le public_dns_name de ces instances

lorsque je tente

for i in lb.instances: 
    i.public_dns_name 

AttributeError: objet 'InstanceInfo' n'a pas d'attribut 'public_dns_name'

Répondre

9

Le L'attribut "instances" de la classe LoadBalancer ne contient qu'un tout petit peu d'information sur l'instance - ce n'est pas un objet Instance complet. Pour obtenir l'objet d'instance complet, vous devez utiliser l'instanceId, qui est disponible, pour demander plus d'informations. Cet extrait de code étend le vôtre avec les appels requis:

#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) 
Questions connexes