已使用计数后在Terraform中创建条件资源 [英] Create conditional resource in terraform after count is already used
本文介绍了已使用计数后在Terraform中创建条件资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在给定值services
字符串变量中为每个服务创建route53运行状况检查。
传递服务变量的值时,我的tfvars
文件如下所示
services = "servicea serviceb serviced"
仅当var.env == prod
时,我才需要进行这些运行状况检查。
有一种经过试验和测试的方法可以使用,那就是使用count = var.env == prod ? 1:0
,但因为我已经使用count来计算和迭代服务字符串,所以我不能在同一资源块中再次使用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.
平台配置
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
}
然后在资源块中使用条件表达式中的LOCAL:
count = local.is_prod ? length(split(",", replace(var.services, "/\s/", ","))) : 0
这篇关于已使用计数后在Terraform中创建条件资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文