如何调整JSON输出格式以在Terraform中使用外部Googlebot IP列表
解决Terraform External数据源解析Googlebot IP列表的JSON格式问题
Terraform的external数据源要求外部程序返回单个顶层JSON对象,你当前的jq命令输出的是多个独立的JSON对象(每个IP前缀对应一个),这就触发了"顶层值后存在无效字符'{' "的错误。
修正步骤:
修改shell脚本的jq命令,将所有IP前缀整理成数组并包装为单个JSON对象:
替换get-googlebot-bot-ips.sh中的内容为:curl https://developers.google.com/static/search/apis/ipranges/googlebot.json \ | jq '{ ipv4Prefix: [.prefixes[] | .ipv4Prefix | select(. != null)], ipv6Prefix: [.prefixes[] | .ipv6Prefix | select(. != null)] }'这个命令会把所有有效的IPv4/IPv6前缀分别收集成数组,最终输出一个包含两个数组的合法JSON对象。
调整Terraform配置(确保脚本路径匹配):
修正main.tf中脚本的引用路径(如果文件名不一致),并优化输出:data "external" "get_googlebot_ips_using_shell" { program = ["bash", "./get-googlebot-bot-ips.sh"] # 与实际脚本文件名保持一致 } output "googlebot_ipv4_prefixes" { value = data.external.get_googlebot_ips_using_shell.result.ipv4Prefix } output "googlebot_ipv6_prefixes" { value = data.external.get_googlebot_ips_using_shell.result.ipv6Prefix }
验证输出格式
运行脚本后会得到类似如下的JSON,完全符合Terraform的要求:
{ "ipv4Prefix": [ "66.249.64.0/19", "64.233.160.0/19" ], "ipv6Prefix": [ "2001:4860:4000::/36", "2a00:1450:4000::/36" ] }
内容的提问来源于stack exchange,提问作者Bcunning
相关产品推荐
相关产品推荐

