Определение даты/времени создания инстанса Amazon EC2

Можно ли определить (с помощью boto), когда был создан конкретный экземпляр EC2?

http://boto.readthedocs.org/en/latest/ref/ec2.html, похоже, не дает ничего полезного в этом случае. Необходимо узнать дату создания определенного набора экземпляров EC2.

Спасибо!


person megazoe    schedule 20.09.2013    source источник


Ответы (5)


Для экземпляра EC2 нет атрибута с именем create_time, доступен только launch_time.

Однако вы можете использовать следующий код Python, чтобы узнать, когда был создан том, что, в свою очередь, дает вам время создания экземпляра (обратите внимание, что я говорю о томе, подключенном при создании экземпляра):

import boto3
ec2 = boto3.resource('ec2', region_name='instance_region_name')
volume = ec2.Volume('vol-id')
print volume.create_time.strftime("%Y-%m-%d %H:%M:%S")

Альтернативой является использование пользовательского кода. Когда вы создаете экземпляры с помощью create_instances(), вы можете регистрировать launch_time для данного экземпляра вместе с его идентификатором экземпляра и именем в каком-либо месте, например DynamoDB, чтобы вы могли получать «время создания», когда захотите, используя идентификаторы экземпляров.

person Venkatesh Wadawadagi    schedule 27.07.2016

Предполагая, что вы используете экземпляр с поддержкой EBS и не занимаетесь каким-либо причудливым жонглированием дисками, лучший способ выяснить дату создания экземпляра — посмотреть время создания корневого тома диска. Хотя время запуска экземпляра будет меняться каждый раз, когда вы его останавливаете и запускаете, время создания тома EBS является статическим.

Вот быстрый скрипт для определения времени создания экземпляра, из которого вы сейчас работаете:

import boto
import subprocess

instance_id = subprocess.check_output(['curl', '-s', 'http://169.254.169.254/latest/meta-data/instance-id'])

conn = boto.connect_ec2()

root_device = conn.get_instance_attribute(instance_id, 'rootDeviceName')['rootDeviceName']
root_vol = conn.get_all_volumes(filters={"attachment.instance-id": instance_id, "attachment.device": root_device})[0]

print root_vol.create_time

Обратите внимание, что для этого требуется, чтобы роль IAM экземпляра имела разрешения ec2:DescribeInstanceAttribute и ec2:DescribeVolumes.

person Josh Hancock    schedule 10.12.2013

Как показано здесь:

http://boto.readthedocs.org/en/latest/ref/ec2.html#module-boto.ec2.instance

Каждый объект экземпляра имеет атрибут с именем launch_time, который содержит строку даты и времени IS08601, представляющую время запуска экземпляра.

В бото вы можете сделать что-то вроде этого:

import boto.ec2

conn = boto.ec2.connect_to_region('us-west-1')
reservations = conn.get_all_instances()
for r in reservations:
    for i in r.instances:
        print('%s\t%s' % (i.id, i.launch_time)
person garnaat    schedule 20.09.2013
comment
Но то же ли это, что и время творения? Я запутался между временем запуска и временем создания. :( - person megazoe; 20.09.2013
comment
Может быть, я смущен тем, что вы ищете. Время запуска сообщит вам, когда этот конкретный экземпляр был фактически запущен. Например, когда виртуальная машина была запущена и начала загружаться. Это то, что вы ищете? - person garnaat; 20.09.2013
comment
На самом деле нет, не равно. Если вы запустите экземпляр, остановите его на ночь и запустите утром, временем запуска будет утренняя дата, а не дата, когда вы впервые создали экземпляр. - person npiani; 20.11.2013
comment
@npiani AFAIK, время создания нигде не хранится в метаданных экземпляра. - person alko; 04.12.2013

Невозможно получить время создания экземпляра EC2 напрямую. Поскольку время запуска экземпляра EC2 будет обновляться при каждом запуске и остановке экземпляра.

Мы можем получить время создания экземпляра двумя способами:

1) Путем получения времени подключения к сетевому интерфейсу экземпляра

2) Получив время подключения тома, как показано выше.

Как получить время подключения сетевого интерфейса в boto3

import boto3
from datetime import datetime
instance_details = client.describe_instances()
num_ins=(len(instance_details['Reservations'])
for x in range(num_ins):


   InstanceID=(instance_details['Reservations'][x]['Instances'][0]['InstanceId'])
   NetworkInterfaceID = (instance_details['Reservations'][x]['Instances'][0]['NetworkInterfaces'][0]['NetworkInterfaceId'])
   NetworkInterface_details = client.describe_network_interfaces(NetworkInterfaceIds=[NetworkInterfaceID])
   networkinterface_id_attachedtime = NetworkInterface_details['NetworkInterfaces'][0]['Attachment']['AttachTime']

   print(networkinterface_id_attachedtime)

Печатает время подключения сетевого интерфейса для присутствующих экземпляров.

person Roopa    schedule 16.10.2019

если вы хотите рассчитать текущее время безотказной работы на основе времени запуска экземпляра EC2, можно попробовать следующее:

import datetime
lt_datetime = datetime.datetime.strptime(i.launch_time, '%Y-%m-%dT%H:%M:%S')
lt_delta = datetime.datetime.utcnow() - lt_datetime
uptime = str(lt_delta)
person andpei    schedule 04.12.2013