AWS S3 如何将超期文件归档至日期前缀文件夹及配置生命周期规则
S3 过期文件归档与生命周期规则配置方案
归档实现逻辑
你提到的用定时触发Lambda的方案是当前最适配该需求的实现方式,可补充以下执行注意事项:
- 扫描桶内对象时调用S3
list_objects_v2接口需开启分页处理,避免桶内文件量过大导致Lambda执行超时 - S3不存在原生的「移动文件」操作,实际执行逻辑为
copy_object拷贝目标文件到新的日期前缀路径,校验拷贝后的文件大小、ETag与原文件一致后,再调用delete_object删除原文件 - 可以搭配EventBridge Cron触发器按天执行即可,无需过高的触发频率
生命周期规则配置说明
S3 Lifecycle规则的Prefix字段不支持通配符匹配,针对你的场景可选择以下两种配置方案:
方案1(推荐,规则作用范围更精准)
调整Lambda归档逻辑,将所有日期前缀的归档目录统一放在一个公共父级目录下,例如归档路径调整为archive/20210826/c.txt,此时Prefix指定为公共父级目录即可,规则只会作用于所有归档文件:
LifecycleConfiguration: Rules: - Id: DeletionRule Prefix: 'archive/' Status: Enabled ExpirationInDays: !FindInMap [EnvironmentsMap, !Ref env, S3FileRetentionIndays]
方案2(无需调整现有归档路径)
直接将Prefix字段留空即可,规则会作用于整个桶的所有对象。因为你设置的文件保留天数肯定大于Lambda归档的触发阈值(例如归档阈值为7天,保留天数设为30天),根目录的文件最多留存7天就会被Lambda移动到归档目录,不会到达过期删除的触发时间,不会出现误删根目录有效文件的问题:
LifecycleConfiguration: Rules: - Id: DeletionRule Prefix: '' Status: Enabled ExpirationInDays: !FindInMap [EnvironmentsMap, !Ref env, S3FileRetentionIndays]
内容的提问来源于stack exchange,提问作者Patrick C.
相关产品推荐
相关产品推荐

