是否可以确定(通过 boto)何时创建特定的 EC2 实例?
http://boto.readthedocs.org/en/latest/ref/ec2.html在这种情况下似乎没有提供任何帮助。需要找出一组特定 EC2 实例的创建日期。
谢谢!
是否可以确定(通过 boto)何时创建特定的 EC2 实例?
http://boto.readthedocs.org/en/latest/ref/ec2.html在这种情况下似乎没有提供任何帮助。需要找出一组特定 EC2 实例的创建日期。
谢谢!
create_time
EC2 实例没有调用属性,只有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 检索“创建时间”。
假设您使用的是 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
权限
无法直接获取 EC2 实例的创建时间。由于 EC2 实例的启动时间将在每次实例启动和停止时更新。
我们可以通过两种方式获取实例创建时间:
1)通过获取Instance的Network interface attach time
2)如上图所示,通过获取Volume attach time。
如何在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)
打印存在的实例的网络接口附加时间。
如此处所示:
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)
如果您想根据 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)