【问题标题】:Filtering EC2 instances older than 24 hours using boto3 and python使用 boto3 和 python 过滤超过 24 小时的 EC2 实例
【发布时间】:2021-11-15 04:54:32
【问题描述】:

我想搜索超过 24 小时的 EC2 实例,以便我可以只清除可能未被任何人用于测试的实例。

我可以过滤在某个日期创建的实例,或者如果我只指定年份,我可以搜索该年创建的所有实例。但我不知道如何过滤在给定日期之前启动的实例。这是我所拥有的:

    session = get_aws_session()
    ec2 = session.resource("ec2", region_name=REGION)
    ssm = session.client("ssm")

    instances = list(
        ec2.instances.filter(
            Filters=[
                {"Name": "tag:Environment", "Values": ["test"]},
                {"Name": "launch-time", "Values": ["2021-09-21*"]},
            ]
        )
    )

【问题讨论】:

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


    【解决方案1】:

    您无法过滤实例的创建时间,只能过滤它们最后一次“启动”的时间(即它们最后一次启动的时间)。查找实例创建日期的最佳选择是使用根磁盘。查看this 了解有关该策略的更多信息。

    【讨论】:

      【解决方案2】:

      这就是解决我的问题的方法:

          session = get_aws_session()
          ec2 = session.resource("ec2", region_name=REGION)
          ssm = session.client("ssm")
      
          instances = list(
              ec2.instances.filter(
                  Filters=[
                      {"Name": "tag:Environment", "Values": ["test"]},
                      {"Name": "instance-state-name", "Values": ["running"]},
                  ]
              )
          )
      
          yesterday = (datetime.now() - timedelta(days=1)).timestamp()
      
          instances_over_24hours_old = list(
              filter(lambda instance: instance.launch_time.timestamp() < yesterday, instances)
          )
      

      注意:ec2 launch_time 值没有时区信息,所以我只使用了时间戳属性

      【讨论】:

        猜你喜欢
        • 2019-04-04
        • 1970-01-01
        • 2016-11-02
        • 2016-08-20
        • 1970-01-01
        • 2021-04-27
        • 2021-12-02
        • 2018-04-07
        • 2017-11-07
        相关资源
        最近更新 更多