Terraform 通过地形变量的并行实例?

Terraform 通过地形变量的并行实例?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我被地形变量的作用弄糊涂了。现在,它们似乎对解决我的具体需求毫无用处,也许我真的找错了方向。假设我有这样一个配置: variable "majorVersion" { type = "string" } module "media-assets" { majorVersion = "${var.majorVersion}" region = "us-east-1" bucket = "uploads-${var.majorVer

我被地形变量的作用弄糊涂了。现在,它们似乎对解决我的具体需求毫无用处,也许我真的找错了方向。假设我有这样一个配置:

variable "majorVersion" {
  type        = "string"
}

module "media-assets" {
  majorVersion   = "${var.majorVersion}"
  region         = "us-east-1"
  bucket         = "uploads-${var.majorVersion}"
  source         = "./modules/media-assets"
  user           = "appics-production"
}
让我们简单地假设资产模块现在定义了S3存储桶。如果我像这样运行terraform,一切都会顺利:

terraform apply -var="majorVersion=v1"
但是,如果我再次使用

terraform apply -var="majorVersion=v2"
我希望terraform不要使用v1的资源!相反,terraform想要拆除v1!!我如何才能完成一组参数化配置,而不必为每个版本重新编写整个shebang?这似乎很乏味,而且离题

我是你的朋友。您可以使用工作区在“设置”之间切换,而无需触摸脚本。这些“设置”可以是版本、环境等等

为了满足您的特定需求,您可以在variable.tf中包含此项

variable "majorVersion" {
  type = "map"

  default = {
    v1 = "v1"
    v2 = "v2"
  }
}


module "media-assets" {
  majorVersion   = "${var.majorVersion[terraform.workspace]}"
}
在运行apply命令之前,请选择正确的工作空间

terraform workspace select v1

尽管如此,您可能会看到,您需要在运行时添加到majorVersion映射。为此,我建议不要使用terraform脚本进行版本控制。

从较高的角度来看,您在这里所做的是将基础设施从一个版本升级到下一个迭代版本。大多数软件都是为了在升级过程中用新版本替换旧版本而编写的。从架构的角度来看,你想在这里完成什么?嗨,马特。本质上,我们需要能够运行多个版本的API,为客户端提供一个清晰的过渡期来进行更新。但是,我希望避免对RESTAPI版本控制问题进行基本讨论:这是一个很好的技巧,不幸的是,我不能这么简单地使用它,因为我已经需要根据另一个标准在工作区中划分项目。也许可以改写以适应。我接受这个答案。谢谢