【发布时间】:2021-01-16 02:57:01
【问题描述】:
环境隔离:Dirs v. Workspaces v. Modules
Terraform 文档Separate Development and Production Environments 似乎采用两种主要方法来处理“开发/测试/阶段”类型的 CI 环境,即
- 目录分离 - 看起来很混乱,尤其是当您可能有多个存储库时
- 工作区 + 不同的 Var 文件
除了当您查找 workspaces 时,它似乎暗示工作空间不是隔离环境的正确解决方案。
特别是,组织通常希望在服务于不同开发阶段(例如暂存与生产)或不同内部团队的同一基础架构的多个部署之间建立强有力的分离。在这种情况下,用于每个部署的后端通常属于该部署,具有不同的凭据和访问控制。命名工作空间不适合这种情况。
相反,使用一个或多个可重用模块来表示公共元素,然后将每个实例表示为一个单独的配置,该配置在不同后端的上下文中实例化这些公共元素。在这种情况下,每个配置的根模块将仅包含一个后端配置和少量模块块,其参数描述了部署之间的任何微小差异。
我也想考虑使用远程状态——例如azurerm backend
最佳实践问题
- 当文档提到使用“可重用”模块时,如果说我没有现有的配置文件夹会是什么样子?我还需要为 dev/test/stage 创建一个单独的文件夹吗?
- 使用远程后端时,状态文件是默认跨 repos 共享还是由 repo 和 enviornment 分隔?
例如
terraform {
backend "azurerm" {
storage_account_name = "tfstorageaccount"
container_name = "tfstate"
key = "${var.enviornment}.terraform.tfstate"
}
}
对比
terraform {
backend "azurerm" {
storage_account_name = "tfstorageaccount"
container_name = "tfstate"
key = "cache_cluster_${var.enviornment}.terraform.tfstate"
}
}
【问题讨论】:
-
这个问题可能会因为过于宽泛和基于观点而被关闭,所以我建议重做这个问题。至于 learn Hashicorp 网站,值得注意的是其中的练习是出于教学目的,不应被视为最佳实践的指示。
标签: terraform