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
相关产品推荐
相关产品推荐

