Terraform module是否支持配置多个source?
单个Terraform module是否支持配置多个source
结论:当前所有正式版本的Terraform均不支持为单个module块配置多个source。
- 从语法定义看,
module块的source参数为单值字符串类型,不支持传入列表、数组等多值格式,语法层面就不支持多源配置。 - 从官方功能说明看,从未发布过单模块绑定多source的相关能力,你之前基于参数类型和官方文档做出的判断是准确的。
如果存在多源配置的实际使用需求,可以通过以下两种官方支持的方式实现,不需要依赖非官方的特殊能力:
- 场景1:需要按环境/部署条件切换同一个逻辑模块的源地址
可以通过条件表达式动态给source参数传入单个合法源地址,注意最终传入的值始终只能是一个源,不能同时传入多个。示例写法:module "biz_cluster" { source = var.deploy_env == "production" ? "git::ssh://git@internal.corp/infra/terraform-aws-eks-cluster.git?ref=v2.3.1" : "./modules/eks-cluster" # 其余模块入参保持正常配置即可 } - 场景2:需要同时引用多个不同源的同类型模块
可以定义多个独立的module块,每个块单独配置对应source,通过count或for_each按实际需要控制模块的启用状态,不要尝试在单个module块里塞多个源。示例写法:module "cluster_remote_prod" { count = var.enable_prod_remote ? 1 : 0 source = "git::ssh://git@internal.corp/infra/terraform-aws-eks-cluster.git?ref=v2.3.1" # 对应生产环境参数配置 } module "cluster_local_dev" { count = var.enable_dev_local ? 1 : 0 source = "./modules/eks-cluster" # 对应开发环境参数配置 }
内容的提问来源于stack exchange,提问作者Pradyot Dhulipala
相关产品推荐
相关产品推荐

