在启用了版本控制的 Amazon S3 存储桶中,配置生命周期规则以安全删除旧版本并防止误删,关键在于理解不同动作对当前版本与非当前版本的处理逻辑。

首先,需明确 Expiration(过期)动作在版本控制开启时的行为差异。对于非当前版本,NoncurrentVersionExpiration 动作会永久删除它们;但对于当前版本,若其本身不是删除标记(delete marker),直接执行 Expiration 并不会立即永久移除对象,而是会添加一个新的删除标记,使原版本变为非当前版本。只有当所有版本均被删除,且仅剩一个 version ID 为 null 的删除标记时,该对象才会被彻底移除。

为避免在数据最终一致性传播期间意外丢失可恢复的对象,文档建议优先采用“复制旧版本到新位置”的方法(Method 1),而非直接永久删除当前版本。这是因为 S3 采用最终一致性模型,当前版本的删除可能在生命周期规则执行前尚未完全生效,导致原本计划保留的非当前版本被误删。

此外,NoncurrentVersionTransition 动作仅作用于非当前版本,不影响当前版本。若需管理非当前版本,必须同时指定 <NoncurrentDays> 和 <NewerNoncurrentVersions> 参数,且两者条件均需满足。例如,可设置保留最近 3 个非当前版本,其余版本在成为非当前后 5 天自动删除,从而为误操作提供缓冲期。

配置时还需注意:若规则中包含多个过滤器(如前缀与标签组合),需使用 <And> 元素包裹;若未指定过滤器,则规则适用于桶内所有对象。同时,ObjectSizeGreaterThan/ LessThan 等大小过滤不包含边界值,例如设置大于 128KB 且小于 1024KB 的范围时,恰好等于边界的对象不会被处理。

最后,AbortIncompleteMultipartUpload 和 ExpiredObjectDeleteMarker 动作可用于清理未完成的多部分上传或过期删除标记,但不可与基于标签的过滤器共存。通过合理组合这些元素,可在保障数据可恢复性的前提下实现自动化的存储生命周期管理。

信息来源