AWS S3 删除未访问过的文件

问题描述 投票:0回答:3

我正在编写一项服务,可以截取大量 URL 的屏幕截图并将它们保存在公共 S3 存储桶中。
由于存储成本,我想定期清除上述存储桶并删除过去 X 天内未访问过的每个屏幕截图
“访问”是指通过 GET 请求下载或获取。

我查看了文档,发现了很多为 S3 对象定义过期策略的方法,但找不到在外部访问文件后将其“标记”为已读的方法。

有没有一种方法可以在没有代码的情况下定义定期清除(仅AWS规则/服务)? API 是否允许这样做,或者我是否需要开始实施外部解决方法?

amazon-web-services amazon-s3 amazon-s3-select
3个回答
2
投票

您可以使用Amazon S3存储类分析

通过使用 Amazon S3 分析存储类分析,您可以分析存储访问模式,以帮助您决定何时将正确的数据转换到正确的存储类。这项新的 Amazon S3 分析功能观察数据访问模式,帮助您确定何时将访问频率较低的 STANDARD 存储转换为 STANDARD_IA(IA,用于不频繁访问)存储类别。

存储类分析观察一段时间内过滤后的一组数据的不频繁访问模式后,您可以使用分析结果来帮助您改进生命周期策略

即使您不使用它来更改存储类别,您也可以使用它来发现哪些对象不被频繁访问。


0
投票

AWS不提供此类服务。您必须编写自己的解决方案。


0
投票

您可以使用AWS博客中提到的这个解决方案。它基于 S3 库存和 S3 服务器访问日志。总之,Lambda 将运行 Athena 查询来选择需要删除的对象。

这是架构流程:

  1. S3 服务器访问日志捕获 S3 对象请求。这些都是 生成并存储在目标 S3 存储桶中。
  2. 每天为源存储桶生成 S3 库存报告。它被写入 S3 库存目标存储桶。
  3. 配置了 Amazon EventBridge 规则,该规则将每天启动一次 AWS Lambda 函数,或根据需要启动。
  4. Lambda 函数启动 S3 批量操作作业来标记源存储桶中的对象。这些必须使用以下逻辑过期:
    • 从 S3 生命周期捕获天数 (x) 配置 配置。
    • 运行 Amazon Athena 查询将获取以下列表 来自 S3 库存报告和服务器访问日志的对象。创建一个 包含早于“x”天创建的对象的增量列表,但是 在此期间未访问。
    • 将包含这些对象列表的清单文件写入 S3 存储桶。
    • 创建一个 S3 批量操作作业,该作业将使用“delete=True”标签来标记清单文件中的所有对象。
  5. 源 S3 存储桶上的生命周期规则将使所有对象过期 是在“x”天之前创建的。他们将通过以下方式获得标签 “delete=True”的S3批量操作

Object expiry architecture flow https://aws.amazon.com/blogs/architecture/expiring-amazon-s3-objects-based-on-last-accessed-date-to-decrease-costs/

© www.soinside.com 2019 - 2024. All rights reserved.