是否可以重载 terraform 模块?

Posted

技术标签:

【中文标题】是否可以重载 terraform 模块?【英文标题】:Is it possible to overload a terraform module? 【发布时间】:2021-03-25 14:54:20 【问题描述】:

我正在调用一个创建 GKE 集群和节点池的模块。此模块缺少指定 GPU 和 gVisor 功能的选项。我想知道是否可以重载模块?基本上我想向模块正在创建的资源添加/附加更多配置。

提前致谢。

【问题讨论】:

我不知道。您可以复制模块,然后修改以满足您的要求(如果许可证允许)。 不,这是不可能的。您也不能“重载”资源(目前存在于类似的 DSL 中,例如 Puppet)。 【参考方案1】:

Terraform 的语言偏爱composition 而不是继承/扩展,因此没有机制可以完全按照您的建议行事。

相反,典型的答案是将单个大模块重构为两个或更多较小的模块,然后让调用配置将这些较小的模块组合在一起以产生所需的效果。理想情况下,如果调用者发现其中一个较小的模块不适合他们的需求,那么他们可以只替换那个模块——用另一个用于类似目的的模块或内联 resource/data 块——但是继续使用其他模块。

在您给出的具体示例中,似乎 GKE 集群与其关联的节点池之间可能存在区别。一种可能的新设计是一个模块,声明一个 GKE 集群,然后内联 resource 块来声明要注册到该集群的节点,或者可能是几个封装不同种类 节点池,如果您的架构包含一组固定的节点原型。

话虽如此,如果您使用的模块是第三方模块,那么您唯一的选择是按照作者的意图使用它,或者编写您自己的模块,可能源自原始模块。创建您自己的模块“分支”将确保未来对原始模块的更改不会使您所做的更改无效。

【讨论】:

以上是关于是否可以重载 terraform 模块?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 学习笔记

是否可以使用 terragrunt 调用多个 terraform 模块

Terraform AWS 客户端***

Terraform:使用封闭的网络连接

Terraform 启用 VM Insights

为Terraform服务提供者的开发人员提供帮助