【问题标题】:In Terraform , how to refer to components created in root module in included modules在 Terraform 中,如何在包含的模块中引用根模块中创建的组件
【发布时间】:2020-11-25 17:16:38
【问题描述】:

下面的例子是为了给出一个关于这个问题的想法。

我在 Terraform 脚本的根模块中创建了一个资源组和 EventHubNS

我有另一个模块,称为 processingmodule ,它具有功能、EventHub 和其他一些聚合组件。

所以根模块如下 - 创建 Azure 资源组 创建 EventHubNS 创建处理模块

如果事件中心是在根模块中创建的,则使用下面的资源块创建 eventhub 资源

resource "azurerm_eventhub" "eventhub" {
  name                = "${var.eventhubname}-eh"
  namespace_name      = azurerm_eventhub_namespace.eventhubns.name
  resource_group_name = azurerm_resource_group.RG.name
  partition_count     = var.eventhub_partitioncount
  message_retention   = 5
 
}

如果我写模块,namespace_name和resource_group_name不能引用,如下所示

namespace_name      = azurerm_eventhub_namespace.eventhubns.name
resource_group_name = azurerm_resource_group.RG.name

相反,namespace_name 应该通过变量来引用。

namespace_name      = var.eventhubnsname
resource_group_name = var.resourcegroupname

所以问题是 - 无论如何都可以从 processingcomponent 模块引用根模块中创建的资源

【问题讨论】:

  • 能否提供完整的sn-p代码?

标签: terraform terraform-provider-aws terraform-provider-azure


【解决方案1】:

模块无权访问父级中的资源,除非这些资源作为变量传递给模块。

【讨论】:

  • 这意味着我必须使用变量?有没有办法通过数据等其他机制提取名称?
  • 变量是执行此操作的方法。如果您尝试通过在父模块中创建的子模块中的数据引用某些内容,您将收到 Terraform 计划错误,因为您尝试在模块中查找的数据在计划时尚未由父模块创建已生成。
猜你喜欢
  • 2021-06-14
  • 2021-06-26
  • 2013-10-28
  • 2019-03-19
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2021-06-26
  • 2011-12-29
相关资源
最近更新 更多