【问题标题】:获取终止的 EC2 实例的 ID
【发布时间】:2016-05-13 20:04:33
【问题描述】:

我正在尝试创建一份关于一段时间内我们的 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?

【问题讨论】:

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


    【解决方案1】:

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

    CloudTrail 会定期将您的活动作为对象存储在您的存储桶中 - 检查您的 CloudTrail 配置以获取存储桶名称。每天的数据都存储为压缩的 json 文件。写一个简单的Python脚本,下载你想要的那一天的文件,并一个一个加载json文件,寻找TerminatedInstances事件。对于每个终止的实例,它都会包含诸如 instanceid、谁终止它、从哪里终止、何时终止等信息,

    代码sn-p:

    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。我广泛使用它。
    【解决方案2】:

    您可以使用 instance-state-name:

    实例的状态(挂起 | 运行 | 关闭 | 终止|停止|停止)。

    ec2 = boto3.client('ec2')
    reservations = ec2.describe_instances(Filters=[
        {
            "Name": "instance-state-name",
            "Values": ["terminated"],
        }
    ]).get("Reservations")
    
    for reservation in reservations:
        for instance in reservation["Instances"]:
            instance_id = instance["InstanceId"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2015-05-13
      • 2018-04-18
      • 2012-05-19
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多