Terraform 12 块变量

Terraform 12 block variable

现在我正在迁移到 Terraform 12。这里的主要功能之一是更严格的 HCL2,我喜欢它。

例如,如果我有地图列表:

  elb_listeners = [
     {
       instance_port     = 80
       instance_protocol = "http"
       lb_port           = 80
       lb_protocol       = "http"
     },
     {
       instance_port      = 443
       instance_protocol  = "http"
       lb_port            = 443
       lb_protocol        = "https"
       ssl_certificate_id = ARN certificate
     }

我可以像这样用动态块旋转它:

  dynamic "listener" {
    for_each = [for listener in var.elb_listeners : {
      instance_port     = listener.instance_port
      instance_protocol = listener.instance_protocol
      lb_port           = listener.lb_port
      lb_protocol       = listener.lb_protocol
    }]

    content {
      instance_port     = listener.value.instance_port
      instance_protocol = listener.value.instance_protocol
      lb_port           = listener.value.lb_port
      lb_protocol       = listener.value.lb_protocol
    }
  }

但是假设我只有一个方块而且只有一个可能的方块:

  health_check {
    healthy_threshold   = 2
    unhealthy_threshold = 2
    timeout             = 3
    target              = "HTTP:8000/"
    interval            = 30
  }

我不想声明所有这些变量,我也想在设置中将其描述为一次块。是的,在这里我也可以只对一个元素使用 dynamic_block 但它在这里看起来有点矫枉过正。有可能这样做吗?喜欢

  health_check {
    var.health_check
  }

什么的。

我知道你要去哪里。但是我认为目前不可能在资源中“扩展”地图。您可以定义一个具有默认值的地图变量,尽管这是更多的代码行。

variable health_check {
    type = "map"
    default = {
        healthy_threshold   = 2
        unhealthy_threshold = 2
        timeout             = 3
        target              = "HTTP:8000/"
        interval            = 30
    }
}

health_check {
    healthy_threshold   = var.health_check.healthy_threshold
    unhealthy_threshold = var.health_check.unhealthy_threshold
    timeout             = var.health_check.timeout
    target              = var.health_check.target
    interval            = var.health_check.interval
}

再想想,我不明白你为什么需要它。它使您的代码结构的可读性和明确性降低。因此,选项是使用或不使用默认值显式定义它,或者当您有多个资源要从 list/map.

创建时使用 for_each