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

Terraform如何按条件创建azurerm_data_factory的github_configuration块

问题根因

你当前配置不生效的核心原因是dynamic块的for_each参数不接受布尔类型入参:Terraform要求dynamic块的for_each必须传入可迭代的集合类型(列表、map、set等),你直接传入var.Environment == "dev"返回的true/false布尔值无法被迭代,自然无法按预期控制块的生成。
另外你在content块内重复写环境三元判断完全是冗余逻辑——只要dynamic块不渲染目标块,块内部的参数根本不会被Terraform评估赋值。

正确配置写法

将布尔判断结果转为单元素/空列表即可实现条件控制:dev环境下for_each拿到长度为1的列表,会渲染1个github_configuration块;非dev环境下拿到空列表,完全不生成该配置块。

resource "azurerm_data_factory" "myDataFactory" {
  name                = var.datafactortyName
  location            = azurerm_resource_group.myResourceGroup.location
  resource_group_name = azurerm_resource_group.myResourceGroup.name

  dynamic "github_configuration" {
    for_each = var.Environment == "dev" ? [1] : []

    content {
      account_name    = var.AccountName
      branch_name     = var.Branch
      git_url         = var.RepoUrl
      repository_name = var.RepoName
      root_folder     = var.RepoFolder
    }
  }
}
配置说明
  • dynamic嵌套块不支持count参数,你注释掉的count写法本身就是无效语法,只能通过for_each传入空集合的方式实现块的条件隐藏
  • 非dev环境下因为github_configuration块完全不生成,不需要给内部参数传null,也不会触发这些Git相关变量的存在性校验
  • 如果后续需要支持多环境不同Git配置,只需要把for_each的入参改成对应环境的配置map即可,不需要修改块内部逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:06:23