Terraform:如何在azurerm_storage_management_policy中正确调用容器名列表变量
解决Terraform存储账户生命周期策略的prefix_match错误
你遇到的错误本质是Azure存储生命周期管理策略的限制:每个规则(rule)的prefix_match最多支持10个前缀条目,而你一次性传入了30多个容器名,超出限制导致provider返回了不准确的错误提示。另外,直接使用容器名作为前缀会匹配所有以该名称开头的blob(跨容器),正确的前缀格式应该是容器名/来匹配目标容器下的所有blob。
修正后的代码
variables.tf(无需修改)
variable "containername" { type = list(string) default = [] }
input.tfvars(无需修改,保持原容器名列表)
containername = ["a", "b", "c", "d", "e", "f", "g".................................]
main.tf(核心修改)
locals { # 给每个容器名添加斜杠,确保匹配该容器下的所有blob prefixes = [for name in var.containername : "${name}/"] # 将前缀列表按每组10个拆分,符合Azure的限制 prefix_groups = chunk(local.prefixes, 10) } # 输出验证分组结果(可选) output "prefix_groups" { value = local.prefix_groups } resource "azurerm_storage_management_policy" "lifecycle" { storage_account_id = azurerm_storage_account.sa.id # 动态生成多个规则,每个规则处理最多10个容器前缀 dynamic "rule" { for_each = local.prefix_groups content { name = "Rule-${rule.index + 1}" enabled = true filters { prefix_match = rule.value blob_types = ["blockBlob"] } actions { base_blob { delete_after_days_since_modification_greater_than = 15 } snapshot { delete_after_days_since_creation_greater_than = 15 } } } } }
关键说明
- 前缀格式修正:添加
/确保只匹配目标容器内的所有blob,避免跨容器的误匹配。 - 拆分规则:使用
chunk函数将30+个容器分成每组10个的子列表,通过dynamic "rule"自动生成对应数量的规则,符合Azure的限制。 - 移除冗余代码:原代码中
local.folderlist1和local.list1是不必要的直接复制,已删除简化逻辑。
内容的提问来源于stack exchange,提问作者Izzy
相关产品推荐
相关产品推荐

