Как получить доступ к переменным terragrunt в коде terraform

У меня есть конфигурация terragrunt, в которой объявлены переменные с использованием локальных переменных, как показано ниже, на корневом уровне. В дочернем модуле объявлен дочерний файл конфигурации terragrunt с именем (terragrunt.hcl). родительский файл terragrunt имеет следующий код:

locals {
  location = "East US"
}

Файл terragrunt дочернего модуля имеет следующий код:

include {
  path = find_in_parent_folders()
}

locals {
  myvars = read_terragrunt_config(find_in_parent_folders("terragrunt.hcl"))
  location = local.myvars.locals.location
}

теперь пытаемся получить доступ к переменной location в коде терраформирования (main.tf), используя следующий код:

 location = "${var.location}"

но это вызывает ошибку:

Error: Reference to undeclared input variable

  on main.tf line 13, in resource "azurerm_resource_group" "example":
  13:   location = "${var.location}"

Не понимаю, как я могу получить доступ к переменным, определенным в файле terragrunt в коде terraform. пожалуйста предложите


person user2315104    schedule 29.07.2020    source источник


Ответы (1)


Это сообщение об ошибке означает, что ваш корневой модуль не объявляет, что он ожидает получить значение location, и поэтому вы не можете ссылаться на него.

В корневом модуле Terraform вы можете объявить, что ожидаете эту переменную, объявив ее блоком variable, как намекает сообщение об ошибке:

variable "location" {
  type = string
}

Это объявление затем сделает его допустимым для ссылки на var.location в другом месте корневого модуля, а также приведет к тому, что Terraform выдаст ошибку, если вы случайно запустите его без предоставления значения для этой location переменной.

person Martin Atkins    schedule 29.07.2020
comment
Я использую терргрунт. И мне нужно, чтобы эта переменная местоположения была определена в корневом файле terragrunt, а затем ссылалась на дочерний модуль terraform. это возможно? Если да, любой пример плз - person user2315104; 30.07.2020
comment
Я не знаком с Terragrunt, но похоже, что input - это функция для делая это. - person Martin Atkins; 30.07.2020
comment
Ok. Спасибо ... я могу использовать входные данные, но теперь следующий вопрос: как ссылаться на это в main.tf? что-то вроде этого: var.location (если местоположение определено во входных данных ??) - person user2315104; 31.07.2020
comment
Блок переменных, который я показал в своем первом ответе, - это то, что заставит var.location работать в вашем корневом модуле, если вы можете настроить Terragrunt для заполнения этой переменной значением. - person Martin Atkins; 01.08.2020