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

如何在Terraform中引用JSON文件Regions下的IP数据?

问题

我有一个存储IP地址的JSON文件,结构如下:

{
   "US": [
        "30.30.30.85",
        "30.30.30.86"
    ],
    "All": [
        "30.30.30.85",
        "30.30.30.86",
        "40.40.40.40",
        "40.40.40.41",
        "50.50.50.33",
        "50.50.50.34",
        "60.60.60.61",
        "60.60.60.62"
    ],
    "Regions": [
        {
            "US_Central": [
                "40.40.40.40",
                "40.40.40.41"
            ]
        },
        {
            "US_Southeast": [
                "50.50.50.33",
                "50.50.50.34"
            ]
        },
        {
            "UK": [
                "60.60.60.61",
                "60.60.60.62"
            ]
        }
    ]
}

我用Terraform的jsondecode函数导入该文件:

locals {
  ip_list = jsondecode(file("${path.module}/../ip_list.json"))
}

调用US和All对应的值正常,但引用Regions下的子区域值时遇到错误,尝试过以下几种方式均失败:

ips = local.ip_list.Regions[US_Central].value
ips = local.ip_list.Regions.US_Central
ips = local.ip_list.Regions[*].US_Central

请问正确的引用方式是什么?

解决方法

问题根源

你的JSON中Regions是对象数组,每个数组元素是仅包含单个键值对的独立对象(比如{"US_Central": [...]}),而非直接的键值对结构,因此之前的引用逻辑都不匹配该结构。

正确引用方式

方式1:按数组索引定位

如果确定子区域在数组中的固定位置,可以直接通过索引访问:

# 获取US_Central的IP列表
ips = local.ip_list.Regions[0].US_Central
# 获取US_Southeast的IP列表
ips = local.ip_list.Regions[1].US_Southeast

方式2:动态匹配(不受索引顺序影响)

如果担心数组元素顺序变化,可通过遍历筛选目标键:

ips = [for region in local.ip_list.Regions : region.US_Central if contains(keys(region), "US_Central")][0]

优化建议(更易用的结构)

如果可以修改JSON文件,建议将Regions从数组改为普通对象结构,这样引用会更简洁直接:

{
   "US": [...],
   "All": [...],
   "Regions": {
       "US_Central": [
           "40.40.40.40",
           "40.40.40.41"
       ],
       "US_Southeast": [
           "50.50.50.33",
           "50.50.50.34"
       ],
       "UK": [
           "60.60.60.61",
           "60.60.60.62"
       ]
   }
}

修改后直接通过键名引用即可:

ips = local.ip_list.Regions.US_Central

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24