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。您应该为每个分支创建一个环境,并为每个环境在存储桶名称中注入正确的值。
很可能是我做错了什么或遗漏了什么。
这是我的 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。您应该为每个分支创建一个环境,并为每个环境在存储桶名称中注入正确的值。