如何在AWS S3生命周期过期前缀规则中使用正则匹配并通过Terraform实现
实现方案说明
首先要明确一个S3的基础限制:S3生命周期规则的前缀匹配不支持正则表达式,你提到的/*/5.1[1-3]/格式的正则无法直接在S3生命周期规则中使用,只能通过显式指定匹配前缀的方式实现需求。
下面是两种可行的Terraform实现方式:
方案1:单条规则匹配多个前缀(推荐,仅需配置一条规则)
如果你的目标文件夹都是存放在同一个根前缀下,或者你需要匹配的就是对应路径下的5.11/、5.12/、5.13/前缀,你可以通过Terraform的动态块批量配置前缀过滤,规则会统一对所有匹配前缀的对象生效。
示例代码如下:
resource "aws_s3_bucket" "example" { bucket = "替换为你的存储桶名称" } # 生命周期规则配置 resource "aws_s3_bucket_lifecycle_configuration" "example" { bucket = aws_s3_bucket.example.id rule { id = "archive-5.11-5.13-folders" status = "Enabled" # 动态生成三个前缀的过滤条件 dynamic "filter" { for_each = toset(["5.11/", "5.12/", "5.13/"]) content { prefix = filter.value } } # 归档配置,这里示例是30天后归档到S3 Glacier Flexible Retrieval,可按需修改 transition { days = 30 storage_class = "GLACIER" } # 如需配置过期删除等其他策略可补充对应块,不需要可直接删除 # expiration { # days = 365 # } } }
注意:如果你的
5.11/等文件夹都放在固定的上级目录下,比如所有文件夹都在projects/下面,就把前缀改成projects/5.11/这种完整前缀即可。
方案2:针对每个文件夹单独配置规则
如果需要为不同版本的文件夹配置不同的归档周期,可以拆成多条独立规则:
resource "aws_s3_bucket_lifecycle_configuration" "example" { bucket = aws_s3_bucket.example.id # 5.11文件夹归档规则 rule { id = "archive-5.11" status = "Enabled" filter { prefix = "5.11/" } transition { days = 30 storage_class = "GLACIER" } } # 5.12文件夹归档规则 rule { id = "archive-5.12" status = "Enabled" filter { prefix = "5.12/" } transition { days = 30 storage_class = "GLACIER" } } # 5.13文件夹归档规则 rule { id = "archive-5.13" status = "Enabled" filter { prefix = "5.13/" } transition { days = 30 storage_class = "GLACIER" } } }
验证方式
配置完成执行terraform plan确认规则无误后apply即可,你可以在AWS S3控制台的存储桶「管理」标签页下的生命周期规则中核对生成的规则是否正确。
内容的提问来源于stack exchange,提问作者Devesh mehta
相关产品推荐
相关产品推荐

