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

如何在Terragrunt中用数组定义多依赖并通过列表推导式配置输入?

问题:Terragrunt中能否通过数组+列表推导式简化依赖输入配置?

当前Terragrunt配置如下:

terraform {
  source = "${get_path_to_repo_root()}//modules/shared-infra"
}

dependency "project_1" {
  config_path = "../../../project_1"
}

dependency "project_2" {
  config_path = "../../../project_2"
}


inputs {
   shared_vpc_service_project_ids = [
      dependency.project_1.outputs.project_id,
      dependency.project_2.outputs.project_id
   ]

   shared_vpc_host_subnet_users = [
      "serviceAccount:${dependency.project_1.outputs.sa_email}",
      "serviceAccount:${dependency.project_2.outputs.sa_email}",
   ]
   
   < ... more variables ... >
}

想知道是否可以将依赖定义在数组中,通过列表推导式配置inputs,从而实现新增项目时无需逐个更新每一项输入配置,类似如下写法:

locals {
   projects = [dependency.project_1, dependency.project_2]
}

inputs {
   shared_vpc_service_project_ids = [ for p in projects : p.outputs.project_id ]

   shared_vpc_host_subnet_users = [ for p in projects : "serviceAccount:${p.outputs.sa_email}" ]
   
   < ... more variables ... >
}

回答

完全可以这么做,这种写法在Terragrunt中是合法且实用的,能有效减少重复配置,大幅提升维护效率。

优化后的完整配置如下:

terraform {
  source = "${get_path_to_repo_root()}//modules/shared-infra"
}

# 定义所有项目依赖
dependency "project_1" {
  config_path = "../../../project_1"
}

dependency "project_2" {
  config_path = "../../../project_2"
}

# 用locals统一管理依赖引用集合
locals {
  projects = [dependency.project_1, dependency.project_2]
}

inputs {
  shared_vpc_service_project_ids = [for p in local.projects : p.outputs.project_id]
  shared_vpc_host_subnet_users = [for p in local.projects : "serviceAccount:${p.outputs.sa_email}"]
  
  < ... more variables ... >
}

后续新增项目时,仅需两步操作:

  1. 添加对应的dependency块,比如dependency "project_3" { config_path = "../../../project_3" }
  2. 在local.projects数组中新增该依赖项,即projects = [dependency.project_1, dependency.project_2, dependency.project_3]

所有关联的输入配置会自动通过列表推导式生成,无需手动逐个修改inputs下的每一项。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:50:39