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
相关产品推荐
相关产品推荐

