Каталог модуля не существует или не может быть прочитан в Terraform
Я пытаюсь использовать модули для зависимостей в моем коде Terraform. Но даже после упоминания этого конкретного исходного пути в модуле появляется сообщение об ошибке "Каталог модуля не существует или не может быть прочитан" и "Невозможно оценить каталог - система не может найти указанный файл". Может ли кто-нибудь сообщить мне, в чем может быть причина.
Мне нужно управлять 3 различными средами с 3 различными файлами состояния сервера для каждой среды. Здесь каждый основной файл вызывает соответствующий файл модуля. Основная папка состоит из конфигурации серверной части, создания группы ресурсов и вызывает файл модулей.
root
|
|-- main
| |--prod
| |--dev
| |--staging
|-- modules
| |--prod
| |--dev
| |--staging
------------КОД-----------------
provider "azurerm" {
version = "=2.2.0"
features {}
}
#--- CREATING RESOURCE GROUP PER ENVIRONEMENT
terraform {
backend "azurerm" {
resource_group_name = ""
storage_account_name = ""
container_name = ""
key = ""
}
}
variable "location" {
description = "Location for deployment of the Azure
resources"
}
variable "Code" {
description = "Enter a unique two-letter ID to identify
customer resources; should match the DynamoDB table."
}
variable "EnvironmentType" {
description = "Enter a valid environment type. Valid values are
Prod, Dev, Staging"
}
variable "AccountType" {
description = "Select the type of account you wish to create. This
will determine which environments and other resources are created."
}
resource "azurerm_resource_group" "main" {
name = "${var.Code}-${var.EnvironmentType}"
location = "${var.location}"
}
module "ResourcesStack" {
source = "./modules"
AccountType = "${var.AccountType}"
CustomerCode = "${var.Code}"
EnvironmentType = "${var.EnvironmentType}"
location = "${var.location}"
}
4 ответа
Ну, с коммуникацией, а потом, я думаю, вы сделали ошибку, цитируя модули в коде Terraform.
Ошибка в том, что когда вы хотите процитировать модули, вам нужно указать специальный. Например, вы хотите процитировать модуль dev, затем вы можете указать его в коде Terraform следующим образом:
module "dev" {
source = "./modules/dev"
...
}
Не устанавливайте источник модуля с корневым путем всех модулей, как вы это сделали.
Проверьте свой рабочий каталог Terraform в облаке Terraform. Каталог, в котором будет выполняться Terraform. По умолчанию это корень вашего репозитория и обычно устанавливается подкаталог, соответствующий среде, когда в одном репозитории существует несколько сред. Добавьте путь вашего модуля в рабочий каталог Terraform.
Недавно я столкнулся с аналогичной проблемой при запуске terraform в автоматизации (сборка кода AWS), что привело меня к этому сообщению. Сценарий работал нормально локально на моем рабочем столе, но не удалось автоматизировать, возможно, из-за того, как он был упакован.
Инициализация модулей...
- установка в
- s3_agent в ../modules/s3
- s3_artifacts в ../modules/s3 ╷ │ Ошибка: нечитаемый каталог модулей │ │ Невозможно оценить символическую ссылку каталога: lstat modules: нет такого файла или │ каталог ╵ Каталог модуля не существует или не может быть прочитан.
Я заметил, что выделенный выше модуль установки не показывает путь к модулю. Только спустя несколько часов я понял, что в общем каталоге, в котором были сценарии терраформирования, было 2 папки с одинаковыми именами « модули », хотя и в другой иерархии папок. Смущало Terraform, что все модули лежат в 1 папке.
Решение: я переименовал одну из папок, в которой был модуль установки, как модуль вместо «модуля s » .
Я надеюсь, что это помогает кому-то.
Всегда проверяйте, что имя каталога - это модуль, а не модули. Я столкнулся с той же проблемой, и после обновления имени каталога она была решена.