Переменные модуля Terraform.tf

Пробую свои силы в модулях терраформирования и столкнулся со странной проблемой (я думаю).

Вот моя структура:

Переменные модуля Terraform.tf

Вот корень main.tf:

    provider "azurerm" {
      features {
      }
    }
   
    module "createrg" {
      source = "./modules/rg"
      my_loc = var.my_loc
      rgName = var.rgName
    }

Вот корневые переменные.tf

    variable "my_loc" {
      type = "string"
    }
    
    variable "rgName" {
      type = "string"
    }

вот main.tf для модуля "rg":

    provider "azurerm" {
      ## dev_subscription_id = var.dev_subscription
      features {
        
      }
    }
    resource "azurerm_resource_group" "rgDev" {
      location = var.my_loc
      name = var.rgName
    }

а вот переменная.tf для модуля "rg"

    variable "my_loc" {
      type = "string"
    }
    
    variable "rgName" {
      type = "string"
    }

вот dev.tfvars

    my_loc = "canadacentral"
    rgName = "rg_ModuleTest"

Я запускаю план как:

terraform plan -var-file=./variables/dev.tfvars

Поскольку я только начал работать с terraform, я использую последнюю версию. Если я удаляю какие-либо переменные из одной или обеих переменных. tf, я получаю ошибки, и план не выполняется. Например, если я удаляю объявление переменной из корневого файла variable.tf, я получаю сообщение об ошибке: «Ошибка: ссылка на необъявленную входную переменную», а если я удаляю объявление переменной из файла variable.tf в модуле rg, я получаю сообщение об ошибке. ошибка: «Ошибка: неподдерживаемый аргумент... Здесь не ожидается аргумент с именем «rgName».» План работает только тогда, когда у меня есть одни и те же переменные в файле variable.tf как в корневом модуле, так и в модуле rg.

Так должны работать модули? Я искал в Интернете объяснение, но я думаю, что здесь что-то упустил. Я имею в виду, что если у меня есть модули для создания 20 ресурсов, кажется абсурдным думать, что мне нужно реплицировать переменные в обоих местах — корневом каталоге и файле variable.tf соответствующего модуля.

Заранее спасибо за вашу помощь.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 331
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Модули автономны. Все переменные, необходимые для успешного выполнения вашего модуля rg, определены в ./modules/rg/variables.tf.

Поскольку вы не определили для них никаких значений по умолчанию, они унифицированы. Таким образом, в вашем корневом main.tf, когда вы создаете свой модуль createrg, вы должны явно установить все эти переменные.

Что касается именования, в вашем «.root/main» ваши переменные var.my_loc и var.rgName не обязательно должны иметь те же имена, что и в ./modules/rg/variables.tf. Они могут иметь любые имена или быть константами, если вы собираетесь установить все эти неинициализированные переменные вашего модуля.

Другие вопросы по теме