在 Terraform 中为 AWS 提供商创建 时aws_waf_ipset
,我有多个 IP 地址列表,我想在创建 时将它们连接在一起aws_waf_rule
。当我尝试在 中使用 时,concat
出现错误:。data_id
aws_waf_rule
* aws_waf_rule.production_wafrule: predicates.0.data_id must be a single value, not a list
这对我来说很有意义,但是如果我不能直接连接它,我该如何最好地创建一个连接列表作为我可以在数据 ID 中引用的资源aws_waf_rule
?
下面是产生此错误的示例代码:
resource "aws_waf_rule" "production_wafrule" {
name = "production_WAF_rule"
metric_name = "ProductionWAFRule"
predicates {
data_id = "${concat(list(aws_waf_ipset.vpn_ipset.id),list(aws_waf_ipset.production_ipset.id))}"
negated = false
type = "IPMatch"
}
}
答案1
flatten()
(https://www.terraform.io/docs/configuration/functions/flatten.html) 可能就是您要找的东西。
未经测试,但类似这样的事情应该可以做到(请注意,该函数以单个列表作为输入;您将所有列表都放在其中)-
"${flatten([list(aws_waf_ipset.vpn_ipset.id),list(aws_waf_ipset.production_ipset.id)])}"
我相信setunion()
(https://www.terraform.io/docs/configuration/functions/setunion.html) 也适用于列表(并且会对任何重复的项目进行重复数据删除)。