Home > Mobile >  Az Function Elastic Premium - Azure Functions runtime is unreachable
Az Function Elastic Premium - Azure Functions runtime is unreachable

Time:06-10

I have an Azure function that I need to run in an Elastic Premium plan. After deployed I see the following error:

Azure Functions runtime is unreachable

I've tried to solve it following Microsoft documentation, no luck.

Here is some thoughts about my tries :

  • We checked the Storage account is created

  • The Function's subnet already has the service endpoint for the storage account

  • Vnet integration is already enabled in the Function and it (subnet) is already added to the Storage firewall

  • We added the required properties in the Function settings:

    • WEBSITE_CONTENTAZUREFILECONNECTIONSTRING = dynamic created (connection string to the Storage account)
    • WEBSITE_CONTENTOVERVNET = 1
    • WEBSITE_CONTENTSHARE = dynamic created
    • WEBSITE_VNET_ROUTE_ALL = 1

Here is the documentation link.

enter image description here

  • Please make sure that you have configured the correct WEBSITE_CONTENTAZUREFILECONNECTIONSTRING value same as AzureWebJobsStorage then try to STOP/START the function app.

enter image description here

The default pre-warmed instance count is 1, and for most scenarios this value should remain as 1.

For more information please refer this ARTICLE|AZURE LESSONS-AZURE FUNCTION RUNTIME UNREACHABLE.

CodePudding user response:

When you use a Function with Elastic Premium Plan Type that has a VNET Integration, you need to add one more property called vnet_route_all_enabled to enable route outbound from your Azure Function. Also you need to first create a file in your storage account that the name of this file will be the content of this variable WEBSITE_CONTENTSHARE in your Application Settings. Below is my code suggestion:

You can check this doc to be sure: https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-vnet

Below my suggest code:

locals {
    app_settings = {
    FUNCTIONS_WORKER_RUNTIME                                            = "python"
    FUNCTION_APP_EDIT_MODE                                              = "readonly"
    WEBSITE_VNET_ROUTE_ALL                                              = "1"
    WEBSITE_CONTENTOVERVNET                                             = "1"
    WEBSITE_CONTENTSHARE                                                = "file-function"

  }
}

module "az_service_plan_sample" {
  source = "source module"

  serviceplan_name    = "planname"
  resource_group_name = "RG Name" 
  region              = "East US 2" 
  tier                = "ElasticPremium"
  size                = "EP1"
  kind                = "elastic"
  capacity            = 40
  per_site_scaling    = false

  depends_on = [
    module.storage_account
  ]
}


module "storage_account_sample" {
  source                           = "source module"
  resource_group_name              = "RG Name"
  location                         = "East US 2"
  name                             = "saname"
  storage_account_replication_type = "GRS"
  subnet_ids                       = [subnet_ids]

}

resource "azurerm_storage_share" "share_file_ingest_function" {
    name                 = "file-function"
    storage_account_name = module.storage_account_sample.name
  
    depends_on = [
      module.storage_account_sample
    ]
  }


module "sample" {
  source = "source module"

  azure_function_name             = "functionname"
  resource_group_name             = "RG Name"
  storage_account_name            = module.storage_account.storage-account-name
  storage_account_access_key      = module.storage_account.storage-account-primary-key
  region                          = "East US 2"
  subnet_id                       = subnet_ids
  app_service_id                  = module.az_service_plan.service_plan_id
  scope_role_storage_account      = module.storage_account.storage-account-id
  azure_function_version          = "~4"
  app_settings                    = local.app_settings
  key_vault_reference_identity_id = azurerm_user_assigned_identity.az_func.id
  pre_warmed_instance_count       = 2
  vnet_route_all_enabled          = true

  identity_type = "UserAssigned"
  user_assigned_identityies = [{
    id           = azurerm_user_assigned_identity.az_func.id
    principal_id = azurerm_user_assigned_identity.az_func.principal_id
  }]

  depends_on = [
    module.az_service_plan_sample,
    module.storage_account_sample,
    azurerm_user_assigned_identity.az_func,
  ]
}

  • Related