远程后端上的Terraform覆盖状态文件

时间:2018-07-05 18:30:08

标签: google-cloud-platform terraform terraform-provider-gcp

很可能我在这里做错了什么或错过了什么。

这是我的Terraform模板的样子:

locals {
      credentials_file_path    = "~/gcp-auth/account.json"
    }

terraform {
  backend "gcs" {
    bucket  = "somebucket-tf-state"
    prefix  = "terraform/state/"
    credentials = "~/gcp-auth/account.json"
  }
}

provider "google" {
 region = "${var.region}"
 credentials = "${file(local.credentials_file_path)}"
}

module "project" {
  source = "../modules/gcp-project/"
  project_name      = "${var.project_name}"
  billing_account = "${var.billing_account}"
  org_id          = "${var.org_id}"
}

当我使用不同的参数多次运行此命令时,它将覆盖以前的状态文件。

这是我在存储桶中看到的内容:

Buckets/somebucket-tf-state/terraform/state/default.tfstate

是否可以为运行模板的每个项目创建不同的状态文件?

2 个答案:

答案 0 :(得分:1)

更好的选择是使用GitOps。您应该为每个分支创建一个环境,并为每个环境在存储桶名称中注入正确的值。

答案 1 :(得分:0)

如果我了解您要正确执行的操作,那么听起来您需要的是workspaces

只需:

# Select per-project workspace or create new workspace
terraform workspace select $GCE_PROJECT || terraform workspace new $GCE_PROJECT
$ Plan and apply as usual.
terraform plan -out .terraform/.terraform.plan && terraform apply .terraform/.terraform.plan
# Revert to default workspace
terraform workspace select default