Python 获取已终止EC2实例的ID

Python 获取已终止EC2实例的ID,python,amazon-web-services,amazon-ec2,amazon-cloudwatch,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_nam

我正在尝试创建一个关于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')
通过使用以下命令列出实例,我在几个小时后(可能在您停止在仪表板中看到它们的同时)看不到终止的实例:

使用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?

除非启用了CloudTrail。您可以从CloudTrail dashboard获取过去7天所需的信息。如果需要7天以上的信息,则从S3存储桶获取文件(如果已配置)

CloudTrail会定期将您的活动作为对象存储在bucket中-请检查CloudTrail配置以获取bucket名称。数据存储为每天的压缩json文件。编写一个简单的Python脚本,下载所需日期的文件并逐个加载json文件,查找
TerminatedInstances
event。对于每个终止的实例,它都将包含诸如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

谢谢你,海洛夫。我以前从未使用过CloudTrail,我看到它记录API调用。包括AWS的电话吗?特别是-由于放大/缩小策略而自动发生的操作?是。所有API。我广泛使用它。
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