我通过Terraform管理3个环境:dev, staging, prod。
用例示例如下:
- 创建"common"各环境服务帐号(sa-xxx@dev + sa-xxx@staging + sa-xxx@prod)
- 创建"dev-specific;这个角色sa-xxx@dev SA
- 创建" stage -specific"这个角色sa-xxx@staging SA
- 创建"产品规格";这个角色sa-xxx@prod SA
如何轻松管理公共&每个环境的特定资源?
如果所有环境都是平等的,那么Terraform是非常简单的,但对于特定的环境,它看起来更复杂。我们的目标是有一个结构化的方法来管理它,然后避免:- 代码复制在3个不同的文件夹
- "count"每个tf资源定义 中的条件
Terraform应该可以查看当前根文件夹UNION dev/staging/prod文件夹(取决于环境)
需求很简单,但实现起来似乎很困难。
谢谢你的帮助!:)
这是一个相当宽泛的问题,因此很难具体地回答,但是这个问题的一个一般答案是利用共享模块作为在独立配置之间共享代码的一种手段。
Module Composition指南描述了一些不同的模式,它们可能会帮助你实现你的目标。这个想法是让你的每个配置共享模块,只要它们这样做是有意义的,但也可能使用不同的模块——或者相同的模块,但具有不同的关系/基数——这样你的配置可以表示它们之间的相同和不同之处。
一种方法是将共享资源放在以远程状态管理的公共配置中。然后在其他配置中,您可以使用terraform_remote_state数据源引用共享的远程状态。