是否可以与应用程序网关分开设置后端地址池

时间:2019-12-05 04:33:35

标签: azure terraform azure-application-gateway

我想为我的基础设施提供terraform,并拥有一些共享的基础设施。例如,要有1个共享应用程序网关和多个特定于应用程序的Web应用程序位于其后。

是否可以为它提供单独的terraform项目?

    用于共享基础结构的
  1. terraform项目-创建一个空的/默认的应用程序网关。
  2. 其他将创建Web应用程序以及该共享应用程序gw的一些额外配置的项目-backend_address_pool,探针,backend_http_settings等。

在文档中找不到您该怎么办。在这个application_gateway示例中,一口气提供了所有内容,然后在network_interface_application_gateway_backend_address_pool_association中,您可以在app gw和网络接口(而不是webapp)之间建立关联。

编辑

为了进一步扩展我想实现的目标-应用程序网关将是整个非产品环境(因此称为“共享”)的一个应用程序网关,可以节省成本。在其背后,我想为多个环境配置多个应用程序,例如“ Accounts.DEV”,“ Accounts.UAT”,“ Calculator.Dev”等。希望这使我的意图更加清楚。

现在,我正在尝试在共享项目中创建空的应用程序网关(具有默认池,前端配置和规则)。然后,在每次部署应用程序后运行一些额外的az cli逻辑(documentation)。

2 个答案:

答案 0 :(得分:1)

可以分别设置应用程序网关和Web应用程序。

默认情况下,此application_gateway示例创建一个空的后端池,其中没有任何目标,这些目标具有一个默认的HTTP设置,一个80端口的侦听器以及此后端池的基本规则。当您想要将后端Web应用程序关联到此应用程序网关之后时,您需要将Web应用程序的default_site_hostname定位到后端池,并修改一些特定的配置以匹配您的后端Web应用程序。

例如,

azurerm_app_service项目中,您可以在供应时为应用程序服务添加default_site_hostname的值,或使用data source访问现有的应用程序服务。

output "default_site_hostname" {
  value = "${azurerm_app_service.test.default_site_hostname}"
}

azurerm_application_gateway项目中,您可以将default_site_hostname的值添加到fqdns,然后将后端池与其关联。

# since these variables are re-used - a locals block makes this more maintainable
locals {
  backend_address_pool_name      = "${azurerm_virtual_network.test.name}-beap"
  frontend_port_name             = "${azurerm_virtual_network.test.name}-feport"
  frontend_ip_configuration_name = "${azurerm_virtual_network.test.name}-feip"
  http_setting_name              = "${azurerm_virtual_network.test.name}-be-htst"
  listener_name                  = "${azurerm_virtual_network.test.name}-httplstn"
  request_routing_rule_name      = "${azurerm_virtual_network.test.name}-rqrt"
  redirect_configuration_name    = "${azurerm_virtual_network.test.name}-rdrcfg"
  fqdns                          = ["${azurerm_app_service.test.default_site_hostname}","${data.azurerm_app_service.example.default_site_hostname}"]
...

 backend_address_pool {
    name = "${local.backend_address_pool_name}"
    fqdns = "${local.fqdns}"
  } 

答案 1 :(得分:1)

目前这在 terraform 中是不可能的,因为 Azure API 不允许逐步创建应用程序网关。如果这对您来说是个问题并希望改变它,请投票支持 spread syntax ...this 功能请求。

来源:this