Terraform:如何使用条件逻辑动态创建资源

Terraform之如何使用条件逻辑动态创建资源

背景

我们(可能)知道,Terraform不支持if语句。
幸运的是,我们可以通过使用名为count的特定参数来实现相同的结果。

我们可以这样考虑:可以将count设置为1,即获得该资源的一个副本。

但是,将相同的count参数设置为0将不会创建任何资源。

所以,正如前面提到的,你根本不需要if/else语句,terrform使用以下格式的条件表达式:

<CONDITION> ? <TRUE_VAL> <FALSE_VAL>

Terraform所做的只是在CONDITION中计算布尔逻辑,基于此,如果值为true,它将返回TRUE_VAL; 否则,如果结果为false,它将返回FALSE_VAL

案例

例如,我们将在terrraform中迁移我们现有的AWS基础设施(之前基于Ansible&Boto3部署)。

这个示例是关于ELB创建的,其中包含一个target group和一个listener
取自我目前正在进行的一个迁移项目,它实际上将展示我刚才解释的内容:

resource "aws_lb_target_group" "tg" {
  count = var.target_group_addition ? 1 : 0
  name                 = "tg-${var.name}"
  port                 = var.tg_port
  protocol             = var.tg_protocol
  vpc_id               = var.vpc_id
  deregistration_delay = var.tg_deregistration_delay
  health_check {
    interval            = var.tg_healthcheck_interval
    path                = var.tg_healthcheck_path
    port                = "traffic-port"
    protocol            = var.tg_protocol
    timeout             = 5
    healthy_threshold   = 2
    unhealthy_threshold = 2
    matcher             = var.tg_healthcheck_success_code
  }
}

正如你所看到的,只有当分配给var.target_group_add的布尔值设置为true(1)时,才会创建资源aws_lb_target_group

结论

这是在Terraform中处理if语句的一种非常简单的方法,并展示了如何在需要时使用terrraform中的count属性来进行动态资源配置。

REF:

https://medium.com/swlh/terraform-how-to-use-conditionals-for-dynamic-resources-creation-6a191e041857

关注公众号:“云原生SRE”

猜你喜欢

转载自blog.csdn.net/dongshi_89757/article/details/127996581