Использование субъекта службы Azure в модуле приводит к ошибке поставщика - PullRequest
0 голосов
/ 06 ноября 2018

Я настраиваю инфраструктуру в Azure, и мой инструмент для выбора кода - Terraform.

Чтобы иметь хороший поддерживаемый код, я решил использовать модули. Моя текущая структура выглядит так:

├── development/
│   ├── main.tf
│   ├── vars.tf
│   ├── outputs.tf
│  
├── modules/
│   ├── provider
│   └── resource-group
│   └── eventhub

Итак, я даже выпустил код провайдера в модуль. Мой код выглядит примерно так:

terraform {
  backend "azurerm" {}
}

module "provider" {
  tenant_id       = "${var.tenant_id}"
  client_id       = "${var.client_id}"
  client_secret   = "${var.client_secret}"
  subscription_id = "${var.subscription_id}"
  source          = "../modules/provider"
}

module "resource-group" {
  source = "../modules/resource-group"
}

module "iothub" {
  name     = "${module.resource-group.name}"
  location = "${module.resource-group.location}"
  source   = "../modules/iothub"
}

Но когда я запускаю terraform apply, я получаю сообщение об ошибке * provider.azurerm: Error validating provider: No valid (unexpired) Azure CLI Auth Tokens found. Please run az login .

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

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Невозможно передать конфигурацию провайдера вверх, поэтому, хотя можно определить провайдеров в модуле, вы не можете затем передать эту провайдерскую конфигурацию в родительский (включая корневой) или родственный модуль.

Собственная документация модуля от Terraform , в которой вы должны определить всех провайдеров на корневом уровне.

Я лично добиваюсь этого, определяя один файл провайдера для каждой конфигурации, а затем добавляю символьную ссылку в каждое подходящее место, что означает, что я могу изменить конфигурацию более простым способом, но есть и другие подходы.

Обратите внимание, что иногда у вас может быть веская причина для определения поставщика непосредственно в ресурсе. Я лично определяю конфигурацию postgresql провайдера в моем модуле Postgresql RDS, который создает экземпляр AWS RDS Postgresql , а затем настраивает пользователей и базы данных с помощью поставщика PostgreSQL, подключаясь к динамической конечной точке экземпляром RDS при создании.

...