Terraform配置S3生命周期规则:如何过期指定目录下的对象?
修正后的配置
你现有的配置存在两个问题:一是prefix值拼写错误,和你实际使用的目录名不匹配;二是额外加了标签过滤规则,而你的目标文件没有对应标签,导致规则无法生效。直接使用以下配置即可实现需求:
lifecycle_rules = [ { id = "log" enabled = true prefix = "logs/" expiration = { days = 365 } } ]
配置说明
prefix参数逻辑
S3是对象存储,没有实际的文件系统目录结构,所有“路径”本质都是对象键(Object Key)的前缀字符串。比如你存放在logs目录下的file1,完整对象键是logs/file1;存放在failed_logs子目录下的file3,完整对象键是logs/failed_logs/file3。
当你把prefix设为logs/时,S3会自动匹配所有对象键以该字符串开头的对象,包含logs/下的所有一级文件和所有子目录下的文件,刚好覆盖你要自动过期的范围。
过滤范围验证
- 会命中规则自动过期的对象:所有
logs/目录及其子目录下的文件,完全符合你给出的file1~file4的过期时间要求 - 不会命中规则的对象:根目录下的所有文件,包括你要保留的
nonlogfile.exe、log_file_that_i_DONT_wanna_delete.log(后者的对象键开头是log_file,和logs/前缀不匹配,不会被误删)
- 会命中规则自动过期的对象:所有
标签过滤的删除原因
你不需要基于标签匹配对象,所以直接移除tags块即可,否则规则只会同时匹配前缀+对应标签的对象,你没给文件打标签的话规则不会生效。
内容的提问来源于stack exchange,提问作者Dimi
相关产品推荐
相关产品推荐

