Home > other >  Multiple frontend_enpoint in Azure Front Door with Terraform
Multiple frontend_enpoint in Azure Front Door with Terraform

Time:05-11

I am trying to build an Azure FrontDoor with Terraform but I am having an issue when I am trying to configure two Front Ends and then bind one of them to a custom HTTPS configuration. But I am getting the following error The argument "frontend_endpoint_id" is required, but no definition was found.

I just can't work out how you would specify two Front Door Endpoints and then reference one of them in a custom https config. Code below.

resource "azurerm_frontdoor" "jccroutingrule" {
  depends_on = [
    cloudflare_record.create_frontdoor_CNAME,
    azurerm_key_vault.jctestingenv_keyvault,
    azurerm_key_vault_certificate.jcimportedcert
  ]
  name                = "testingfrontdoor"
  resource_group_name = azurerm_resource_group.Terraform.name
  #enforce_backend_pools_certificate_name_check = false
  routing_rule {
    name               = "jccroutingrule"
    accepted_protocols = ["Http", "Https"]
    patterns_to_match  = ["/*"]
    frontend_endpoints = ["jccfrontendendpoint","frontendendpoint2"]
    forwarding_configuration {
      forwarding_protocol = "MatchRequest"
      backend_pool_name   = "jccbackendpool"
    }
  }

  backend_pool_load_balancing {
    name                        = "jccloadbalancesettings"
    sample_size                 = 255
    successful_samples_required = 1
  }

  backend_pool_health_probe {
    name                = "jcchealthprobesettings"
    path                = "/health/probe"
    protocol            = "Https"
    interval_in_seconds = 240
}


  backend_pool {
    name = "jccbackendpool"
    backend {
      host_header = format("portal-staging-westeurope.jason.website")
      address     = format("portal-staging-westeurope.jason.website")
      http_port   = 80
      https_port  = 443
      weight      = 50
      priority    = 1
      enabled     = true
    }

    load_balancing_name = "jccloadbalancesettings"
    health_probe_name   = "jcchealthprobesettings"
  }

  frontend_endpoint {
    name      = "jccfrontendendpoint"
    host_name = format("testingfrontdoor.azurefd.net")
  }

  frontend_endpoint {
    name      = "frontendendpoint2"
    host_name = format("portal-staging.jason.website")
  }

}

resource "azurerm_frontdoor_custom_https_configuration" "portal_staging_https_config" {
  frontend_endpoint_id              = azurerm_frontdoor.jccroutingrule.frontend_endpoint[1].id
  custom_https_provisioning_enabled = true

  custom_https_configuration {
    certificate_source                      = "AzureKeyVault"
    azure_key_vault_certificate_secret_name = "imported-cert"
    azure_key_vault_certificate_vault_id    = azurerm_key_vault_certificate.jcimportedcert.id
  }
}

CodePudding user response:

from terraform docs:

resource "azurerm_frontdoor_custom_https_configuration" "portal_staging_https_config" {
  frontend_endpoint_id              = azurerm_frontdoor.jccroutingrule.frontend_endpoint["frontendendpoint2"]
  custom_https_provisioning_enabled = true

  custom_https_configuration {
    certificate_source                      = "AzureKeyVault"
    azure_key_vault_certificate_secret_name = "imported-cert"
    azure_key_vault_certificate_vault_id    = azurerm_key_vault_certificate.jcimportedcert.id
  }
}

CodePudding user response:

So from documentation of azurerm_frontdoor here, I see they export below field which I think is of your interest..

frontend_endpoints - A map/dictionary of Frontend Endpoint Names (key) to the Frontend Endpoint ID (value)

frontend_endpoints is a map object containing endpoint name as key & the id as the value. So, you could make use of lookup function to extract value from the key.

In the end your azurerm_frontdoor_custom_https_configuration looks like below::

resource "azurerm_frontdoor_custom_https_configuration" "portal_staging_https_config" {
  frontend_endpoint_id              = lookup(azurerm_frontdoor.jccroutingrule.frontend_endpoints, "frontendendpoint2", "what?")
  custom_https_provisioning_enabled = true

  custom_https_configuration {
    certificate_source                      = "AzureKeyVault"
    azure_key_vault_certificate_secret_name = "imported-cert"
    azure_key_vault_certificate_vault_id    = azurerm_key_vault_certificate.jcimportedcert.id
  }
}

In case, if you change your mind to use jccfrontendendpoint endpoint, feel free to put that key into lookup function :-)

  • Related