如何在terraform中将concat与formatlist结合起来?
是否可以合并formatlist生成的列表?下面给出了错误如何在terraform中将concat与formatlist结合起来?,terraform,Terraform,是否可以合并formatlist生成的列表?下面给出了错误 第1列第1行:HIL表达式的输出必须是字符串或单个列表(参数6是TypeList): 看起来您正在尝试在此处构建JSON数组,在这种情况下,应该可以执行以下操作: { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": ${jsonencode( concat( form
第1列第1行:HIL表达式的输出必须是字符串或单个列表(参数6是TypeList)
:
看起来您正在尝试在此处构建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)
)
)}
}
您的原始示例有几个部分在这里有问题:
- 当您已经在
序列中引用变量时,不能使用第二个${…}
分隔符。此标记表示从字符串上下文到插值表达式上下文的转换,因此当您已经在插值表达式上下文中时,它无效${
- 使用模板时,所有插值表达式都必须返回字符串,因为模板系统没有任何迭代构造。您在此处收到的错误消息有点不准确(它应该告诉您只允许一个字符串)但通过在上面的示例中包含
解决了这个问题,从而在返回列表之前将列表转换为字符串jsonecode
我在a)我没有使用本地exec provisioner,所以我不能使用
echo
,我需要使用JsoneCode
,正如上面的答案b)我使用了两次formatlist,这给了我两个列表,来连接两个列表,我需要使用concat
,而不是join
,然后在您创建联合收割机之后d使用concat创建列表,您需要使用join将其转换为字符串。您提供的错误消息是“不要给我列表,给我字符串”。concat创建另一个列表,而不是字符串。
{
"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)
)
)}
}