Terraform中的动态JSON
我使用Terraform调用lambda函数,需要传递一个包含字符串值列表的输入JSONTerraform中的动态JSON,terraform,Terraform,我使用Terraform调用lambda函数,需要传递一个包含字符串值列表的输入JSON data "aws_lambda_invocation" "invo6" { function_name = "my_function" input = <<JSON { "pairs":[ { "principal":"ar
data "aws_lambda_invocation" "invo6" {
function_name = "my_function"
input = <<JSON
{
"pairs":[
{
"principal":"arn:aws:iam::12345678901:role/myRole",
"databases":[
"my_db_apple", "my_db_banana", "my_db_orange"
]
}
]
}
JSON
}
我尝试将“数据库”代码替换为:
input = <<JSON
{
"pairs":[
{
"principal":"arn:aws:iam::12345678901:role/myRole",
${jsonencode("databases": [for each in var.gluedb_map : "my_db_${each}"], )}
}
]
}
JSON
但我得到了一个错误:
每个函数参数与下一个函数参数之间需要逗号分隔
谁能看出我哪里做错了?
谢谢您可以尝试使用,并获得:
您可以尝试使用,并获得:
如果您只是对访问地图的键感兴趣,那么可以使用返回键列表。然后,您可以将其与使用字符串插入每个列表项相结合 我还建议对更广泛的数据结构使用HCL映射,然后编码为JSON,而不是试图对其中的一部分进行JSON编码,并将其扭曲成合适的形状 一个完全工作的示例如下所示:
variable "gluedb_map" {
type = map(map(string))
default = {
"apple" = {
description = "my apple db"
catalog = ""
location_uri = "s3://mybucket/"
params = ""
}
"banana" = {
description = "my banana db"
catalog = ""
location_uri = "s3://anotherpath/"
params = ""
}
}
}
output "json" {
value = jsonencode({
pairs: [
{
principal = "arn:aws:iam::12345678901:role/myRole"
databases = formatlist("my_db_%s", keys(var.gluedb_map))
}
]
})
}
应用此选项将输出以下内容:
json = {"pairs":[{"databases":["my_db_apple","my_db_banana"],"principal":"arn:aws:iam::12345678901:role/myRole"}]}
如果您只是对访问地图的键感兴趣,那么可以使用返回键列表。然后,您可以将其与使用字符串插入每个列表项相结合 我还建议对更广泛的数据结构使用HCL映射,然后编码为JSON,而不是试图对其中的一部分进行JSON编码,并将其扭曲成合适的形状 一个完全工作的示例如下所示:
variable "gluedb_map" {
type = map(map(string))
default = {
"apple" = {
description = "my apple db"
catalog = ""
location_uri = "s3://mybucket/"
params = ""
}
"banana" = {
description = "my banana db"
catalog = ""
location_uri = "s3://anotherpath/"
params = ""
}
}
}
output "json" {
value = jsonencode({
pairs: [
{
principal = "arn:aws:iam::12345678901:role/myRole"
databases = formatlist("my_db_%s", keys(var.gluedb_map))
}
]
})
}
应用此选项将输出以下内容:
json = {"pairs":[{"databases":["my_db_apple","my_db_banana"],"principal":"arn:aws:iam::12345678901:role/myRole"}]}
您是否可以编辑您的问题以显示示例输入,然后显示您期望从该输入获得的输出?添加了包含db名称的映射的详细信息。还扩展了我失败代码的代码。所需的输出是第一个代码部分,在这里我硬编码了db名称-我试图重新创建它,但不是硬编码,而是从映射填充。希望更清楚?您可以编辑您的问题以显示示例输入,然后显示您期望从该输入中获得的输出吗?添加了包含db名称的映射的详细信息。还扩展了我失败代码的代码。所需的输出是第一个代码部分,在这里我硬编码了db名称-我试图重新创建它,但不是硬编码,而是从映射填充。希望更清楚?