gpt4 book ai didi

python - 使用 BOTO3 检索 EC2 实例的公共(public) DNS

转载 作者:太空狗 更新时间:2023-10-29 17:58:34 25 4
gpt4 key购买 nike

我正在使用 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=<name_of_my_key>,
SecurityGroups=['<security_group_name>'],
DryRun = False
)

这可以正常启动 EC2 实例,我可以从 AWS 控制台获取公共(public) DNS 名称、IP 和其他信息。但是,当我尝试使用 Boto 获取公共(public) 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

然后它将返回公共(public) DNS。但我不明白为什么我需要做所有这些。

最佳答案

您返回的 Instance 对象仅与来自 create_instances 调用的响应属性混合。由于在实例达到运行状态之前 DNS 名称不可用 [1] , 它不会立即出现。我想您创建实例和调用描述实例之间的时间足以让微实例启动。

import boto3

ec2 = boto3.resource('ec2')
instances = ec2.create_instances(
ImageId='ami-f0091d91',
MinCount=1,
MaxCount=1,
InstanceType='t2.micro',
KeyName='<KEY-NAME>',
SecurityGroups=['<GROUP-NAME>'])
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)

关于python - 使用 BOTO3 检索 EC2 实例的公共(public) DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com