当实例初始化时,ec2 实例的公有 IP 地址为无



我正在尝试在创建 ec2 实例并使用以下代码运行后获取该实例的公有 IP 地址:

instance = ec2_resource.create_instances(ImageId='ami-a0cfeed8', 
MinCount=1, MaxCount=1, InstanceType='t2.micro', SecurityGroups= . 
['some_security_group'], KeyName='some_key')
instance[0].wait_until_running()
print(instance[0].public_ip_address)

但是,即使公有 ip 在 aws 控制台中可见,上述代码打印的值也是None。如果我在实例的所有状态检查完成后尝试打印值,那么它打印得很好。

  1. 为什么会这样?
  2. 如何知道实例的状态检查仍在进行中,即它处于初始化状态?

为了获取@Michael - sqlbot 的答案并将其全部放在一个地方,以下是这段代码的工作原理:

import boto3
# create the session and resource objects
boto3_session = boto3.Session(profile_name=some_profile_you_configured)
ec2_resource = boto3_session('ec2')
# create the instance
instance = ec2_resource.create_instances(ImageId='ami-a0cfeed8', 
MinCount=1, MaxCount=1, InstanceType='t2.micro', SecurityGroups= . 
['some_security_group'], KeyName='some_key')
# use the boto3 waiter
instance[0].wait_until_running()
# reload the instance object
instance[0].reload()
public_ip = instance[0].public_ip_address
print(public_ip)

boto3 实例文档 - reload((

最新更新