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

Terraform:存储账户类型为FileStorage时忽略blob_properties配置

解决Azure存储账户根据account_kind控制blob_properties块的问题

错误原因分析

  • 错误1:你定义的dynamic "ignore_filestorage"块是非法的,azurerm_storage_account的blob_properties下不存在名为ignore_filestorage的嵌套块类型,Terraform无法识别这个自定义块名。
  • 错误2:比较条件里的FileStorage没有加引号,Terraform会将其视为资源类型引用而非字符串字面量,因此抛出"必须指定资源名称"的错误。

正确实现方式

要实现"当account_kind为FileStorage时忽略blob_properties配置",需要用dynamic块直接控制整个blob_properties块的创建,而非在其内部嵌套自定义dynamic块。具体代码如下:

resource "azurerm_storage_account" "sa" {
  name                      = var.name
  location                  = var.location
  resource_group_name       = var.resource_group_name
  account_kind              = var.account_kind
  account_tier              = var.account_tier
  account_replication_type  = var.replication_type
  min_tls_version           = "TLS1_2"
  enable_https_traffic_only = true

  # 动态控制blob_properties块是否创建
  dynamic "blob_properties" {
    # 当account_kind不是FileStorage时生成该块,否则跳过
    for_each = var.account_kind != "FileStorage" ? [true] : []
    content {
      delete_retention_policy {
        days = var.blob_retention_days
      }
      container_delete_retention_policy {
        days = var.container_retention_days
      }
    }
  }
}

代码说明

  • dynamic "blob_properties":指定要动态生成的块类型为blob_properties,这是azurerm_storage_account支持的合法嵌套块。
  • for_each = var.account_kind != "FileStorage" ? [true] : []:通过三元表达式判断,当account_kind不等于"FileStorage"时返回包含一个元素的列表(触发dynamic块创建),否则返回空列表(跳过块创建)。
  • content块:定义blob_properties内部的具体配置,仅在dynamic块触发时生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:10:44