在已使用计数后在 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
我正在为 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