При создании aws_waf_ipset
s в Terraform для поставщика AWS, у меня есть несколько списков 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
.
Для меня это имеет смысл, но как мне лучше всего создать объединенный список в качестве ресурса, на который я могу ссылаться в идентификаторе данных, если я не могу объединить его в 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"
}
}
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) также будет работать со списками (и будет удалять любые повторяющиеся элементы).