Terraform如何配置仅生产环境运行指定module、开发环境跳过
实现方案(要求Terraform v0.13及以上版本)
步骤1:给web模块新增开关变量
在module/web/目录下新增variables.tf文件,添加如下变量定义:
variable "enable_nginx" { type = bool default = true description = "控制是否启用nginx_node模块" }
步骤2:修改web模块中nginx_node的声明
编辑module/web/main.tf,给nginx_node模块添加count控制逻辑:
module "nginx_node" { # 开关为true时创建1个实例,为false时不创建 count = var.enable_nginx ? 1 : 0 source = "../vm" vm_name = "nginx" cpu = var.cpu disk_size = var.disk_size dc = var.dc } # mysql_node模块保持原有配置不变 module "mysql_node" { source = "../vm" vm_name = "mysql" cpu = var.cpu disk_size = var.disk_size dc = var.dc }
步骤3:不同环境传入开关值
- 编辑
dev/main.tf,调用web模块时传入enable_nginx = false,关闭nginx节点创建:
module "nodes" { source = "../web" disk_size = 20 cpu = 2 dc = var.dc enable_nginx = false }
prod/main.tf无需额外修改,直接用变量默认值true即可,也可以显式传值更清晰:
module "nodes" { source = "../web" disk_size = 40 cpu = 4 dc = var.dc enable_nginx = true }
注意事项
如果你的代码中存在其他地方引用module.nginx_node的输出值,需要修改引用方式为module.nginx_node[0].输出名,因为添加count参数后,module.nginx_node会变为长度为0或1的列表,直接引用会抛出类型不匹配错误。
内容的提问来源于stack exchange,提问作者hitman222
相关产品推荐
相关产品推荐

