node.js - 标记 30 天后删除 s3 文件
问题描述
因此,使用我的应用程序,用户可以“软删除”上传的文件。这样做是用 deletedAt 和 expireAt 值更新 Mongo 文档。文件可以恢复,这些将从 mongo 文档中删除。我需要的是一种方法来标记 S3 上的对象,以便在它们被标记之日起30 天后删除。起初,我标记了每个对象并设置了生命周期规则。但是我现在明白它们只在对象的创建日期之后运行。
使用我的 S3 存储桶设置此系统的最佳(也是最有效)方法是什么?它真的每天都调用一个 Lambda 函数并列出具有特定标签的所有对象并检查日期吗?可能有数千万个物体。
解决方案
生命周期规则文档中隐藏了一些内容,可为您提供处理此问题的方法。
首先,过期时间实际上是基于对象最后修改的时间戳:
Amazon S3 仅维护每个对象的最后修改日期。例如,Amazon S3 控制台在对象属性窗格中显示上次修改日期。当您最初创建一个新对象时,该日期反映了该对象的创建日期。如果替换对象,日期会相应更改。因此,当我们使用术语创建日期时,它与术语最后修改日期同义。
因此,如果您确保“最后修改”时间戳在您添加标签的同时发生变化,而不是之后,您可以使用 30 天的到期时间。
更可靠的是,您可以创建指定日期而不是年龄的规则:
在 S3 生命周期规则中指定操作时,您可以指定希望 Amazon S3 采取操作的日期。当特定日期到来时,Amazon S3 将操作应用于所有符合条件的对象(基于筛选条件)。
似乎没有一个例子表明这一点,文档只是说:
日期值必须符合 ISO 8601 格式。时间始终为 UTC 午夜。
所以我认为你需要以编程方式创建看起来像这样的规则:
<LifecycleConfiguration>
<Rule>
<ID>Expire-2022-01-01</ID>
<Tag>
<Key>expiry</Key>
<Value>2022-01-01</Value>
</Tag>
<Status>Enabled</Status>
<Expiration>
<Date>2022-01-01</Date>
</Expiration>
</Rule>
</LifecycleConfiguration>
如果我正确理解了文档,则此示例意味着应在 2022 年 1 月 1 日 UTC 午夜删除任何带有“2022-01-01”“到期”标签的对象。
如果您为不同日期创建这些对象的列表,则可以通过添加适当的标签来标记要在将来特定时间删除的对象。您创建的确切规则数量取决于文件是否存在多几天的重要性。
推荐阅读
- c++ - 如何在 C++ 中拆分没有 stringstream 和 strtok 的字符串(提取单词)?
- reactjs - AppBar中左右对齐的图标都带有material-ui next
- ios - 尝试使用 FileManager 移动项目时出错
- html - 间距调整
行标签 - python - 如何在 Python 井字游戏中切换玩家
- java - 使用 KeyListener 移动矩形
- sql - 如何在sql中更新具有平均每周值的列
- angular - Nebular NbEmailPassAuthProvider 显然调用了 API 方法,但 NbLoginComponent 仍然显示“出现问题”消息
- jquery - 如何在 jquery 'each' 循环中对 json 值进行分组和排序
- mysql - 无法在我的实时服务器上维护数据库连接,在本地工作正常。节点.js + mysql