针对不同环境的Terraform远程状态

针对不同环境的Terraform远程状态,terraform,Terraform,如何管理不同环境的远程状态?我最初想在远程状态定义中使用变量,但意识到我不能使用以下变量: provider "aws" { region = "ap-southeast-1" } terraform { backend "s3" { bucket = "${var.state_bucket}" key = "${var.state_key}" region = "ap-southeast-1" } } data "terraform_remote_sta

如何管理不同环境的远程状态?我最初想在远程状态定义中使用变量,但意识到我不能使用以下变量:

provider "aws" {
  region = "ap-southeast-1"
}

terraform {
  backend "s3" {
    bucket = "${var.state_bucket}"
    key = "${var.state_key}"
    region = "ap-southeast-1"
  }
}

data "terraform_remote_state" "s3_state" {
  backend = "s3"
  config {
    bucket = "${var.state_bucket}"
    key = "${var.state_key}"
    region = "ap-southeast-1"
  }
}

但我意识到我不能在这种情况下使用变量?我可以对bucket名称进行硬编码,但不同环境下的bucket可能不同

您需要使用Terraform所称的工作空间。以下是文件:

所以你们有一个状态块叫做:MyStateKey

使用工作空间时,它会将工作空间名称附加到现有键的末尾。例如,如果您创建了一个名为“dev”的工作区,那么处于远程状态的密钥将是“MyStateKey:dev”


我建议您使用一些约定来简化操作,比如将“默认”工作区用作生产,并使用其他环境命名的其他工作区。然后,当您运行terraform时,您可以设置工作空间或使用TF_workspace环境变量来设置它。

可能的重复基于建议的重复和上述问题,是否可以为
键和
桶提供
数据?我们有一个惯例,确保从不使用
default
,基本上有一个资源检查
terraform。workspace
不是“默认”,否则它会停止。这样做的目的是,最好明确说明您的目标环境。