问题描述
在使用Terraform时遇到了一些问题。他们有一个Terraform项目,由几个开发人员共享,并使用非默认工作区(即命名工作区,而不是默认工作区)。用户希望所有开发人员能够像默认工作区一样共享对该共享工作区的Terraform状态的访问权限。用户已经设置了使用S3的远程状态,因此状态文件是单例的,但由于某种原因,无法在每个开发人员的机器上识别远程状态文件。
用户希望的工作流程是,当开发人员A对Terraform进行更改(使用terraform apply
)时,运行terraform state list
的任何其他开发人员都应该在部署的基础设施中看到该更改,并且该工作流程应该适用于任何工作区,而不仅仅是默认工作区。
用户想知道如何实现这一点。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
根据Terraform的文档,工作区是用于不同资源的:
“Named workspaces allow conveniently switching between multiple instances of a single configuration within its single backend. They are convenient in a number of situations, but cannot solve all problems.”
“A common use for multiple workspaces is to create a parallel, distinct copy of a set of infrastructure in order to test a set of changes before modifying the main production infrastructure. For example, a developer working on a complex set of infrastructure changes might create a new temporary workspace in order to freely experiment with changes without affecting the default workspace.”
如果您希望所有开发人员看到相同的状态,他们必须使用相同的工作区。如果您希望对于任意工作区都是如此,那么似乎这是对工作区概念的滥用。虽然可能有一些自动化的方式将非默认工作区的资源导入到默认工作区中,但我强烈建议不要这样做。您还可以将默认工作区的状态用作非默认工作区的远程状态,但同样,我强烈建议不要这样做,因为这会给您的流程引入不必要的复杂性和脆弱性。
如果您希望所有开发人员在状态中看到相同的资源,那么他们应该简单地使用相同的工作区。如果他们没有看到正确的状态,那是因为他们使用的工作区或远程状态位置不同。