skip to Main Content

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.

https://learn.microsoft.com/en-us/azure/azure-functions/functions-recover-storage-account

Everything was working fine when I was using the Premium (P1v2) and the error begins when I moved to Elastic (EP1).

I am deploying it using Terraform.

Here is a TF code example we are using to deploy

locals {
    app_settings = {
    FUNCTIONS_WORKER_RUNTIME                                            = "python"
    FUNCTION_APP_EDIT_MODE                                              = "readonly"
    WEBSITE_VNET_ROUTE_ALL                                              = "1"
    WEBSITE_CONTENTOVERVNET                                             = "1"

  }
}

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]

}


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

  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,
  ]
}

2

Answers


  1. AFAIk, There is not a one specific reason for Azure function runtime unreachable, Please check the below workaround to solve the above issue,

    We have tried to create a Function app using Elastic premium plan and its working fine at our end,

    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.

    Login or Signup to reply.
  2. 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://learn.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,
      ]
    }
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search