排除 Terraform 模块中的资源

Excluding resource in Terraform module

我有一个我构建的 Terraform 模块,它将模块的两个实例部署到一个单独的区域。在这个模块中有一个密钥库。我只希望密钥保管库出现在两个区域之一中。

这是我的模块:

resource "azurerm_resource_group" "test" {
  name     = "test"
  location = "${var.location}"
}

resource "azurerm_key_vault" "keyvault" {
  name = "keyvault"
}

这是我的main.tf

module "test_uswest2" {
  source = "modules/test"

  location = "westus2"
  environment = "${var.environment}"
}

module "test_westcentralus" {
  source = "modules/test"

  location = "centralus"
  environment = "${var.environment}"
}

我想排除第二个 region/location 中的密钥保管库。

Terraform 似乎不支持 if/else 所以我不确定我的选择是什么。

您可以通过设置 count meta parameter to 0 and using the conditional ternary operator 来有条件地创建资源。

所以你会得到这样的东西:

variable "create_key_vault" {
  default = true
}

resource "azurerm_key_vault" "keyvault" {
  count = "${var.create_key_vault ? 0 : 1}"
  name  = "keyvault"
}

然后调用您的模块,将 create_key_vault 设置为 false 以不创建它:

module "test_westcentralus" {
  source = "modules/test"

  location         = "centralus"
  environment      = "${var.environment}"
  create_key_vault = false
}

ydaetskcoR 的回答很好,您也可以使用默认变量值以相反的方式进行,如果这更适合用例。

count 参数设置为:

count = "${var.create_key_vault}"

在模块的源代码中使用错误的默认值定义一个变量:

variable "create_key_vault" {
  default = false
}

然后定义哪些模块需要覆盖它并将其设置为 true:

module "test_westcentralus" {
  source = "modules/test"

  location         = "centralus"
  environment      = "${var.environment}"
  create_key_vault = true
}