我可以将 Terraform 配置为不在 S3 上工作区状态文件路径的路径中使用 "env:" 吗?

Can I configure Terraform to not use "env:" in the path for a workspace's state file path on S3?

我将 S3 用于 Terraform 的远程状态。

当我使用 Terraform 工作区时,环境状态文件的路径最终为 s3://<bucket>/env:/<workspace>/<key>,其中 <bucket>keyterraform 中指定堵塞。例如,使用以下 Terraform HCL:

terraform {
  backend "s3" {
    bucket = "devops"
    key = "tf-state/abc/xyz.tfstate"
    region = "us-east-1"
  }
}

如果我们使用 Terraform 工作区,像这样:

$ terraform workspace new myapp-dev
$ terraform workspace select myapp-dev
$ terraform init
$ terraform apply

然后我们将在以下路径中得到 Terraform 状态文件:s3://devops/env:/myapp-dev/tf-state/abc/xyz.tfstate

Terraform 似乎默认使用名为 env: 的子目录,在该子目录下管理与工作区关联的状态文件。我的问题是,我们能否在 Terraform 配置中添加任何内容,使我们能够控制其中的 env: 部分?

使用非默认工作区时,S3 存储桶中的状态路径包括 workspace_key_prefix 的值,例如:

/<workspace_key_prefix>/<workspace_name>/<key>

workspace_key_prefix的默认值为env:。您可以将配置更改为:

terraform {
  backend "s3" {
    bucket = "devops"
    key = "terraform.tfstate"
    region = "us-east-1"
    workspace_key_prefix = "tf-state"
  }
}

然后,当使用 myapp-dev 工作区时,状态文件将为 s3://devops/tf-state/myapp-dev/terraform.tfstate