我目前使用Terraform工作空间来配置不同的环境,比如dev、test、prod,我的代码工作得很好。我相信我也可以使用工作空间来配置不同的区域。
但是,我认为Terraform模块可以做同样的事情,对吗?
如果是这样的话,什么时候应该使用工作区,什么时候应该使用模块?还是他们在用不同的方式做类似的事情?
发布于 2018-01-25 19:07:09
我认为Terraform和工作区之间的一个关键区别是模块可以被其他模块和配置继承和使用。Terraform工作区是表示单个环境的配置的集合,而模块是一个或多个模块/配置可以使用的组件。我认为您可以使用模块的方式类似于您如何使用工作区,但您将与模块的意图相矛盾。
例如,假设您希望为公司的所有EC2实例创建一个基本配置文件,该文件允许通过SSH进行通信。您将创建一个模块,该模块可以扩展VM,修改防火墙以允许SSH,以及您希望所有实例都具有的任何其他配置设置。然后,您将让每个VM Terraform配置继承这个文件。这将减少您必须编写的代码数量,并允许您希望在一个中心模块中对所有TF吐露进行任何更改。
发布于 2018-07-27 03:37:11
地形模是封装可重用业务逻辑以便成为干的的一种方法。例如,您可以使用一个模块来定义一个詹金斯设置,然后每次您想要一个jenkins服务器时都调用该模块。换句话说,您可以根据需要实例化模块的次数,以获得相同的结果。
另一方面,Terraform工作区是在环境之间隔离terraform状态的一种方法。例如,您不希望在生产环境和暂存环境之间混合状态。
在实践中,我们强烈建议为所有内容编写模块。这就是为什么我们已经超过100+模块。编写模块就像用其他语言编写“函数”。通常,将所有的逻辑都放在一个函数或作用域中被认为是一种不好的做法;模块帮助我们避免这种情况。
工作空间原则上是不错的,但在实践中,我们建议在生产环境和暂存环境(包括terraform状态)之间不共享任何东西。工作区违反了这一原则。因此,我们设计了一些东西,以便生产状态保持在生产帐户中,而在暂存帐户中保持暂存状态。我们用我们的terraform-aws-tfstate-backend模块来完成这个任务。
作为记录,“我们”指的是云波塞,一家DevOps专业服务公司。我是创立者。所表达的意见是我们自己的意见,未必代表整个社会的意见。:)
https://devops.stackexchange.com/questions/3181
复制相似问题