You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform如何仅当delete_retention_policy_days变量大于0时启用对应配置块

实现方案

使用Terraform原生的dynamic动态块配合条件判断即可实现,是目前最简洁的实现方式。

你可以将原有资源中的blob_properties块修改为如下写法:

resource "azurerm_storage_account" "example2" {
  name                     = var.azurerm_storage_account_name
  resource_group_name      = azurerm_resource_group.parameters.name
  location                 = azurerm_resource_group.parameters.location
  account_tier             = var.azurerm_storage_account_account_tier
  account_replication_type = var.azurerm_storage_account_account_replication_type
  allow_blob_public_access = var.azurerm_storage_account_allow_blob_public_access

  blob_properties {
    # 动态控制是否生成删除保留策略块
    dynamic "delete_retention_policy" {
      for_each = var.delete_retention_policy_days > 0 ? [1] : []
      content {
        days = var.delete_retention_policy_days
      }
    }
    versioning_enabled = true
    change_feed_enabled = true
  }
}

逻辑说明

  • 当var.delete_retention_policy_days取值大于0时,for_each会得到长度为1的列表,渲染1个完整的delete_retention_policy块,正常启用保留策略
  • 当var.delete_retention_policy_days取值为0时,for_each得到空列表,不会生成该块,即不启用删除保留策略

可选优化:增加变量校验

可以在变量定义时增加校验规则,避免传入不符合Azure规范的无效值(Azure存储删除保留策略合法天数范围为1~365):

variable "delete_retention_policy_days" {
  type        = number
  description = "存储账户Blob删除保留策略天数,设置为0表示不启用该策略"
  default     = 0
  validation {
    condition     = var.delete_retention_policy_days >= 0 && var.delete_retention_policy_days <= 365
    error_message = "删除保留策略天数必须介于0到365之间,设置为0表示不启用该策略。"
  }
}

内容的提问来源于stack exchange,提问作者user3622142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:06:02