我遇到的问题与负载均衡器前端 IP 有关,因此它可以使用唯一的公共 IP 访问不同可用区中的不同服务器。我在创建公共 IP 时使用计数,但我没有在负载均衡器上使用计数,因为我不想为每个服务器创建一个新的 LB。如果我能以某种方式将公共 IP 保存到一个变量中,那么我可以在动态块内使用 for_each 引用它们,但我找不到这样做的方法。这是我到目前为止的代码,但它不能按原样工作。这个问题可能没有解决方案,真的很臭。顺便说一句,我正在使用下面的 split 函数,因此它返回属性需要的列表。这有点骇人听闻,但确实有效。
resource "azurerm_public_ip" "pip" {
count = "${var.nblinuxvms}"
name = "${var.proj_name}-lbpip${count.index}-${var.region}-${var.app_env}"
location = var.region
resource_group_name = "${azurerm_resource_group.rg.name}"
allocation_method = "Static" #Public IP Standard SKUs require allocation_method to be set to Static
sku = "Standard" #Standard SKU Required for Zones
domain_name_label = "${var.proj_name}${count.index}${split("", "${element(["1", "2", "3"], "${count.index}")}")}"
zones = "${var.avzones}" ? split("", "${element(["1", "2", "3"], "${count.index}")}") : null
}
resource "azurerm_lb" "lb" {
name = "externallb"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku = "standard" #standard SKU needed to support zones
dynamic "frontend_ip_configuration" {
for_each = "${azurerm_public_ip.test.*.ip_address}" #this is the problem line. I need a way to store all the IPs in a variable and then iterate through them for each new frontend ip configuration
content{
name = "primary${count.index}" #This name is also important as this is how I'll connect the nat rule down below
public_ip_address_id = "${azurerm_public_ip.pip.id}"
}
resource "azurerm_lb_nat_rule" "lbnr" {
count = "${var.nblinuxvms}"
resource_group_name = "${azurerm_resource_group.rg.name}"
loadbalancer_id = "${azurerm_lb.lb.id}"
name = "SSHHost${count.index}"
protocol = "Tcp"
frontend_port = "${2200 + count.index}"
backend_port = 22
frontend_ip_configuration_name = "primary${count.index}" #This name needs to match the LB Front End IP Configuartion
}
frontend_ip_configuration_name 需要与负载均衡器名称匹配。带有 for_each 的动态块似乎是特定问题的最佳解决方案,因为它不是资源……但我看不到将公共 ip 保存到我可以引用的任何变量的方法。如果没有解决方案,人们如何解决这个问题?通过为每个 Azure 可用区创建单独的 LB?因为它必须是一个标准,而不是看起来成本高昂的基本 LB。希望我只是错过了一些东西。任何帮助将不胜感激。请注意,我只分享了我的 terraform 项目中的相关代码。如果需要更多代码,请告诉我。(我无法在问题标签中添加动态块,因为我的代表很低。)谢谢,-Sam Kachar