首页 文章

适用于terraform中不同环境的多个后端

提问于
浏览
6

我曾经使用多个运行不同“terraform remote config”命令的.sh文件来切换不同Google Cloud项目中的桶状态文件,用于不同的环境(开发,测试和产品) .

在0.9.0版本中,我知道这现在变成了一个.tf文件:

terraform {
  backend "gcs" {
    bucket = "terraform-state-test"
    path   = "terraform.tfstate"
    project = "cloud-test"
  }
}

在0.9.0版本中,现在还有State Environment(“terraform env”):

resource "google_container_cluster" "container_cluster" {
  initial_node_count = "${terraform.env == "prod" ? 5 : 1}"
}

但是,我现在应该如何使用新的后端配置管理同一目录结构中的多个环境?

1 回答

  • 1

    在撰写本文时,并未对Terraform中的所有远程后端进行更新以支持状态环境 . 对于那些拥有的,每个后端都有自己的约定,用于表示数据存储中的现在多个状态 .

    从版本0.9.2开始,“consul”,“s3”和“local”后端已更新 . “gcs”后端还没有,但是一旦它具有这里描述的过程也将适用于此 .

    最初有一个"default"环境,但是如果您从未选择此环境运行 terraform apply ,那么您可以忽略它并根据需要命名您的环境 .

    要创建一个名为“production”的新环境并切换到它:

    terraform env new production
    

    这将在后端 Build 一个完全独立的状态,因此 terraform plan 应该表明所有资源都需要新创建 .

    您可以在已存在的环境之间切换,如下所示:

    terraform env select production
    

    在0.9之前,许多团队(包括你的团队,听起来像)编写了包装脚本来模拟这种行为 . 这些脚本很可能不遵循存储后端中完全相同的命名约定,因此迁移需要一些手动工作 .

    进行迁移的一种方法是使用"local"后端开始,后端将状态存储在名为 terraform.state.d 的本地目录中 . 在本地工作时,您可以创建所需的环境,然后使用先前脚本化解决方案中的现有状态文件小心地覆盖本地目录中的空状态文件 . 一旦所有本地环境都具有适当的状态,您就可以将配置中的 backend 块更改为适当的远程后端,并运行 terraform init 以触发将所有本地环境迁移到新的后端 .

    在此之后, terraform env select 命令将开始在远程环境而不是本地环境之间切换 .

    如果您选择的远程后端暂时没有继续使用脚本化解决方案 . 这意味着使用the partial configuration pattern替换现有包装器脚本中的 terraform remote config ,以将特定于环境的配置传递到 terraform init .

相关问题