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

3

我获取特定区域(例如欧洲)的负载均衡器详细信息,然后可以获取与该负载均衡器相关联的实例。但问题是,我无法获取这些实例的公共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

属性错误:'InstanceInfo'对象没有'public_dns_name'属性

1个回答

9

LoadBalancer类的“instances”属性仅包含有关实例的少量信息 - 它不是完整的Instance对象。要获取完整的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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接