【问题标题】:Is it possible to provision backend address pool separately from application gateway是否可以与应用程序网关分开配置后端地址池
【发布时间】:2021-03-03 17:25:12
【问题描述】:

我想使用 terraform 配置我的基础架构并拥有一些共享的基础架构。例如,拥有 1 个共享的应用程序网关和多个应用程序特定的 Web 应用程序。

是否可以通过单独的 terraform 项目进行配置?

  1. 用于共享基础架构的 terraform 项目 - 创建一个空的/默认应用程序网关。
  2. 其他项目会创建一个 web 应用程序和一些额外的配置为共享应用程序 gw - backend_address_pool、probe、backend_http_settings 等。

在文档中找不到如何做到这一点。有这个 - application_gateway 示例,其中所有内容都在 1 go 中提供,然后这个 - network_interface_application_gateway_backend_address_pool_association 可以在应用程序 gw 和网络接口之间建立关联,但不是 web 应用程序。

编辑

稍微扩展一下我想要实现的目标 - 应用程序网关将是整个非产品环境的一个应用程序网关(因此是“共享的”),它可以节省成本。后面我想为多个环境配置多个应用程序,例如“Accounts.DEV”、“Accounts.UAT”、“Calculator.Dev”等。希望这能让我的意图更清楚一点。

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

【问题讨论】:

    标签: azure terraform azure-application-gateway


    【解决方案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}"
      } 
    

    【讨论】:

    • 所以您的建议是先配置 webapp,然后再配置应用网关?谢谢,有趣的想法!我最初的想法有点不同(因为共享部分将具有 webapp 所需的其他资源,例如 vnet 等) - 配置应用程序 gw,然后是 webapp,然后运行几个 ps1 脚本将应用程序 gw 设置为需要
    • 不,我的意思是您可以选择同时配置应用程序网关和 Web 应用程序。我尝试为应用程序网关和 Web 应用程序的每个项目使用两个单独的 .tf 文件。
    • 嘿南希,我不认为你的建议会解决我的问题。我需要与 webapp 分开配置 app gw。只是不同的 .tf 文件不会这样做。我的计划是为非产品环境提供 1 个应用程序 gw,并在其后提供多个单独的应用程序,因此将它们部署在一起对我来说太棒了
    • 我的意思是您可以将应用程序 gw 与 Web 应用程序分开配置,也可以将它们一起配置。在我的示例中,我认为它们不会相互影响。如果您先配置应用网关,您可以稍后将 Web 应用 fqdns 与后端池关联。
    • 是的,这就是我现在正在做的 - 稍后将它们关联起来,但使用 az cli。宁愿用 terraform 来做,所以所有配置都在一个地方完成。再一次,不能一起提供它们,因为它们属于不同的管道。无论如何,非常感谢您的帮助!
    【解决方案2】:

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

    来源:https://github.com/terraform-providers/terraform-provider-azurerm/issues/727

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多