确定Amazon EC2实例创建日期/时间

时间:2013-09-20 11:53:27

标签: python amazon-web-services amazon-ec2 boto ec2-api-tools

是否可以确定(通过boto)何时创建特定的EC2实例?

在这种情况下,

http://boto.readthedocs.org/en/latest/ref/ec2.html似乎没有提供任何帮助。需要找出一组特定EC2实例的创建日期。

谢谢!

5 个答案:

答案 0 :(得分:4)

对于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及其实例ID和名称记录到DynamoDB等某个位置,以便您可以检索"创建倍"无论何时您想使用实例ID。

答案 1 :(得分:3)

如下所示:

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

每个Instance对象都有一个名为launch_time的属性,该属性包含一个表示实例启动时间的IS08601日期时间字符串。

在boto中,你可以这样做:

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)

答案 2 :(得分:2)

假设您正在使用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:DescribeInstanceAttributeec2:DescribeVolumes权限

答案 3 :(得分:1)

如果您想根据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)

答案 4 :(得分:1)

不可能直接获得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)

为存在的实例打印网络接口的附加时间。