Мне нужно получить общедоступный IPv4-адрес в ответе вновь созданного экземпляра с помощью этой лямбда-функции?

#python #amazon-web-services #amazon-ec2 #aws-lambda

Вопрос:

Я создаю экземпляр с помощью boto3 и хочу напечатать общедоступный ip-адрес в ответе. пожалуйста, помогите заполнить этот код, но код продолжает показывать ошибку, может ли кто-нибудь помочь исправить этот код, чтобы показать публичный 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'",  

Ответ №1:

Общедоступный IP-адрес не будет предоставлен после run_instances() этого, поскольку для назначения экземпляру требуется некоторое время.

Вам следует повторно звонить describe_instances() до тех пор, пока не будет предоставлен общедоступный IP-адрес. Я бы рекомендовал подождать несколько секунд между каждым звонком.

После звонка:

 response = describe_instances(InstanceIds=[instance_id])  

вы можете проверить, указано ли значение:

 instance = response['Reservations'][0]['Instances'][0]  if 'PublicIpAddress' in instance:  public_ip = instance['PublicIpAddress']