Terraform aks 模块 - 通过远程状态获取集群名称和资源组名称

Terraform aks module - get cluster name and resource group name via remote state

嗨,我正在尝试按照 this offical guide to manage aks resources. There terraform_remote_state 用于获取 resource_group_namekubernetes_cluster_name

data "terraform_remote_state" "aks" {
  backend = "local"

  config = {
    path = "/path/to/base/project/terraform.tfstate"
  }
}

# Retrieve AKS cluster information
provider "azurerm" {
  features {}
}

data "azurerm_kubernetes_cluster" "cluster" {
  name                = data.terraform_remote_state.aks.outputs.kubernetes_cluster_name
  resource_group_name = data.terraform_remote_state.aks.outputs.resource_group_name
}

我在文档中使用 aks module. Looking at its output 创建了初始 aks 集群,它不导出资源组名称或集群名称。

现在我想知道如何获得这些信息。我在基础项目中尝试了以下内容。

module "aks" {
  ...
}

output "resource_group_name" {
  value = module.aks.resource_group_name
}

output "kubernetes_cluster_name" {
  value = module.aks.cluster_name
}

但是我在尝试时遇到错误 terraform plan

Error: Unsupported attribute
│ 
│   on main.tf line 59, in output "resource_group_name":
│   59:   value = module.aks.resource_group_name
│     ├────────────────
│     │ module.aks is a object, known only after apply
│ 
│ This object does not have an attribute named "resource_group_name".
╵
╷
│ Error: Unsupported attribute
│ 
│   on main.tf line 63, in output "kubernetes_cluster_name":
│   63:   value = module.aks.cluster_name
│     ├────────────────
│     │ module.aks is a object, known only after apply
│ 
│ This object does not have an attribute named "cluster_name".

不过,这些在该模块的 inputs 下列出。现在我不知道如何从 terraform_remote_state.

中获取这些值

由于模块本身没有名称和资源组作为输出,我们必须先在那里声明输出,然后在部署或远程状态下调用它。

因此我们必须在执行 terraform init 后在 output.tf 中为 aks 模块添加 2 个输出。

output "kubernetes_cluster_name" {
  value = azurerm_kubernetes_cluster.main.name
}

output "resource_group_name" {
  value = azurerm_kubernetes_cluster.main.resource_group_name
}

然后在定义模块后调用 main.tf 中的输出,即 network 和 aks ,您也可以在计划中看到您的 Kubernetes 集群名称,并在应用它之后。

output "kuberneteclustername" {
  value = module.aks.kubernetes_cluster_name
}

output "resourcegroupname" {
  value = module.aks.resource_group_name
}

现在让我们从远程状态测试它:

data "terraform_remote_state" "aks" {
  backend = "local"

  config = {
    path = "path/to/terraform/aksmodule/terraform.tfstate"
  }
}

# Retrieve AKS cluster information
provider "azurerm" {
  features {}
}

data "azurerm_kubernetes_cluster" "cluster" {
  name                = data.terraform_remote_state.aks.outputs.kuberneteclustername
  resource_group_name = data.terraform_remote_state.aks.outputs.resourcegroupname
}

output "aks" {
  value = data.azurerm_kubernetes_cluster.cluster.name
}
output "rg" {
  value = data.azurerm_kubernetes_cluster.cluster.resource_group_name
}