Использование субъекта-службы Azure в модуле приводит к ошибке поставщика
Я настраиваю инфраструктуру в 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 логин.
Я уже исправил это, переместив код из модуля провайдера в main.tf
файл для моей среды разработки. Но мне любопытно, почему это происходит в первую очередь. Требуется ли ресурс провайдера в корневом модуле?
Спасибо!
1 ответ
Невозможно передать конфигурацию провайдера вверх, поэтому, хотя можно определить провайдеров в модуле, вы не можете затем передать эту провайдерскую конфигурацию родительскому (включая корневой) или родственному модулю.
Собственная документация модуля Terraform, в которой вы должны определить всех провайдеров на корневом уровне.
Я лично достигаю этого, определяя один файл провайдера для каждой конфигурации, а затем символически связываю его с каждым подходящим местоположением, что означает, что я могу изменить конфигурацию проще, но есть и другие подходы.
Обратите внимание, что иногда у вас может быть веская причина для определения поставщика непосредственно в ресурсе. Я лично определяю postgresql
Конфигурация провайдера в моем модуле Postgresql RDS, который создает экземпляр AWS RDS Postgresql, а затем настраивает пользователей и базы данных с помощью поставщика PostgreSQL, подключаясь к динамической конечной точке, предоставляемой экземпляром RDS при создании.