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

Terraform中如何为for_each资源配置可覆盖的默认参数?

实现Terraform批量定义Cloud Functions的参数默认值

有两种常用方式实现你的需求:合并默认配置(推荐,结构更清晰)或使用lookup函数(适合零散参数),以下是具体实现:

方法一:合并默认配置

通过merge函数将默认配置与每个函数的自定义配置合并,自定义配置会覆盖默认值,未定义的参数自动使用默认值。

步骤1:定义默认配置和函数实例配置

添加本地变量分别存储默认参数和各函数的自定义配置:

locals {
  # 定义需要默认值的参数
  function_defaults = {
    var2                = "default_var2_value" # VAR2的默认值
    available_memory_mb = 128                  # 内存默认值
  }

  # 各函数的自定义配置(仅填写需要自定义的参数)
  function_instances = {
    fct1 = {
      name        = "bob"
      git_folder  = "bob_folder"
      var1        = "pikachu"
      var2        = "red"
      available_memory_mb = 256
    },
    fct2 = {
      name       = "bill"
      git_folder = "bill_folder"
      var1       = "pidget"
      // 未定义var2和available_memory_mb,将自动使用默认值
    }
  }
}

步骤2:在资源块中使用合并后的配置

修改google_cloudfunctions_function资源的for_each,合并默认与自定义配置:

resource "google_cloudfunctions_function" "all" {
  # 合并配置:自定义参数会覆盖默认值
  for_each = { for name, config in local.function_instances : name => merge(local.function_defaults, config) }

  name                  = each.value.name
  available_memory_mb   = each.value.available_memory_mb
  trigger_http          = true

  environment_variables = {
    VAR1 = each.value.var1
    VAR2 = each.value.var2 # 自动获取默认值或自定义值
  }

  source_repository {
    url = "https://source.developers.google.com/projects/[...]/moveable-aliases/${var.git_branch}/paths/${each.value.git_folder}"
  }

  # 补充runtime、entry_point等必填参数
}

方法二:使用lookup函数

如果不想提前合并配置,可以直接在每个参数处用lookup函数指定默认值,当each.value中不存在该键时自动使用默认值:

resource "google_cloudfunctions_function" "all" {
  for_each = {
    fct1 = {
      name        = "bob"
      git_folder  = "bob_folder"
      var1        = "pikachu"
      var2        = "red"
      available_memory_mb = 256
    },
    fct2 = {
      name       = "bill"
      git_folder = "bill_folder"
      var1       = "pidget"
    }
  }

  name                  = each.value.name
  # 无available_memory_mb时用默认值128
  available_memory_mb   = lookup(each.value, "available_memory_mb", 128)
  trigger_http          = true

  environment_variables = {
    VAR1 = each.value.var1
    # 无var2时用默认值"default_var2_value"
    VAR2 = lookup(each.value, "var2", "default_var2_value")
  }

  source_repository {
    url = "https://source.developers.google.com/projects/[...]/moveable-aliases/${var.git_branch}/paths/${each.value.git_folder}"
  }

  # 补充runtime、entry_point等必填参数
}

注意事项

  • 确保google_cloudfunctions_function的必填参数(如runtime、entry_point)已正确配置,示例中省略了这些参数需自行补充。
  • merge函数按顺序覆盖:后面的自定义配置会覆盖前面的默认配置中的同名键,符合需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:45