获取已终止的EC2实例的ID

时间:2016-02-04 09:27:41

标签: python amazon-web-services amazon-ec2 amazon-cloudwatch

我正在尝试创建一份关于EC2实例使用率和利用率的报告。我想检查过去X天在我的环境中运行或已运行的所有实例。作为报告的一部分,我希望包括在比例组扩展期间创建的实例,但随后在组缩放时终止。

使用带有boto3的简单python脚本,我可以获取某个区域的实例列表:

session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=self.name)
ec2 = session.resource('ec2')
cloudwatch = session.resource('cloudwatch')

通过列出实例,使用以下命令,我几小时后看不到终止的实例(可能是在仪表板中停止看到它们的同时):

ec2.instances.all()

使用cloudwatch,当我使用以下命令时,我确实看到已终止实例的指标:

metric = cloudwatch.Metric('AWS/EC2', 'CPUUtilization')
result = metric.get_statistics(
Dimensions=[{'Name': 'InstanceId', 'Value': instanceId}],
        StartTime=timeRange.start,
        EndTime=timeRange.end,
        Period=300,
        Statistics=['Average'],
) # This returns a complete list of data points for the instance was live

这意味着终止实例的指标确实存在,但您必须拥有这些实例的ID才能检索它们。 有没有办法检索已终止的实例ID?

1 个答案:

答案 0 :(得分:2)

除非您启用了CloudTrail,否则不会。您可以从CloudTrail仪表板获取过去7天所需的信息。如果您需要超过7天的信息,请从S3存储桶中获取文件(如果已配置)。

CloudTrail会定期将您的活动存储为存储桶中的对象 - 请检查您的CloudTrail配置以获取存储桶名称。数据存储为每天的压缩json文件。编写一个简单的Python脚本来下载所需的日期并逐个加载json文件,查找TerminatedInstances事件。对于每个终止的实例,它将具有像instanceid这样的信息,谁终止它,从何处,何时等,

代码段:

for event in events:
    if event['eventName'] == 'TerminateInstances':
        inst_ids = [item['instanceId'] for item in event['requestParameters']['instancesSet']['items']]
        print 'Terminated instance IDs:', inst_ids