How to create an hetzner hcloud load balancer service with certificates

Hi there,

I’m trying to create an hcloud loadbalancer and add an https service to it but for some reason it’s not working as expected…

Error: Incorrect attribute value type

on hcloud.tf line 65, in resource “hcloud_load_balancer_service” “web_lb_service”:
65: http { certificates = data.hcloud_certificate.lb_cert.id }

Inappropriate value for attribute “certificates”: list of number required.

The configuration used for the load balancer is the following.

resource "hcloud_certificate" "domain_cert" {
    name = var.domain

    private_key = tls_private_key.cert_private_key.private_key_pem
    certificate = acme_certificate.certificate.certificate_pem

    labels = {
        type = "cert"
    }
}

resource "hcloud_load_balancer" "web_lb" {
  name               = "web_lb"
  load_balancer_type = "lb11"
  location           = var.location
  labels = {
    type = "web"
  }

  dynamic "target" {
    for_each = hcloud_server.web
    content {
      type      = "server"
      server_id = target.value["id"]
    }
  }

  algorithm {
    type = "round_robin"
  }
}

data "hcloud_certificate" "lb_cert" {
    id = hcloud_certificate.domain_cert.id
}

resource "hcloud_load_balancer_service" "web_lb_service" {
  load_balancer_id = hcloud_load_balancer.web_lb.id
  protocol         = var.https_protocol
  listen_port      = var.https_port
  destination_port = var.https_port
  http { certificates = data.hcloud_certificate.lb_cert.id }
  health_check {
    protocol = var.https_protocol
    port     = var.https_port
    interval = "10"
    timeout  = "10"
    http {
      path         = "/"
      status_codes = ["2??", "3??"]
    }
  }
}

resource "hcloud_load_balancer_network" "web_network" {
  load_balancer_id        = hcloud_load_balancer.web_lb.id
  subnet_id               = hcloud_network_subnet.hc_private_subnet.id
  enable_public_interface = "true"
}

Found the solution myself.

This is a complete config.

> resource "hcloud_load_balancer_service" "web_lb_service" {
>   load_balancer_id = hcloud_load_balancer.web_lb.id
>   protocol         = "https"
>   listen_port      = var.https_port
>   destination_port = var.https_port
>   health_check {
>     protocol = "http"
>     port     = "443"
>     interval = "10"
>     timeout  = "10"
>     http {
>       path         = "/"
>       status_codes = ["2??", "3??"]
>     }
>    }
>   http {
>     certificates   = [data.hcloud_certificate.lb_cert.id]
>  }
> }