【问题标题】:Terraform: "Error: Reference to undeclared resource when calling modules from terragrunt" in AzureTerraform:Azure 中的“错误:从 terragrunt 调用模块时引用未声明的资源”
【发布时间】:2020-04-25 04:58:43
【问题描述】:

我第一次尝试使用 terragrunt。我遵循了引用https://terratest.gruntwork.io/docs/getting-started/quick-start/ 的目录结构。我想保留在我的环境文件夹中使用的重复 main.tf、outputs.tf 和 vars.tf 的 gid。以下是我面临的版本和错误。任何帮助将不胜感激。提前致谢。

Terragrunt 版本

terragrunt version v0.23.10

地形版本

Terraform v0.12.24

目录结构

terraform-live/
├── prod
│   └── resource_group
│   ├── main.tf
│   └── terragrunt.hcl
└── terragrunt.hcl

terraform-live/terragrunt.hcl 的内容

backend = "azurerm"
config = {
    key = "${path_relative_to_include()}/terraform.tfstate"
    resource_group_name = "common-rg"
    storage_account_name = "testsa01"
    container_name = "tfstate"
  }

}

terraform-live/prod/resource_group/main.tf 的内容

backend "azurerm" {}
}

terraform-live/prod/resource_group/terragrunt.hcl 的内容

terraform {
  source = "git::git@github.com:adi4dpeople/terraform_modules.git//resource_group?ref=v0.0.1"
}

# Include all settings from the root terragrunt.hcl file
include {
  path = find_in_parent_folders()
}

# These are the variables we have to pass in to use the module specified in the terragrunt configuration above
inputs = {
  location = "westus"
  rg_name  = "testrg01"
}

当我运行 terragrunt plan 时,出现以下错误:

[terragrunt] 2020/04/24 22:24:39 Reading Terragrunt config file at /home/aditya/terraform-live/prod/resource_group/terragrunt.hcl
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:39 Running command: terraform --version
[terragrunt] 2020/04/24 22:24:44 Terraform files in /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group are up to date. Will not download again.
[terragrunt] 2020/04/24 22:24:44 Copying files from /home/aditya/terraform-live/prod/resource_group into /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group
[terragrunt] 2020/04/24 22:24:44 Setting working directory to /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:44 Backend azurerm has not changed.
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:44 Running command: terraform init -backend-config=access_key=xxxxxxxxxxxx -backend-config=container_name=tfstate -backend-config=key=prod/resource_group/terraform.tfstate -backend-config=resource_group_name=testrg01 -backend-config=storage_account_name=testsa01

Initializing the backend...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
[terragrunt] 2020/04/24 22:24:52 Running command: terraform plan
Acquiring state lock. This may take a few moments...

Error: Reference to undeclared resource

  on outputs.tf line 2, in output "id":
   2:   value = azurerm_resource_group.rg.id

A managed resource "azurerm_resource_group" "rg" has not been declared in the
root module.


Error: Reference to undeclared resource

  on outputs.tf line 6, in output "name":
   6:   value = azurerm_resource_group.rg.name

A managed resource "azurerm_resource_group" "rg" has not been declared in the
root module.

Releasing state lock. This may take a few moments...
[terragrunt] 2020/04/24 22:25:01 Hit multiple errors:
exit status 1 
aditya@LAPTOP-6C2MPJDV:~/terraform-live/prod/resource_group$

【问题讨论】:

    标签: terraform-provider-azure terragrunt terraform0.12+


    【解决方案1】:

    我在 terragrunt 上解决了这个 GitHub 问题 https://github.com/gruntwork-io/terragrunt/issues/1151

    【讨论】:

      【解决方案2】:

      我在尝试为 Azure Kubernetes 集群创建分配拉取角色以使用 托管系统从 Azure 容器注册表 拉取图像时遇到类似问题身份

      Azure 角色分配(outputs.tf 文件)

      output "acr_id" {
        value = azure_container_registry.acr.id
      }
      

      这被放在一个名为 azure-role-assignment

      的模块目录中

      但是,当我在我的测试环境中调用模​​块输出文件(main.tf 文件)时:

      # Create azure container registry
      module "azure_container_registry" {
        source                   = "../modules/azure-container-registry"
        container_registry_name  = var.container_registry_name
        resource_group_name      = var.resource_group_name
        location                 = var.location
        sku                      = var.sku
        admin_enabled            = var.admin_enabled
      }
      
      # Create azure role assignment
      module "azure_role_assignment" {
        source                   = "../modules/azure-role-assignment"
        scope                    = module.azure_container_registry.acr_id
        role_definition_name     = var.role_definition_name
        principal_id             = module.azure_kubernetes_cluster.principal_id
      }
      

      但是,当我运行 terraform apply 时,我得到了错误:

      Error: Reference to undeclared resource
      
        on ../modules/azure-container-registry/outputs.tf line 2, in output "acr_id":
         2:   value = azure_container_registry.acr.id
      
      A managed resource "azure_container_registry" "acr" has not been declared in
      module.azure_container_registry.
      

      我是这样解决的

      问题在于我如何在outputs.tf 文件中定义arc_id 的值。而不是这个:

      Azure 角色分配(outputs.tf 文件)

      output "acr_id" {
        value = azure_container_registry.acr.id
      }
      

      应该是这样的:

      Azure role assignment (`outputs.tf` file)
      
      output "acr_id" {
        value = azurerm_container_registry.acr.id
      }
      

      那是azurerm_container_registry.acr.id 而不是azure_container_registry.acr.id

      就是这样。

      我希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 2020-03-17
        • 2020-06-30
        • 1970-01-01
        • 2019-08-04
        相关资源
        最近更新 更多