已使用计数后在Terraform中创建条件资源 [英] Create conditional resource in terraform after count is already used

查看:11
本文介绍了已使用计数后在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆