应用程序网关 request_routing_rules 不存在

Application gateway request_routing_rules does not exist

我正在尝试部署 Azure 应用程序网关。我设置配置如下:

resource "azurerm_application_gateway" "demo-app-gateway" {
  location = var.location
  resource_group_name = azurerm_resource_group.rg-hri-testing-env.name
  name = "demo-app-gateway"

  autoscale_configuration {
    max_capacity = 10
    min_capacity = 2
  }

  frontend_port {
    name = "port_443"
    port = 443
  }

  sku {
    name = "Standard_v2"
    tier = "Standard_v2"
  }

  frontend_ip_configuration {
    name                          = "appGwPublicFrontendIp"
    public_ip_address_id          = azurerm_public_ip.demo-app-gateway-public-ip.id
    private_ip_address_allocation = "Dynamic"
  }

  backend_http_settings {
    cookie_based_affinity               = "Disabled"
    name                                = "demo-http-settings"
    port                                = 443
    protocol                            = "Https"
    host_name                           = "apim.test.com"
    pick_host_name_from_backend_address = false
    path                                = "/external/"
    request_timeout                     = 20
    probe_name                          = "demo-apim-probe"
    trusted_root_certificate_names      = ["demo-trusted-root-ca-certificate"]
  }

  probe {
    interval                                  = 30
    name                                      = "demo-apim-probe"
    path                                      = "/status-0123456789abcdef"
    protocol                                  = "Https"
    timeout                                   = 30
    unhealthy_threshold                       = 3
    pick_host_name_from_backend_http_settings = true
    match {
      body = ""
      status_code = [
        "200-399"
      ]
    }
  }

  gateway_ip_configuration {
    name      = "appGatewayIpConfig"
    subnet_id = azurerm_subnet.GatewaSubnet.id
  }

  backend_address_pool {
    name      = "demo-backend-pool"
  }

  http_listener {
    frontend_ip_configuration_name = "appGwPublicFrontendIp"
    frontend_port_name             = "port_443"
    name                           = "demo-app-gateway-listener"
    protocol                       = "Https"
    require_sni                    = false
    ssl_certificate_name           = "demo-app-gateway-certificate"
  }

  ssl_certificate {
    data     = filebase64(var.ssl_certificate_path)
    name     = "demo-app-gateway-certificate"
    password = var.ssl_certificate_password
  }

  trusted_root_certificate {
    data = filebase64(var.ssl_certificate_path)
    name = "demo-trusted-root-ca-certificate"
  }

  request_routing_rule {
    http_listener_name         = "demo-app-gateway-listener"
    name                       = "demo-rule"
    rule_type                  = "Basic"
    backend_address_pool_name  = "demo-backend-pool"
    backend_http_settings_name = "demo-http-setting"
    
  }
}

但是当我 运行 terraform apply 我得到这个错误。

Error: creating/updating Application Gateway: (Name "demo-app-gateway" / Resource Group "rg-hri-testing-apim"): network.ApplicationGatewaysClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: Code="InvalidResourceReference" Message="Resource /subscriptions/my-sub/resourceGroups/rg-hri-testing-apim/providers/Microsoft.Network/applicationGateways/demo-app-gateway/backendHttpSettingsCollection/demo-http-setting referenced by resource /subscriptions/mysub/resourceGroups/rg-hri-testing-apim/providers/Microsoft.Network/applicationGateways/demo-app-gateway/requestRoutingRules/demo-rule was not found. Please make sure that the referenced resource exists, and that both resources are in the same region." Details=[]

  on app-gateway-main.tf line 1, in resource "azurerm_application_gateway" "demo-app-gateway":
   1: resource "azurerm_application_gateway" "demo-app-gateway" {

导致错误的资源是request_routing_rule没有找到,但让我困惑的是在创建它之前正在寻找它?

任何人都可以帮助我理解我在这里做错了什么吗?

如果您需要更多信息,请告诉我。

非常感谢

请检查请求路由规则块引用的后端 HTTP 设置名称。您必须在 request_routing_rule 中将其更改为 demo-http-settings 才能解决错误。


问题:

您正在使用以下作为后端 http 设置:

backend_http_settings {
    cookie_based_affinity               = "Disabled"
    name                                = "demo-http-settings"
    port                                = 443
    protocol                            = "Https"
    host_name                           = "apim.test.com"
    pick_host_name_from_backend_address = false
    path                                = "/external/"
    request_timeout                     = 20
    probe_name                          = "demo-apim-probe"
    trusted_root_certificate_names      = ["demo-trusted-root-ca-certificate"]
  }

但是在您使用的请求路由规则中引用它时:

request_routing_rule {
    http_listener_name         = "demo-app-gateway-listener"
    name                       = "demo-rule"
    rule_type                  = "Basic"
    backend_address_pool_name  = "demo-backend-pool"
    backend_http_settings_name = "demo-http-setting"

正如您在 request_routing_rule 中给 backend_http_setting_name = demo-http-settings 的名字和 demo-http-setting 一样。它会出错,因为它找不到后端 http 设置。