Terraform 输出变量作为输入

4
我是一名有用的助手,可以为您翻译文本。

我对Terraform还不熟悉,正在努力理解输出变量的用法。我们使用AKS,并部署以下资源:资源组、日志分析工作区、Azure Kubernetes。当部署日志分析时,我将工作区ID捕获到一个输出变量中。现在,当Terraform部署Kubernetes时,它需要知道工作区ID,我该如何将输出值传递给addon_profile(下面代码中的最后一行)?

错误:

environment = "${log_analytics_workspace_id.value}"

A managed resource "log_analytics_workspace_id" "value" has not been declared in the root module.

代码:
resource "azurerm_resource_group" "test" {
  name     = "${var.log}"
  location = "${var.location}" 
}

resource "azurerm_log_analytics_workspace" "test" {
  name                = "${var.logname}"
  location            = "${azurerm_resource_group.loganalytics.location}"
  resource_group_name = "${azurerm_resource_group.loganalytics.name}"
  sku                 = "PerGB2018"
  retention_in_days   = 30
}

**output "log_analytics_workspace_id" {
  value = "${azurerm_log_analytics_workspace.test.workspace_id}"
}** 

....................................................

addon_profile {
      oms_agent {
        enabled                    = true
        **log_analytics_workspace_id = "${log_analytics_workspace_id.value}"**
      }
}
1个回答

2

Terraform输出值就像模块的“返回值”。要声明和使用log_analytics_workspace_id输出值,您需要将创建资源组、日志分析工作区和Azure Kubernetes基础结构的所有代码放入单个Terraform模块中,然后从模块外部引用输出值:

原始答案: "最初的回答"

# declare your module here, which contains creation code for all your Azure infrastructure + the output variable
module "azure_analytics" {
  source = "git::ssh://git@github.com..."
}

# now, you can reference the output variable in your addon_profile from outside the module:
addon_profile {
      oms_agent {
        enabled                    = true
        log_analytics_workspace_id = "${module.azure_analytics.log_analytics_workspace_id}"
      }
}

另一方面,如果你只想在同一段代码中使用azurerm_log_analytics_workspaceworkspace_id值,只需像这样引用它azurerm_log_analytics_workspace.test.workspace_id


1
非常感谢,这正是我所需要的。目前来看,第二个选项似乎更容易实现。 - Mario Jacobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接