如何找出最后一次停止EC2实例的时间

问题描述 投票:8回答:3

有没有办法轻松找出EC2实例上次停止的时间?通过查看ec2.get_only_instances()变量,我可以从launch_time获得发射时间。但是,它看起来好像停止时间存储在任何元数据中。

我们可能会使用rc#.d脚本来实现这个关闭,但我只是想知道我是否可以通过boto获取该信息。

python amazon-ec2 boto
3个回答
8
投票

你可以使用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实例(只要它们仍然显示)。


3
投票

我认为更好的做法是:

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是获取实例停止时间戳的正确方法


1
投票

请看这个,它返回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)
© www.soinside.com 2019 - 2024. All rights reserved.