如何将Terraform的Map类型输出作为字符串输入传入其他模块?
Terraform:将模块输出的Map类型值作为其他模块的String输入
单个VMSS模块的正确引用方式
你当前代码中访问Map输出值时存在语法错误:引用字符串类型的Map键必须用双引号包裹。修改vmss_test1模块的health_probe_id参数即可:
module "vmss_test1" { # 其他参数保持原有配置不变 health_probe_id = module.test1-lb.healthprobe_id["test1"] }
如果要为test2创建对应的VMSS模块,只需将键替换为"test2":
module "vmss_test2" { # 对应test2的VMSS配置参数 health_probe_id = module.test1-lb.healthprobe_id["test2"] }
批量创建对应所有探针的VMSS模块
若你的探针与VMSS是一一对应的关系,可通过for_each批量创建VMSS模块,避免重复编写代码:
module "vmss" { source = "" for_each = module.test1-lb.healthprobe_id vmscaleset_name = "vmss-${each.key}" resource_group_name = "" resource_group_name_platform = "" disable_password_authentication = "" subnet_name = "" availability_zones = [] instances_count = "" virtual_machine_size = "" image_name = "" loadbalancer_name = module.test1-lb.lb_name loadbalancer_backendpool_name = each.key location = var.region public_key_name = "" virtual_network_name = "" default_cap = "" max_cap = "" min_cap = "" zone_balance = true tags = "" health_probe_id = each.value upgrade_mode = "" }
这里通过for_each遍历LB模块输出的healthprobe_id Map:
each.key对应探针名称(test1、test2)each.value直接取对应探针的ID字符串,完美匹配VMSS模块要求的string类型输入
关键注意事项
- Map键语法要求:Terraform中访问字符串类型的Map键必须使用
["key_name"]格式,不能省略双引号,否则会被识别为未定义变量。 - 自动依赖管理:Terraform会通过模块输出的引用自动推断依赖关系,无需手动添加
depends_on = [module.test1-lb]。
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

