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

Terraform:如何将对象属性转为字符串列表传入external数据源?

解决Terraform external数据源query参数类型不匹配问题

你遇到的错误是因为Terraform的external数据源要求query对象的所有值必须是字符串类型,而你直接传入了列表,导致类型不匹配。

解决思路

把列表转换为字符串格式传递,常用两种方式:

方式1:用逗号分隔拼接字符串

通过join函数将列表元素拼接成单个字符串,脚本中可按分隔符拆分还原列表:

data "external" "lambdas" {
    program = ["bash", "scripts/random.sh"]

    query = {
        lambda_name  = join(",", [var.lambda.my_app.name, var.lambda.my_app_2.name])
        environment = var.environment
    }
}

在random.sh中,可通过以下方式拆分字符串获取列表:

IFS=',' read -ra lambda_names <<< "$lambda_name"
for name in "${lambda_names[@]}"; do
    echo "处理Lambda: $name"
done

方式2:JSON序列化列表

用jsonencode将列表序列化为JSON字符串,脚本中用jq解析:

data "external" "lambdas" {
    program = ["bash", "scripts/random.sh"]

    query = {
        lambda_name  = jsonencode([var.lambda.my_app.name, var.lambda.my_app_2.name])
        environment = var.environment
    }
}

在random.sh中解析JSON:

# 遍历所有Lambda名称
echo "$lambda_name" | jq -r '.[]' | while read -r name; do
    echo "处理Lambda: $name"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:12:41