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

