适用于不同环境的Terraform远程状态

时间:2019-01-22 10:30:01

标签: 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_state" "s3_state" {
  backend = "s3"
  config {
    bucket = "${var.state_bucket}"
    key = "${var.state_key}"
    region = "ap-southeast-1"
  }
}

但是意识到在这种情况下我不能使用变量吗?我可以对存储桶名称进行硬编码,但在不同环境中存储桶可能不相同

1 个答案:

答案 0 :(得分:1)

您将要使用Terraform所谓的工作区。这是文档:https://www.terraform.io/docs/state/workspaces.html

这样,您就有了一个状态:MyStateKey

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

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