#python #amazon-web-services #amazon-ec2
#питон #amazon-веб-сервисы #amazon-ec2
Вопрос:
Привет, я новичок в коде python, и мне было интересно, есть ли способ создать экземпляр, а затем распечатать IP-адрес обратно на консоль, на данный момент я могу создать экземпляр, и он распечатает идентификатор экземпляра обратно
#!/usr/bin/env python3
import boto3
ec2 = boto3.resource('ec2')
instance = ec2.create_instances(
ImageId='ami-0713f98de93617bb4',
MinCount=1,
MaxCount=1,
KeyName='JamieTest',
SecurityGroupIds=['sg-0273f9f172ba795ab'],
InstanceType='t2.nano')
print ('Your instance has been created, the instance ID is :' instance[0].id)
Комментарии:
1. Он должен быть в
instance[0].public_ip_address
. boto3.amazonaws.com/v1/documentation/api/latest/reference /…2. итак, если я сделаю это, print (‘Ваш экземпляр создан, идентификатор экземпляра:’ instance[0].id), instance[0].public_ip_address) это не сработает, потому что для создания IP-адреса требуется несколько секунд, есть ли способ сообщить об этомчтобы дождаться запуска экземпляра, прежде чем он его распечатает?
3. Вы можете проверить, запущено ли состояние экземпляра, прежде чем печатать идентификатор.
if instance[0].state['Name'] == 'running': print('your instance ip address' instance[0].public_ip_address)
Ответ №1:
create_instances() возвращает список объектов ec2.Instance, и у каждого может быть public_ip_address
свойство (если у экземпляра есть общедоступный IP-адрес).
Таким образом
print ('Your instance public IP address is : ' instance[0].public_ip_address)
Комментарии:
1. Привет, спасибо за это, но поскольку мой экземпляр создается и запускается сразу после отсутствия IP-адресов в течение нескольких секунд, есть ли способ сообщить команде подождать перед запуском?
2. @JamieHogan лучше было бы сделать еще один запрос, чтобы получить экземпляр по идентификатору и проверить, появился ли IP-адрес. Смотрите этот метод: boto3.amazonaws.com/v1/documentation/api/latest/reference /…
3. @JamieHogan вы должны использовать этот официант Boto3, чтобы дождаться запуска экземпляра, тогда вы сможете получить IP-адрес: boto3.amazonaws.com/v1/documentation/api/latest/reference /…
Ответ №2:
Вы можете использовать describe_instances()
метод:
import time
session = boto3.Session(profile_name='default')
ec2_client = session.client('ec2')
instance_id = instance[0].id #your instance id here
cycle = True
while cycle:
time.sleep(0.1) #any value of your choice
allinstances = ec2_client.describe_instances().get('Reservations')
for i, group in enumerate(allinstances):
for j, instance in enumerate(group.get('Instances')):
if instance.get("InstanceId") == instance_id:
externalip = instance.get('PublicIpAddress')
if externalip is not None: cycle = False
print('External IP:', externalip)