首页 > 解决方案 > 标记 30 天后删除 s3 文件

问题描述

因此,使用我的应用程序,用户可以“软删除”上传的文件。这样做是用 deletedAt 和 expireAt 值更新 Mongo 文档。文件可以恢复,这些将从 mongo 文档中删除。我需要的是一种方法来标记 S3 上的对象,以便在它们被标记之日起30 天后删除。起初,我标记了每个对象并设置了生命周期规则。但是我现在明白它们只在对象的创建日期之后运行。

使用我的 S3 存储桶设置此系统的最佳(也是最有效)方法是什么?它真的每天都调用一个 Lambda 函数并列出具有特定标签的所有对象并检查日期吗?可能有数千万个物体。

标签: node.jsamazon-web-servicesamazon-s3

解决方案


生命周期规则文档中隐藏了一些内容,可为您提供处理此问题的方法。

首先,过期时间实际上是基于对象最后修改的时间戳:

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”“到期”标签的对象。

如果您为不同日期创建这些对象的列表,则可以通过添加适当的标签来标记要在将来特定时间删除的对象。您创建的确切规则数量取决于文件是否存在多几天的重要性。


推荐阅读