我正在使用S3与Terraform进行远程状态。
当我使用 Terraform 工作区时,环境的状态文件的路径最终会s3://<bucket>/env:/<workspace>/<key>
在terraform
块中指定<bucket>
和key
的位置。例如,使用以下地形 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
。