我需要通过此 Lambda 函数在新创建实例的响应中获取 Public IPv4 地址吗?

I need to get Public IPv4 address on response of newly created instance by this Lambda Function?

我正在使用 boto3 创建一个实例,我想在 response 上打印 public ip 地址。请协助完成此代码,但代码保留显示错误有人可以帮助更正此代码以显示打印 public ipv4 地址

import boto3
import json
 
AMI = 'AMI'
INSTANCE_TYPE = 'INSTANCE_TYPE'
KEY_NAME = 'KEY_NAME'
REGION = 'REGION'
SUBNET_ID = 'SUBNET_ID'
SECURITYGROUP_ID = 'SECURITYGROUP_ID'
 

def lambda_handler(event, context):

    ec2 = boto3.client('ec2', region_name=event['REGION'])

        
    instance = ec2.run_instances(
        ImageId=event['AMI'],
        InstanceType=event['INSTANCE_TYPE'],
        KeyName=event['KEY_NAME'],
        SubnetId=event['SUBNET_ID'],
        SecurityGroupIds = ['my-sg'],
        MaxCount=1,
        MinCount=1,
        InstanceInitiatedShutdownBehavior="terminate",
        TagSpecifications=[
        {
            'ResourceType': 'instance',
            'Tags': [
                {
                    'Key': 'Name',
                    'Value': 'my-instance'
                },
            ]
        },
    ],
    )
    print ("New instance created:")
    instance_id = instance['Instances'][0]['InstanceId']
    print (instance_id)
    
    for instance in instance:
    IP = instance.public_ip_address
    print(IP)
        
    return instance_id**

错误信息显示如下

errorMessage": "'str' object has no attribute 'public_ip_address'",

public IP 地址将不会run_instances()之后提供,因为分配给实例需要一段时间。

您应该重复调用 describe_instances(),直到提供 public IP 地址。我建议在每次通话之间等待几秒钟。

调用后:

response = describe_instances(InstanceIds=[instance_id])

您可以检查是否提供了值:

instance = response['Reservations'][0]['Instances'][0]

if 'PublicIpAddress' in instance:
    public_ip = instance['PublicIpAddress']