Функция поиска Terraform - Ошибка: ожидается число, фактический тип - строка - PullRequest
1 голос
/ 13 марта 2019

Я использую Terraform для создания некоторых компонентов AWS VPC, таких как aws_route ниже.

Я пытаюсь динамически масштабировать количество шлюзов NAT с помощью параметра count:

resource "aws_route" "my_nat_gw" {
  route_table_id         = "${var.rt_id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = "${nat_gw_id}"

  #I have an error here - on the "lookup" term
  count = "${length(var.azs) * lookup(map(var.enable_nat_gateway, 1), "true", 0)}"
}

Ради краткости давайте проигнорируем часть length(var.azs) в расчете count.

Я получаю следующую ошибку в части lookup(map(var....):

Ожидается число, фактический тип String more

Переменная enable_nat_gateway является логическим значением.

Я пробовал также следующее:

lookup(map(true, 1), true, 0)}
lookup(map("true", 1), "true", 0)}

Но все равно ничего хорошего.

Есть идеи как это исправить?


Некоторые расчеты для тех, кто не знаком с синтаксисом map и lookup :

Если enable_nat_gateway равно true , тогда 'map' is equal to{true=1} и общий срок поиска должен быть равен 1 .

прочее:

Если enable_nat_gateway равно false , тогда 'map' is equal to{true=0} и общий срок поиска должны быть равны 0 .


Обратите внимание, что я использую Terraform 0.11.11, поэтому функция map все еще поддерживается.

1 Ответ

1 голос
/ 13 марта 2019

Если вы пытаетесь условно добавить n ресурсов маршрута, тогда вам следует использовать троичный оператор здесь с чем-то вроде:

resource "aws_route" "my_nat_gw" {
  count = "${var.enable_nat_gateway ? length(var.azs) : 0}"

  route_table_id         = "${var.rt_id}"
  destination_cidr_block = "0.0.0.0/0"
  nat_gateway_id         = "${var.nat_gw_id}"
}

Это проверяет, оценивает ли переменная enable_nat_gateway значение true и, если это так, создает ресурс для каждого элемента в переменной azs. Если это не так, то это не создаст никаких ресурсов.

...