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

Terraform overwriting state file on remote backend

很可能是我做错了什么或遗漏了什么。

这是我的 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

有没有一种方法可以为我 运行 模板的每个项目创建不同的状态文件?

如果我正确理解了您的尝试,那么听起来您需要的是 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

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