Шлюз приложений request_routing_rules не существует

#azure #terraform #azure-application-gateway

Вопрос:

Я пытаюсь развернуть шлюз приложений 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 , не найден, но меня смущает то, что он ищет его перед тем, как создать?

Кто-нибудь может, пожалуйста, помочь мне понять, что я здесь делаю не так?

Пожалуйста, если вам нужна дополнительная информация, просто дайте мне знать.

Большое спасибо

Комментарии:

1. Привет @NaydenVan, есть какие-нибудь новости ? Решило ли приведенное ниже решение вашу проблему?

2. Здравствуйте, большое вам спасибо за ваш ответ. К сожалению, у меня не было достаточно времени, чтобы проверить это, но я сделаю это сегодня вечером или в течение следующих нескольких дней. Читая ваш комментарий, я почти уверен, что это сработает. Еще раз спасибо, и я скоро опубликую результат

Ответ №1:

Пожалуйста, проверьте имя внутренних настроек HTTP, на которое ссылается блок правил маршрутизации запросов. Вы должны изменить его на demo-http-settings in request_routing_rule, чтобы устранить ошибку.


Вопрос:

Вы используете нижеприведенный параметр 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"
 

Как вы дали имя backend_http_setting_name = demo-http-settings и даете его, как demo-http-setting в request_routing_rule . Это приведет к ошибке, так как он не может найти серверную настройку http.