在已使用计数后在 Terraform 中创建条件资源

Create conditional resource in terraform after count is already used

我正在为 services 字符串变量的给定值中的每个服务创建一个 route53 健康检查。

当我传递服务变量的值时,我的 tfvars 文件如下所示

services = "servicea serviceb serviced"

如果 var.env == prod 我只需要进行这些健康检查。

有一种久经考验的方法可以使用,那就是使用 count = var.env == prod ? 1:0 但由于我已经在使用计数来计算和遍历服务字符串,所以我无法使用 count再次在同一资源块中,因为如果我尝试这样做,Terraform 0.12 会给我以下错误消息。

在同一资源块中使用多个计数时出错

Error: Attribute redefined

  on <stdin> line 514:   (source code not available)

The argument "count" was already set at <stdin>:513,2-7. Each argument may be set only once.

Terraform 配置


variable "services" {
  default = ""
}


resource aws_route53_health_check "app_healthcheck" {
  count             = length(split(",", replace(var.services, "/\s/", ",")))
  fqdn              = "${var.super_cluster}-${var.region}.domainname.com"
  port              = 443
  type              = "HTTPS"
  resource_path     = "/canSchedule?appName=${element(split(",", replace(var.services, "/\s/", ",")), count.index)}"
  request_interval  = "10"
  failure_threshold = "1"
  enable_sni        = true
  tags              = local.common_tags


}

如何在资源块中使用 count 后创建条件资源?

要解决这个问题,您可以引入一个新的本地来检查环境变量的值:

locals {
  is_prod = var.env == "prod" ? true : false
}

然后在您的资源块中,在条件表达式中使用该局部变量,如下所示:

count = local.is_prod ? length(split(",", replace(var.services, "/\s/", ","))) : 0