#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']