在 Terraform 中,如何在包含的模块中引用根模块中创建的组件
Posted
技术标签:
【中文标题】在 Terraform 中,如何在包含的模块中引用根模块中创建的组件【英文标题】:In Terraform , how to refer to components created in root module in included modules 【发布时间】: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代码? 【参考方案1】:模块无权访问父级中的资源,除非这些资源作为变量传递给模块。
【讨论】:
这意味着我必须使用变量?有没有办法通过数据等其他机制提取名称? 变量是执行此操作的方法。如果您尝试通过在父模块中创建的子模块中的数据引用某些内容,您将收到 Terraform 计划错误,因为您尝试在模块中查找的数据在计划时尚未由父模块创建已生成。以上是关于在 Terraform 中,如何在包含的模块中引用根模块中创建的组件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Hashicorp Terraform 中配置环境变量
如何在 terraform 路由表中引用 AWS 本地前缀列表?