但是,我对每个环境应该有多少tfstates
感到困惑。我了解stage/prod/dev
中的每个环境都应该分别拥有自己的tfstate
。但这是否意味着每个环境中应该只有一个tfstate
(例如:一个用于阶段,一个用于生产,一个用于开发)总共三个tftstates
,其中所有配置都驻留在该环境将被记录?还是每个环境都应具有多个tftstates
(例如:阶段将为tftstate
提供vpc config
,为frontend-apps配置提供另一个tftstate
,为后端提供另一个tftstate
应用…等),以及与prod和dev相似吗?
答案 0 :(得分:0)
我玩了一堆堆东西来进行状态管理,并将所有内容分开。您应该为每个环境设置单独的状态。
这可能与您在互联网上遇到的建议不同。即。创建单独的文件夹并在默认环境下具有状态。
我通过单个S3存储桶和dynamodb的状态和锁定来维护特定于client-env的工作区命名,从而维护单个工作区的状态。
Terraform使它们保持独立的w.r.t工作区前缀,S3存储桶如下所示。
-terraform (workspace-prefix)
-clientA-ENV-A
-clientA-ENV-B
-clientB-ENV-A
...
我为所有客户端和环境运行相同的Terraform配方,因此不会复制粘贴任何代码。
多个用户可以在客户端和env特定的工作区上工作,这有助于CI / CD避免重复初始化。