Назад | Перейти на главную страницу

Как объединить дескрипторы набора IP

При создании aws_waf_ipsets в 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) также будет работать со списками (и будет удалять любые повторяющиеся элементы).