Как я могу получить общедоступные днс экземпляра в AWS, используя BOTO python - PullRequest
2 голосов
/ 13 июля 2011

Я получаю подробные сведения о конкретном регионе, скажем, Европа, тогда я могу получить примеры, связанные с ELB. проблема в том, что я не могу получить публичный 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'

1 Ответ

9 голосов
/ 14 июля 2011

Атрибут «instances» класса LoadBalancer содержит лишь небольшую часть информации об экземпляре - это не полный объект 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)
...