我决定进一步了解Terraform,并查看是否可以使用Terraform复制在控制台中手动执行的操作。我设置了两个VM,一个可以公开访问,另一个不能通过第一个VM访问。除了防火墙规则外,这两个VM几乎相同。
为了成为DRY,我想创建一个模块,这样就不必重复两个VM的所有选项,而只需指定差异。由于我不确定如何创建模块,因此检查了文档并找到了以下内容:
何时编写模块
[...]
我们不建议编写仅作为单个其他资源类型的精简包装的模块。如果您找不到与模块内部主要资源类型不同的模块名称,则可能表明模块未创建任何新的抽象,因此模块增加了不必要的复杂性。只需直接在调用模块中使用资源类型即可。
来源:https://www.terraform.io/docs/modules/index.html#when-to-write-a-module
对我来说有意义的是,发布仅是单个资源包装器的模块可能没什么用,但是对于您的配置内部使用而言,它似乎是使您的配置变干的有用工具。如果所有VM的10个参数中有9个相同,为什么不创建一个模块从主配置中隐藏9个通用参数而不重复它们?
当我刚接触Terraform时,我只想确保自己没有在教自己不良做法。