在启用了版本控制的 Amazon S3 存储桶中,管理对象生命周期需要组合使用多种规则动作。针对保留 5 个非当前版本并归档至 S3 Glacier Flexible Retrieval、同时清理过期删除标记的需求,需配置包含 Transition、NoncurrentVersionTransition、NoncurrentVersionExpiration 及 ExpiredObjectDeleteMarker 的规则。
首先,对于当前版本(Current Version),若预期访问频率降低,可使用 Transition 动作将其在创建后 90 天移至 S3 Standard-IA。其次,针对非当前版本(Noncurrent Versions),需设置 NoncurrentVersionTransition 动作,使其在变为非当前状态后 30 天自动过渡到 S3 Glacier Flexible Retrieval 存储类。
关于版本保留与清理,需配置 NoncurrentVersionExpiration 动作。该动作要求同时满足两个条件:对象变为非当前状态的时长(NoncurrentDays)以及超过指定数量的较新版本数(NewerNoncurrentVersions)。例如,设置 NewerNoncurrentVersions 为 5 且 NoncurrentDays 为 365 天,意味着只有当某个版本成为非当前版本后,且其前方存在至少 5 个更新的非当前版本时,该版本才会被永久删除。若需仅保留 5 个非当前版本,则需确保配置中的 NewerNoncurrentVersions 值大于待保留版本数(如设为 6),以便系统能正确识别并归档或清理目标版本。
对于过期删除标记(Expired Object Delete Marker)的处理,当 NoncurrentVersionExpiration 动作执行后,若导致对象仅剩删除标记且无有效数据版本,该标记即成为“过期”。此时,可在同一规则中配置 Expiration 动作,并将 ExpiredObjectDeleteMarker 元素设为 true。此设置指示 S3 自动移除这些过期的删除标记。
需注意,当使用 ExpiredObjectDeleteMarker 标签时,规则无法指定基于标签的过滤器(Tag-based filter)。此外,若当前版本遵循明确的生命周期,也可单独使用 Expiration 动作配合 Days 属性直接清理当前版本;若当前版本无明确生命周期,则依赖 NoncurrentVersionExpiration 清理非当前版本后产生的过期标记。S3 会优先执行永久删除,其次才是过渡操作,且当对象同时符合多个过渡条件时,会选择归档至 Glacier Flexible Retrieval 的操作。