【问题标题】:Terraform remote state for different environments针对不同环境的 Terraform 远程状态
【发布时间】:2019-01-22 20:56:42
【问题描述】:

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

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"
  }
}

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

【问题讨论】:

标签: terraform


【解决方案1】:

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

这样你就有了一个名为:MyStateKey 的状态

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

我建议您使用一些约定以使其更容易,例如使用“默认”工作区作为生产环境,以及以您的其他环境命名的其他工作区。然后在运行 terraform 时可以设置工作空间或使用 TF_WORKSPACE 环境变量进行设置。

【讨论】:

  • 我们有一个约定,确保永远不会使用default,基本上有一个资源可以检查terraform.workspace 不是“默认”,否则它会停止。这个想法是最好明确您的目标环境。
猜你喜欢
  • 2016-11-24
  • 2016-12-22
  • 1970-01-01
  • 2016-08-28
  • 2021-12-11
  • 2019-07-28
  • 2018-03-17
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多