3

ヨーロッパなどの特定の地域の elb の詳細を取得すると、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' がありません

4

1 に答える 1

9

LoadBalancer クラスの「インスタンス」属性には、インスタンスに関するごく一部の情報しか含まれていません。完全なインスタンス オブジェクトではありません。完全なインスタンス オブジェクトを取得するには、使用可能な 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)
于 2011-07-14T13:39:32.490 に答える