当前位置:  开发笔记 > 编程语言 > 正文

使用BOTO3检索EC2实例的公共DNS

如何解决《使用BOTO3检索EC2实例的公共DNS》经验,为你挑选了1个好方法。

我正在使用ipython来了解Boto3并与EC2实例进行交互.这是我用来创建实例的代码:

import boto3

ec2 = boto3.resource('ec2')
client = boto3.client('ec2')


new_instance = ec2.create_instances(
    ImageId='ami-d05e75b8',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro',
    KeyName=,
    SecurityGroups=[''],
    DryRun = False
    )

这启动了EC2实例,我可以从AWS控制台获取公共DNS名称,IP和其他信息.但是,当我尝试使用Boto获取公共DNS时,通过这样做:

new_instance[0].public_dns_name

返回空白引号.然而,其他实例细节,例如:

new_instance[0].instance_type

返回正确的信息.

有任何想法吗?谢谢.

编辑:

所以,如果我这样做:

def get_name(inst):
    client = boto3.client('ec2')
    response = client.describe_instances(InstanceIds = [inst[0].instance_id])
    foo = response['Reservations'][0]['Instances'][0]['NetworkInterfaces'][0]['Association']['PublicDnsName']
    return foo


foo = get_name(new_instance)
print foo

然后它将返回公共DNS.但对我来说,为什么我需要做所有这些都没有意义.



1> Jordon Phill..:

Instance您获得的对象仅使用create_instances调用的响应属性进行补充.由于DNS名称在实例达到运行状态[1]之前不可用,因此不会立即显示.我想你创建实例和调用describe实例之间的时间足够长,微实例可以启动.

import boto3

ec2 = boto3.resource('ec2')
instances = ec2.create_instances(
    ImageId='ami-f0091d91',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro',
    KeyName='',
    SecurityGroups=[''])
instance = instances[0]

# Wait for the instance to enter the running state
instance.wait_until_running()

# Reload the instance attributes
instance.load()
print(instance.public_dns_name)

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有