在模块中使用 terraform 模块

时间:2021-03-30 11:12:14

标签: terraform terraform-provider-azure

我们正致力于为我们组织中的 Azure 云创建各种 terraform 模块。我对使用这些模块有一个基本的疑问。

假设我们创建了一个用于创建资源组的模块。当我们为存储容器编写模块时,是使用存储模块本身内部的资源组模块更好还是让用户terraform脚本处理它指定多个模块资源更好。例如,

module resourcegroup {
…
}
module storage {
}

谢谢, 猎犬

1 个答案:

答案 0 :(得分:0)

您在这里考虑的是设计权衡,而不是具有普遍答案的问题。话虽如此,Terraform 文档部分 Module Composition 建议您尽可能仅使用一层模块嵌套,然后让根模块将一个模块的输出连接到另一个模块的输入。

您可能决定违背该建议并创建多层嵌套的一种情况是,当您想编写一个模块时,该模块有意限制或提高其他人编写的另一个模块的抽象级别。 Terraform Registry 上共享的模块通常非常通用,以便为各种不同的用例提供服务,但这些模块也可能封装了相关系统的一些设计最佳实践,因此您可以选择包装其中的一个或多个更直接地满足您的用例的更具体模块中的通用模块,并希望反过来使您的“包装模块”更易于使用。

然而,始终重要的是要记住,尽管 Terraform 模块可以在某种意义上封装复杂性,但在 Terraform 的情况下,它们无法真正隐藏这种复杂性,就像我们对库所期望的那样在通用语言中,因为 root 模块的维护者最终负责理解应用计划的全部后果,这涉及审查所有提议的更改,甚至是对封装在嵌套模块中的资源的更改。< /p>

相关问题