首页 > 解决方案 > 如何通过 BOTO3 程序从创建的 AWS 实例中检索公共 DNS?

问题描述

与使用 BOTO3 检索 EC2 实例的公共 dns 中存在相同的问题

首先我创建并运行一个实例:

r = client.run_instances(
ImageId=aws_config['base_ami'], 
MinCount=1, 
MaxCount=1,
KeyName=aws_config['key_name'],
InstanceType="t2.small",
NetworkInterfaces=[
{
    'DeviceIndex': 0,
    'SubnetId' : aws_config['subnet'],
    'Groups': aws_config['security_groups'],
    'AssociatePublicIpAddress': True            
}]                     
)
instance = r["Instances"][0]

答案建议使用 instance.load() 将新的公共 DNS IP 上传到实例。顺便说一句,我可以从 AWS 控制台看到公共 IP

在我的程序中,我在 instance.load() 之后有 AttributeError

instance.load()

AttributeError: 'dict' 对象没有属性 'load

标签: pythonamazon-web-servicesamazon-ec2boto3

解决方案


问题是 client.run_instances 不返回 EC2 实例列表,它返回实例字典列表。

要将返回转换为 EC2 实例,我在上述代码之后执行了以下操作:

ec2 = boto3.resource('ec2')
inst = ec2.Instance(instance['InstanceId']) 

然后 inst.load() 工作并上传公共 DNS IP


推荐阅读