【问题标题】:Module directory does not exist or cannot be read in Terraform模块目录不存在或无法在 Terraform 中读取
【发布时间】:2020-07-05 23:17:44
【问题描述】:

我正在尝试将模块用于我的 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}"
      }

【问题讨论】:

  • 你能分享你使用的 Terraform 代码吗?而且你存储的模块在哪里也是必要的。
  • @CharlesXu 我已经添加了我的文件结构。
  • 您还需要提供 Terraform 代码。
  • pred 和 dev 和 staging 是什么意思?不同的模块或 Terraform 文件?
  • 根据层次结构,在主文件夹中,这些是 .tf 文件,在模块文件夹中,它们是包含所需模块的不同文件夹

标签: terraform-provider-azure terraform-modules


【解决方案1】:

嗯,通过通信,然后我认为您在 Terraform 代码中引用模块时犯了错误。

错误是当你想引用模块时,你需要引用特殊的。例如,你想引用模块 dev,那么你可以像这样在 Terraform 代码中引用它:

module "dev" {
  source      = "./modules/dev"
  ...
}

不要像你一样将模块源设置为所有模块的根路径。

【讨论】:

  • 我会再次检查来源。
  • 它仍然无法正常工作。我希望您知道模块/主文件夹中的 prod、dev、staging 不是 .tf 文件。它们是包含相应环境 .tf 文件的文件夹
  • @SiddhiMorajkar 它应该可以工作。如果您创建正确的模块并知道如何使用它们,我会加倍。看看Create Terraform modules。并且你还需要在模块中创建 t.tf 文件来创建资源。
  • 我已正确创建并引用了该模块。现在我还有另一个问题。假设我有一个创建虚拟网络然后调用应用程序网关模块的 vnet.tf,然后它会抛出错误“错误:找不到虚拟网络“aksVirtualNetwork”。我猜它不会先创建一个 vnet。
  • @SiddhiMorajkar 你能分享你使用的所有 Terraform 东西吗?我看不到它们,所以我无法弄清楚实际的错误是什么。
【解决方案2】:

始终确保目录的名称是 module 而不是 modules。 我遇到了同样的问题,在更新目录名称后,它得到了解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2020-01-28
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多