【问题标题】:Identifying and deleting S3 Objects that are not being accessed?识别和删除未被访问的 S3 对象?
【发布时间】:2019-03-28 13:34:18
【问题描述】:

我最近加入了一家公司,该公司将 S3 存储桶用于 AWS 中的各种不同项目。我想识别并可能删除未被访问(读取和写入)的 S3 对象,以降低我的 AWS 账户中的 S3 成本。

我阅读了this,这在一定程度上帮助了我。

有没有办法找出哪些对象正在被访问,哪些未被访问?

【问题讨论】:

  • 这个问题没有足够的信息来帮助回答它。未使用的对象到底是什么意思?
  • 抱歉。我的意思是任何其他 AWS 服务都没有使用的对象
  • 你应该知道如何使用你的对象。但是,您可以启用 S3 日志并检查它,您的对象使用了哪个。

标签: amazon-web-services amazon-s3


【解决方案1】:

其他 AWS 服务需要 Amazon S3 中的任何对象,但您可能已将服务配置为使用这些文件。

例如,您可能通过 Amazon CloudFront 提供内容、为 AWS CloudFormation 提供模板或对存储在 Amazon S3 中的视频进行转码。

如果您没有创建这些文件并且您没有故意使用这些文件,您可以删除它们吗?但是将是唯一知道它们是否有必要的人。

【讨论】:

  • 是的,我很高兴收到您的回复。在这里,在我的新公司,我的情况就像我不知道使用了哪些 S3 存储桶以及为什么创建它们。现在我正在弄清楚所有已经开发的项目。所以这就是为什么我想知道当前正在使用哪些 S3 对象。我在想正确的方向吗?有没有办法通过脚本找出来?我发现 Amazon Athena 会帮我解决这个问题。但我对此一无所知。
  • 存储成本通常比您确定数据是否重要或是否被使用所花费的时间便宜。这就像一个在线照片集 - 存储所有内容比花时间整理不需要的照片更便宜。所以,你当然可以在未来做得更好,但可能不值得担心旧的东西。只要确保它不能公开访问即可。
  • :) 是的,我也是这么想的。但我只是好奇知道有什么解决方案。谢谢。
  • @Subbu 您指的是 S3 中的对象“正在使用”这一事实存在问题。这不是真正应该问的问题,因为它没有有意义的答案。我孩子们年轻时的视频和照片没有“使用”,但我绝对不希望它们被删除……除了问我之外,没有任何技术手段可以让任何人了解这一点。您需要了解创建对象的原因、创建者和目的。撇开不管,S3为对象消耗的实际存储空间计费——没有什么“未使用”。
  • 感谢您的所有回复。我很高兴与您进行了很好的讨论。
【解决方案2】:

目前没有本地方法可以做到这一点,因此所有选项都是变通方法,具体取决于您的用例。

你有几个选择:

  1. 标记每个 S3 对象(例如 2018-10-24)。首先为您的 S3 存储桶打开 Object Level Logging。为 CloudTrail 设置 CloudWatch Events。然后可以通过在 CloudWatch Event 上运行的 Lambda 函数更新标签,该函数在 Get 事件上触发。然后创建一个在Scheduled CloudWatch Event 上运行的函数,以删除今天之前带有日期标签的所有对象。
  2. 查询 CloudTrail 日志,编写一个自定义函数来查询来自Object Level CloudTrail Logs 的最后访问时间。这可以通过 Athena 或直接查询 S3 来完成。
  3. 在 DynamoDB 之类的东西中创建一个单独的索引,您可以在应用程序的读取活动中对其进行更新。
  4. S3 Bucket / 键前缀上使用生命周期策略,在 x 天后存档或删除对象。这是基于上传时间而不是上次访问时间,因此您可以将对象copy 设置为自身以重置时间戳并重新启动时钟。

【讨论】:

    【解决方案3】:

    最近有一篇 AWS 博客文章,我发现解决此问题的方法非常有趣且成本优化。

    这是来自 AWS 博客的描述:

    1. S3 服务器访问日志捕获 S3 对象请求。这些生成并存储在目标 S3 存储桶中。

    2. 每天都会为源存储桶生成一份 S3 清单报告。它被写入 S3 清单目标存储桶。

    3. 配置了一个 Amazon EventBridge 规则,它将每天或根据需要启动一次 AWS Lambda 函数。

    4. Lambda 函数启动 S3 批量操作作业 以标记源存储桶中的对象。这些必须使用以下逻辑过期:

    • 从 S3 生命周期配置中捕获天数 (x) 配置。
    • 运行 Amazon Athena 查询,该查询将从 S3 清单报告和服务器访问日志中获取对象列表。创建一个增量列表,其中包含早于“x”天创建但在此期间未访问的对象。
    • 将包含这些对象列表的清单文件写入 S3 存储桶。
    • 创建一个 S3 Batch 操作作业,该作业将使用“delete=True”标签标记清单文件中的所有对象。
    1. 源 S3 存储桶上的生命周期规则将使在“x”天之前创建的所有对象过期。它们将具有通过“delete=True”的 S3 批处理操作给出的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-07
      • 2012-04-19
      • 1970-01-01
      • 2017-10-21
      • 2017-07-28
      • 1970-01-01
      • 2021-09-13
      • 2014-12-31
      相关资源
      最近更新 更多