我想为我的基础设施提供terraform,并拥有一些共享的基础设施。例如,要有1个共享应用程序网关和多个特定于应用程序的Web应用程序位于其后。
是否可以为它提供单独的terraform项目?
在文档中找不到您该怎么办。在这个application_gateway示例中,一口气提供了所有内容,然后在network_interface_application_gateway_backend_address_pool_association中,您可以在app gw和网络接口(而不是webapp)之间建立关联。
编辑
为了进一步扩展我想实现的目标-应用程序网关将是整个非产品环境(因此称为“共享”)的一个应用程序网关,可以节省成本。在其背后,我想为多个环境配置多个应用程序,例如“ Accounts.DEV”,“ Accounts.UAT”,“ Calculator.Dev”等。希望这使我的意图更加清楚。
现在,我正在尝试在共享项目中创建空的应用程序网关(具有默认池,前端配置和规则)。然后,在每次部署应用程序后运行一些额外的az cli
逻辑(documentation)。
答案 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