如何将concat与terraform中的formatlist结合起来?

jun*_*iro 3 terraform

是否可以连接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}))}"]
},
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 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)
     )
   )}
}
Run Code Online (Sandbox Code Playgroud)

您的原始示例中有一些部分存在问题:

  • 当您已经在${ ... }序列中时引用变量时,您不能使用第二个${分隔符.此标记表示从字符串上下文到插值表达式上下文的转换,因此当您已经在插值表达式上下文中时它无效.
  • 使用模板时,所有插值表达式都必须返回字符串,因为模板系统没有任何迭代构造.你在这里得到的错误消息有点不准确(它应该告诉你只允许一个字符串),但它通过包含jsonencode在上面的例子中解决,因此在返回之前将列表转换为字符串.