Terraform中不同环境的多个后端 [英] Multiple backends for different environments in terraform
问题描述
我曾经使用多个.sh文件运行不同的"terraform remote config"命令,在不同环境(dev、test和prod)的不同Google Cloud项目的Bucket中切换状态文件。
在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}"
}
但我现在应该如何使用新的后端配置管理同一目录结构中的多个环境?
推荐答案
在撰写本文时,并非所有Terraform中的远程后端都已更新以支持状态环境。对于那些拥有的,每个后端对于如何在数据存储中表示现在的多个状态都有自己的约定。
从0.9.2版本开始,"consul"、"s3"和"local"后端都进行了更新。"GCS"后端还没有,但是一旦有了,这里描述的过程也将适用于此。
最初有一个"默认"环境,但是如果您从未在选择此环境的情况下运行terraform apply
,那么您可以忽略它并随心所欲地命名您的环境。
创建名为"Production"的新环境并切换到该环境:
terraform env new production
这将在后端建立一个完全独立的状态,因此terraform plan
应该显示所有资源都需要全新创建。
您可以在已经存在的环境之间进行切换,如下所示:
terraform env select production
0.9之前,许多团队(包括您的团队,听起来像是)都编写了包装器脚本来模拟此行为。很可能这些脚本在存储后端中不遵循完全相同的命名约定,因此需要一些手动工作才能迁移。
执行该迁移的一种方法是开始使用"本地"后端,该后端将状态存储在名为terraform.state.d
的本地目录中。在本地工作时,您可以创建所需的环境,然后用上一个脚本解决方案中的现有状态文件小心地覆盖本地目录中的空状态文件。一旦所有本地环境都有了适当的状态,您就可以将配置中的backend
挡路更改为适当的远程后端,并运行terraform init
以触发将所有本地环境迁移到新后端。
之后,terraform env select
命令将开始在远程环境之间切换,而不是在本地环境之间切换。
如果您选择的远程后端还不支持环境,那么目前最好继续使用脚本化解决方案。这意味着将现有包装器脚本中的terraform remote config
替换为the partial configuration pattern,以将特定于环境的配置传递到terraform init
。
这篇关于Terraform中不同环境的多个后端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!