我正在使用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控制台获取公共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。但我不明白为什么我需要做所有这些。
ec2.Instance
类型的,请检查您的逻辑。另外,请注意create_instances()
的返回值是一个ec2.Instance
对象列表。 - The Unknown Dev