S3 生命周期策略删除没有特定标记值的所有对象
S3 Lifecycle Policy Delete All Objects WITHOUT A Certain Tag Value
在阅读 this S3 Lifecycle Policy document 时,我发现可以删除包含特定 key=value 对的 S3 对象,例如
<LifecycleConfiguration>
<Rule>
<Filter>
<Tag>
<Key>key</Key>
<Value>value</Value>
</Tag>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
但是是否可以创建一个类似的规则来删除 key=value 对中的任何对象 NOT?例如,无论何时访问我的对象,我都可以使用当前日期更新它的标签,例如 object-last-accessed=07-26-2019
。然后我可以创建一个 Lambda 函数,每天删除当前的 S3 生命周期策略,然后创建一个新的生命周期策略,其中每一天都有一个最近 30 天的标签,然后我的生命周期策略将自动删除在最近 30 天;访问时间超过 30 天的任何内容的日期值都将早于生命周期策略中的任何值,因此它将被删除。
这是我想要的示例(注意我添加了所需的字段 <exclude>
、
<LifecycleConfiguration>
<Rule>
<Filter>
<exclude>
<Tag>
<Key>last-accessed</Key>
<Value>07-30-2019</Value>
</Tag>
...
<Tag>
<Key>last-accessed</Key>
<Value>07-01-2019</Value>
</Tag>
<exclude>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
是否可以像我虚构的 <exclude>
值一样?我想删除过去 30 天内未访问过的所有 S3 对象(这与超过 30 天的对象不同)。
据我了解,这是可能的,但需要通过不同的机制。
我的解决方案是采用稍微不同的方法,为每个对象设置一个标签,然后根据需要更改该标签。
因此,在您的实例中,当创建对象时,将对象上次访问设置为 "default" 通过 S3 触发器对一段 Lambda 或当对象写入 S3 时执行此操作。
访问对象时,将标签值更新为当前日期。
如果您已经有一个装满对象的存储桶,您可以使用 S3 批处理将标签设置为当前日期,并将其用作增量参考点,从中假定文件是上次访问的
https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html
现在设置生命周期规则以在 10 天(或任何您想要的)后删除带有 "default" 标签的对象。
添加附加规则以删除带有日期标记的文件,该日期在该日期之后 10 天。您需要定期更新生命周期规则,但一次可以创建 1000 个。
该文档提供了规则的正式细节
https://docs.aws.amazon.com/AmazonS3/latest/API/API_LifecycleRule.html
我建议这样
<LifecycleConfiguration>
<Rule>
<ID>LastAccessed Default Rule</ID>
<Filter>
<Tag>
<Key>object-last-accessed</Key>
<Value>default</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>10</Days>
</Expiration>
</Rule>
<Rule>
<ID>Last Accessed 2020-05-19 Rule</ID>
<Filter>
<Tag>
<Key>object-last-accessed</Key>
<Value>2020-05-19</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Date>2020-05-29</Date>
</Expiration>
</Rule>
</LifecycleConfiguration>
进一步阅读,当我遇到这个问题时,另一种方法是只使用对象锁定保留模式,它允许您在存储桶上设置默认保留,然后将该保留期更改为文件被访问。这适用于版本级别,即每个版本保留一段时间而不是整个文件,因此可能不适合所有人。 https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-modes
中有更多详细信息
在阅读 this S3 Lifecycle Policy document 时,我发现可以删除包含特定 key=value 对的 S3 对象,例如
<LifecycleConfiguration>
<Rule>
<Filter>
<Tag>
<Key>key</Key>
<Value>value</Value>
</Tag>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
但是是否可以创建一个类似的规则来删除 key=value 对中的任何对象 NOT?例如,无论何时访问我的对象,我都可以使用当前日期更新它的标签,例如 object-last-accessed=07-26-2019
。然后我可以创建一个 Lambda 函数,每天删除当前的 S3 生命周期策略,然后创建一个新的生命周期策略,其中每一天都有一个最近 30 天的标签,然后我的生命周期策略将自动删除在最近 30 天;访问时间超过 30 天的任何内容的日期值都将早于生命周期策略中的任何值,因此它将被删除。
这是我想要的示例(注意我添加了所需的字段 <exclude>
、
<LifecycleConfiguration>
<Rule>
<Filter>
<exclude>
<Tag>
<Key>last-accessed</Key>
<Value>07-30-2019</Value>
</Tag>
...
<Tag>
<Key>last-accessed</Key>
<Value>07-01-2019</Value>
</Tag>
<exclude>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
是否可以像我虚构的 <exclude>
值一样?我想删除过去 30 天内未访问过的所有 S3 对象(这与超过 30 天的对象不同)。
据我了解,这是可能的,但需要通过不同的机制。
我的解决方案是采用稍微不同的方法,为每个对象设置一个标签,然后根据需要更改该标签。 因此,在您的实例中,当创建对象时,将对象上次访问设置为 "default" 通过 S3 触发器对一段 Lambda 或当对象写入 S3 时执行此操作。
访问对象时,将标签值更新为当前日期。
如果您已经有一个装满对象的存储桶,您可以使用 S3 批处理将标签设置为当前日期,并将其用作增量参考点,从中假定文件是上次访问的
https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html
现在设置生命周期规则以在 10 天(或任何您想要的)后删除带有 "default" 标签的对象。 添加附加规则以删除带有日期标记的文件,该日期在该日期之后 10 天。您需要定期更新生命周期规则,但一次可以创建 1000 个。 该文档提供了规则的正式细节 https://docs.aws.amazon.com/AmazonS3/latest/API/API_LifecycleRule.html 我建议这样
<LifecycleConfiguration>
<Rule>
<ID>LastAccessed Default Rule</ID>
<Filter>
<Tag>
<Key>object-last-accessed</Key>
<Value>default</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>10</Days>
</Expiration>
</Rule>
<Rule>
<ID>Last Accessed 2020-05-19 Rule</ID>
<Filter>
<Tag>
<Key>object-last-accessed</Key>
<Value>2020-05-19</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Date>2020-05-29</Date>
</Expiration>
</Rule>
</LifecycleConfiguration>
进一步阅读,当我遇到这个问题时,另一种方法是只使用对象锁定保留模式,它允许您在存储桶上设置默认保留,然后将该保留期更改为文件被访问。这适用于版本级别,即每个版本保留一段时间而不是整个文件,因此可能不适合所有人。 https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-modes
中有更多详细信息