You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform Hetzner防火墙apply_to使用变量报错,求解决方案

Hetzner Cloud防火墙Terraform配置:apply_to块变量报错解决

问题原因

hcloud_firewall资源的apply_to块中,server参数要求单个数字类型的服务器ID,但你传入的var.app-f-ids是列表类型,类型不匹配导致报错。而hcloud_firewall_attachment的server_ids参数本身支持列表,所以相同变量在这里可以正常运行。

解决方法

方法1:用dynamic块遍历列表生成apply_to块

通过Terraform的dynamic块遍历服务器ID列表,为每个ID创建独立的apply_to绑定:

resource "hcloud_firewall" "appf" {
  name = "appf"

  dynamic "apply_to" {
    for_each = var.app-f-ids
    content {
      server = apply_to.value
    }
  }

  rule {
    direction = "in"
    protocol  = "tcp"
    port      = "443"
    source_ips = [
      "0.0.0.0/0",
      "::/0"
    ]
  }

  rule {
    direction = "in"
    protocol  = "tcp"
    port      = "6379"
    source_ips = formatlist("%s/32", concat(var.app-ips, var.app-f-ips))
  }
}

方法2:保留hcloud_firewall_attachment资源

直接移除hcloud_firewall中的apply_to块,继续使用hcloud_firewall_attachment批量绑定服务器,这种方式更简洁,适合多服务器场景:

resource "hcloud_firewall" "appf" {
  name = "appf"

  rule {
    direction = "in"
    protocol  = "tcp"
    port      = "443"
    source_ips = [
      "0.0.0.0/0",
      "::/0"
    ]
  }

  rule {
    direction = "in"
    protocol  = "tcp"
    port      = "6379"
    source_ips = formatlist("%s/32", concat(var.app-ips, var.app-f-ips))
  }
}

resource "hcloud_firewall_attachment" "appf_attach" {
    firewall_id = hcloud_firewall.appf.id
    server_ids  = var.app-f-ids
}

注意:两种方法选其一即可,不要同时使用,避免重复绑定导致冲突。

内容的提问来源于stack exchange,提问作者Oleg Shalnov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:37:29