Terraform私有Azure负载均衡器问题

时间:2019-07-17 01:56:58

标签: azure terraform infrastructure-as-a-code

我正在尝试使用私有负载均衡器部署基础架构:

.....
resource "azurerm_lb" "private" {
name                = "${var.name}-${var.live}-private-lb"
location            = data.azurerm_resource_group.rg.location
resource_group_name = data.azurerm_resource_group.rg.name
sku                 = var.sku

frontend_ip_configuration {
  name                          = "frontend"
  subnet_id                     = var.subnet_id != "" ? var.subnet_id : null
  private_ip_address            = (var.subnet_id != "" && var.private_ip != "") ? var.private_ip : null
  private_ip_address_allocation = var.subnet_id != "" ? (var.subnet_id == "" ? "Static" : "Dynamic") : null
 }
}
......

但是我收到了错误消息:

..../frontendIPConfigurations/frontend must reference either a Subnet, Public IP Address or Public IP Prefix." Details=[]

为什么以及如何解决这个问题?我不知道缺少哪个配置。 谢谢

1 个答案:

答案 0 :(得分:2)

内部负载均衡器不同于公共负载均衡器,它已分配给子网,并且没有公共IP地址。如显示的错误所示,前端应引用 子网,公用IP地址或公用IP前缀,并且引用时该子网应已存在。您可以使用data source subnet访问有关现有资源的信息,也可以为负载均衡器创建子网和VNet。

例如,以下内容对我有用。

data "azurerm_resource_group" "rg" {
  name     = "mytestrg" 
}


variable "sku" {
  default = "basic"
}

variable "private_ip" {
  default = "172.19.0.100"
}

variable "env" {
  default="Static"
}

data "azurerm_subnet" "test" {
  name                 = "default"
  virtual_network_name = "vnet1"
  resource_group_name  = "${data.azurerm_resource_group.rg.name}"
}

resource "azurerm_lb" "test" {
  name                = "mytestlb"
  location            = "${data.azurerm_resource_group.rg.location}"
  resource_group_name = "${data.azurerm_resource_group.rg.name}"
  sku                 = "${var.sku}"

  frontend_ip_configuration {
    name                          = "frontend"
    subnet_id                     = "${data.azurerm_subnet.test.id}"
    private_ip_address            = "${var.env=="Static"? var.private_ip: null}"
    private_ip_address_allocation = "${var.env=="Static"? "Static": "Dynamic"}"
  }
}
相关问题