是否可以连接formatlist生成的列表?以下给出了错误
At column 1, line 1: output of an HIL expression must be a string, or a single list (argument 6 is TypeList)
:
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Effect": "Allow",
"Resource": ["${concat(
formatlist("arn:aws:s3:::%s", ${var.data_pipeline_s3_buckets}),
formatlist("arn:aws:s3:::%s/*", ${var.data_pipeline_s3_buckets}))}"]
},
答案 0 :(得分:9)
看起来你正在尝试在这里构建一个JSON数组,在这种情况下,类似下面的内容应该有效:
{
"Action": [
"s3:Get*",
"s3:List*"
],
"Effect": "Allow",
"Resource": ${jsonencode(
concat(
formatlist("arn:aws:s3:::%s", var.data_pipeline_s3_buckets),
formatlist("arn:aws:s3:::%s/", var.data_pipeline_s3_buckets)
)
)}
}
您的原始示例中有一些部分存在问题:
${ ... }
序列中时引用变量时,您不能使用第二个${
分隔符。此标记表示从字符串上下文到插值表达式上下文的转换,因此当您已经处于插值表达式上下文中时,它无效。jsonencode
来解决,因此在返回之前将列表转换为字符串它。答案 1 :(得分:1)
该错误消息表示您提供了一个应该提供字符串的列表。
$ concat没有做我认为你认为的事情;它不会连接列表中的项目以形成字符串,它会连接两个列表以形成另一个列表。您需要使用$ join。
我在http://thecloudwoman.com/2017/05/how-to-use-a-terraform-list-variable/
有一个有效的例子