我过去常常使用多个.sh文件运行不同的#ter; terraform远程配置"命令在不同Google Cloud项目的存储桶中的状态文件之间切换,用于不同的环境(开发,测试和产品)。
对于0.9.0版本,我知道这现在变成了一个.tf文件:
terraform {
backend "gcs" {
bucket = "terraform-state-test"
path = "terraform.tfstate"
project = "cloud-test"
}
}
在版本0.9.0中,现在还有状态环境(" terraform env"):
resource "google_container_cluster" "container_cluster" {
initial_node_count = "${terraform.env == "prod" ? 5 : 1}"
}
但是,我现在应该如何使用新的后端配置管理同一目录结构中的多个环境?
答案 0 :(得分:1)
在撰写本文时,并非所有Terraform中的远程后端都已更新为支持状态环境。对于那些拥有的,每个后端都有自己的约定,用于表示数据存储中的现在多个状态。
从版本0.9.2开始,"领事"," s3"和#34;本地"后端已更新。 " gcs"后端还没有,但一旦它有这里描述的程序也将适用于此。
最初是"默认"环境,但是如果您从未选择此环境运行terraform apply
,那么您可以忽略它并为您的环境命名。
创建一个名为" production"然后切换到它:
terraform env new production
这将在后端建立一个完全独立的状态,因此terraform plan
应该表明所有资源都需要新创建。
您可以在已存在的环境之间切换,如下所示:
terraform env select production
在0.9之前,许多团队(包括你的团队,听起来像)编写了包装脚本来模拟这种行为。这些脚本很可能并未遵循存储后端中完全相同的命名约定,因此迁移需要一些手动工作。
进行迁移的一种方法是开始使用" local" backend,它将状态存储在名为terraform.state.d
的本地目录中。在本地工作时,您可以创建所需的环境,然后使用先前脚本化解决方案中的现有状态文件小心地覆盖本地目录中的空状态文件。一旦所有本地环境都具有适当的状态,您就可以将配置中的backend
块更改为适当的远程后端,并运行terraform init
以触发将所有本地环境迁移到新的后端。
此后,terraform env select
命令将开始在远程环境之间切换,而不是在本地环境之间切换。
如果您选择的远程后端还不支持环境,那么最好继续使用脚本化解决方案。这意味着使用the partial configuration pattern替换现有包装器脚本中的terraform remote config
,以将特定于环境的配置传递到terraform init
。