连接一个列表,设置为资源属性

Concat a list, set as resource attribute

我正在尝试合并两个列表并将其设置为资源的属性,但出现错误。这是最小的复制品:

  network_configuration {
    security_groups = "${concat([module.service_base.allow_lb_access_sg], [module.service_base.intraservice_communication_sg])}"
  }

我收到一个超级无用的错误

Error: Error loading modules: module load_balanced_service: Error loading .terraform/modules/188cf031fdce92d75131be4747cedad9/XXX.tf: Error reading config for aws_ecs_service[ecs_service]: parse error at 1:10: expected expression but found "["

它声称第 1 行,但如果您删除该 security_groups 行,一切正常。

好的,所以文档非常不清楚。我解决这个问题的方法是

security_groups = ["${concat(list(module.service_base.allow_lb_access_sg), list(module.service_base.intraservice_communication_sg))}"]

请注意,list 函数是必需的。如果你使用 [] 它仍然会中断。

但是,如果您的输入之一是一个列表,您不想将它放在 list 中,因为那样它将是一个包含您的列表的列表,例如你要

security_groups = ["${concat(list(module.service_base.allow_lb_access_sg), var.my_list_type_variable)}"]

进一步阅读:https://github.com/hashicorp/terraform/issues/6657