我可以基于变量包括或排除模块吗?

时间:2019-06-28 13:56:19

标签: terraform terraform-provider-aws

我有以下用例:

  • 一个应用程序部署了各种版本。
  • 在这些版本中,某些资源保持不变,但有所变化
  • 我需要能够分解各个版本

让我们看一个示例配置:

variable "majorVersion" {
  type        = "string"
}

module "media-assets" {
  majorVersion   = "${var.majorVersion}"
  input_bucket   = "uploads-${var.majorVersion}"
  source         = "./modules/media-assets"
}

现在假设我要部署另一个版本,这会在配置中添加另一个模块:

module "sns" {
  url    = "https://my-api-${var.majorVersion}.xyz.com/sns"
  source = "./modules/sns"
}

由于v1不需要此资源,因此不希望为v1创建它。添加后半部分而无需使用Terraform创建sns资源后,我是否仍可以为majorVersion = v1运行此脚本?有没有一种方法可以基于变量控制包含哪些模块和不包含哪些模块?

1 个答案:

答案 0 :(得分:0)

我不知道版本12是否更好,但是您仍然可以使用旧的方法来创建资源,具体取决于变量,如下所示:

module "sns" {
  count  = ${var.create}
  url    = "https://my-api-${var.majorVersion}.xyz.com/sns"
  source = "./modules/sns"
}

如果create等于0,将不会创建资源。