有没有办法轻松找出EC2实例上次停止的时间?通过查看ec2.get_only_instances()
变量,我可以从launch_time
获得发射时间。但是,它看起来好像停止时间存储在任何元数据中。
我们可能会使用rc#.d
脚本来实现这个关闭,但我只是想知道我是否可以通过boto
获取该信息。
你可以使用reason
实例的stopped
变量:
import boto.ec2
conn = boto.ec2.connect_to_region("eu-west-1")
reservations = conn.get_all_instances()
for r in reservations:
for i in r.instances:
if i.state == 'stopped':
print "%s [%s] %s" % (i.id, i.state, i.reason)
输出:
i-11223344 [stopped] User initiated (2013-12-20 13:59:08 GMT)
这也适用于terminated
实例(只要它们仍然显示)。
我认为更好的做法是:
import boto.ec2
conn = boto.ec2.connect_to_region("eu-west-1")
reservations = conn.get_all_instances()
instances = []
for reservation in reservations:
for instance in reservation.instances:
if "Name" in instance.tags.keys():
instances.append((instance.tags["Name"],
instance.get_console_output().timestamp))
您也可以替换if
并获得您想要的任何内容,但instance.get_console_output().timestamp
是获取实例停止时间戳的正确方法
请看这个,它返回ec2名称中的时间戳,它已停止在aws并且其颜色为红色。请注意,在运行之前设置包含凭据的aws配置文件环境。
import boto.ec2
class i_color:
red = '\033[31m'
reset = '\033[0m'
def name(i):
if 'Name' in i.tags:
n = i.tags['Name']
n = i_color.red + n + i_color.reset
return n
conn = boto.ec2.connect_to_region("us-east-1")
reservations = conn.get_all_instances()
for r in reservations:
for i in r.instances:
if i.state == 'stopped':
print "%s [%s] %s" % (name(i),i.state,i.reason)
样本输出:
test-ec2-temp05 [stopped] User initiated (2016-08-02 09:00:43 GMT)