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

如何修改Terraform配置,从JSON文件获取名称与区域字段数据?

问题:Terraform从JSON文件中同时输出服务器名称与区域字段

我正尝试让Terraform从JSON文件中拉取多个条目。我的JSON文件内容如下:

{
  "data": [
    {"name": "name-of-server", "region": "us-east", "role": "could-be-tag-or-else", "create_app": true}
  ]
}

当前我的Terraform main.tf 配置如下:

locals {
    # get json 
    json-data = jsondecode(file("all-windows-machines-full.json"))

    # get all windows
    windows-machines = [for data in local.json-data.data : data.name]
}

output "windows-machines" { 
  value = local.windows-machines
}

目前输出仅显示服务器名称列表。我想在输出中添加region字段,请问需要如何修改main.tf配置?我是Terraform新手,此前尝试过添加输入选项和变量但未成功,恳请帮助。


解决方案

你只需要修改locals里的windows-machines定义,从只提取name字段,改成返回包含name和region的对象列表即可。修改后的完整配置如下:

locals {
    # 读取并解析JSON文件
    json-data = jsondecode(file("all-windows-machines-full.json"))

    # 提取包含name和region的对象列表
    windows-machines = [
        for data in local.json-data.data : {
            name = data.name
            region = data.region
        }
    ]
}

output "windows-machines" { 
  value = local.windows-machines
}

关键说明:

  • 原配置里的[for data in local.json-data.data : data.name]只会生成纯字符串列表(仅包含服务器名称)。
  • 修改后,我们通过{name = data.name, region = data.region}为每个JSON条目创建一个包含双字段的对象,最终输出的是对象列表,每个对象同时展示name和region信息。

执行terraform apply或terraform output后,你会得到类似这样的输出:

windows-machines = [
  {
    "name" = "name-of-server"
    "region" = "us-east"
  },
]

如果希望输出是组合字符串格式(比如"name-of-server (us-east)"),也可以调整成:

windows-machines = [for data in local.json-data.data : "${data.name} (${data.region})"]

对应的输出会是:

windows-machines = [
  "name-of-server (us-east)",
]

内容的提问来源于stack exchange,提问作者Todd M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:42:48