Terraform 如何使用证书创建hcloud负载平衡器服务

Terraform 如何使用证书创建hcloud负载平衡器服务,terraform,hcloud,Terraform,Hcloud,我正在尝试创建一个hcloud(hetzner云)负载平衡器,并通过terraform向其添加https服务。 由于某些原因,我无法将证书附加到负载平衡器服务,出现以下错误: Error: Incorrect attribute value type on hcloud.tf line 76, in resource "hcloud_load_balancer_service" "web_lb_service": 76: certific

我正在尝试创建一个hcloud(hetzner云)负载平衡器,并通过terraform向其添加https服务。 由于某些原因,我无法将证书附加到负载平衡器服务,出现以下错误:

Error: Incorrect attribute value type

  on hcloud.tf line 76, in resource "hcloud_load_balancer_service" "web_lb_service":
  76:     certificates     = data.hcloud_certificate.lb_cert.id

Inappropriate value for attribute "certificates": list of number required.
用于负载平衡器服务的terraform配置如下所示:

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         = "https"
  listen_port      = var.https_port
  destination_port = var.https_port
  health_check {
    protocol = var.https_protocol
    port     = var.https_port
    interval = "10"
    timeout  = "10"
    http {
      path         = "/"
      status_codes = ["2??", "3??"]
    }
   }
  http {
    certificates     = data.hcloud_certificate.lb_cert.id
 }
}

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"
}
有什么想法吗`

谢谢


br

您需要将
证书作为列表传递,而不是作为单个参数传递。

证书-(可选,list[int])负载平衡器拥有的证书的ID列表

所以这个部分应该是这样的

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 = var.https_protocol
    port     = var.https_port
    interval = "10"
    timeout  = "10"
    http {
      path         = "/"
      status_codes = ["2??", "3??"]
    }
   }
  http {
    certificates     = [data.hcloud_certificate.lb_cert.id]
 }
}

您需要将
证书作为列表传递,而不是作为单个参数传递。

证书-(可选,list[int])负载平衡器拥有的证书的ID列表

所以这个部分应该是这样的

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 = var.https_protocol
    port     = var.https_port
    interval = "10"
    timeout  = "10"
    http {
      path         = "/"
      status_codes = ["2??", "3??"]
    }
   }
  http {
    certificates     = [data.hcloud_certificate.lb_cert.id]
 }
}

您好,wisp,您是正确的,这是所需的语法。谢谢你的帮助!您好,wisp,您是正确的,这是所需的语法。谢谢你的帮助!