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
相关产品推荐
相关产品推荐

