如何获取AWS实例的公共DNS?

3 投票
1 回答
6323 浏览
提问于 2025-04-16 21:23

我获取了某个特定地区,比如欧洲的负载均衡器(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

那么,如何才能获取这些实例的公共DNS名称呢?

当我尝试这样做时:

for i in lb.instances:
    i.public_dns_name

我遇到了一个错误:'InstanceInfo'对象没有'public_dns_name'这个属性。

1 个回答

9

LoadBalancer类中的“instances”属性只包含了一点点关于实例的信息,并不是完整的实例对象。如果想要获取完整的实例对象,就需要使用可用的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)

撰写回答