---
cuppy_hub: azure
cuppy_path: reference/functions/hosting-and-host-storage.md
cuppy_section: docs
cuppy_doc: X1F6-XMVA
cuppy_doc_uuid: 08ba1ae4-eaac-4d7a-892e-0d2fac816603
cuppy_permalink: https://cuppy.io/azure/d/X1F6-XMVA
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/azure/docs/reference/functions/hosting-and-host-storage
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: ca762602953b18cb91a8fbd231fbe14ef8e5e62747a65a110740238d1709f4c4
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# Azure Functions hosting plans and host storage

## Which plan

| Plan | Status (October 2026) | Use when |
|---|---|---|
| **Flex Consumption** (`FC1`, tier `FlexConsumption`, Linux) | GA; Microsoft's default for new serverless apps | Event-driven or HTTP work that scales to zero; VNet integration; identity-only storage |
| Elastic Premium (`EP1`–`EP3`) | GA | Always-warm instances, Windows code apps, Linux containers |
| Dedicated (App Service plan) | GA | You already pay for an App Service plan; deployment slots |
| Container Apps | GA | Functions as a container beside other container apps |
| Consumption (`Y1`, **legacy**) | Windows GA. Linux: no new features or language versions; **v3 apps on Linux Consumption stopped after September 30, 2026**; Linux Consumption hosting **retires September 30, 2028** | Existing Windows apps only |

Moving to Flex Consumption is a **new app plus a redeploy**: in-place migration from another plan isn't supported, and you can't migrate a Flex app to another plan.

## Flex Consumption specifics

- **One app per plan.** No deployment slots (zero-downtime rolling updates are in preview instead). App initialization must finish within **30 seconds**.
- **Instance memory:** 512 MB (0.25 vCPU), 2,048 MB (1 vCPU, the recommended default), 4,096 MB (2 vCPU). **Maximum instances:** 1 to 1,000 per function group. Optional always-ready instances. The regional memory quota is adjustable: read it, don't assume it.
- **Languages:** Node.js 22 and 24, Python 3.10–3.14, .NET 8/9/10 isolated (no in-process), Java 8–25, PowerShell 7.4/7.6.
- **Blob trigger** only with the Event Grid source; non-.NET apps need extension bundle `[4.0.0, 5.0.0)` or later. No NFS shares; no `WEBSITE_TIME_ZONE`/`TZ`. VNet integration needs the `Microsoft.App` provider registered.
- **Deployment:** a zip package in a blob container, read by the app at startup (by default in the `AzureWebJobsStorage` account). The container must exist before the app is created.
- **Configuration lives in `properties.functionAppConfig`:** `runtime { name, version }`, `scaleAndConcurrency { instanceMemoryMB, maximumInstanceCount, alwaysReady, triggers.http.perInstanceConcurrency }`, `deployment.storage { type: 'blobContainer', value: <container URL>, authentication }`.

**Settings that templates copied from other plans still carry, and Flex rejects or ignores** (Microsoft's list, abridged): `FUNCTIONS_WORKER_RUNTIME`, `FUNCTIONS_WORKER_RUNTIME_VERSION`, `FUNCTIONS_EXTENSION_VERSION` (platform-managed), `WEBSITE_NODE_DEFAULT_VERSION`, `WEBSITE_RUN_FROM_PACKAGE`, `WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`, `WEBSITE_CONTENTSHARE`, `SCM_DO_BUILD_DURING_DEPLOYMENT`, `ENABLE_ORYX_BUILD`, `WEBSITE_VNET_ROUTE_ALL`, `WEBSITE_DNS_SERVER`, `WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT`; site properties `linuxFxVersion`, `alwaysOn`, `use32BitWorkerProcess`, `functionAppScaleLimit` (now `maximumInstanceCount`), `preWarmedInstanceCount` (now `alwaysReady`), `vnetRouteAllEnabled`, `ftpsState`. Remove them.

## Host storage (`AzureWebJobsStorage`)

Every app needs a general-purpose storage account with blob, queue and table endpoints. The host uses it for timer and blob-trigger coordination, function keys and diagnostic events.

**Identity-based form** (no key in settings; `__` is read as `:`):

| Setting | Value |
|---|---|
| `AzureWebJobsStorage__accountName` | The account name (standard endpoints) |
| `AzureWebJobsStorage__credential` | `managedidentity` |
| `AzureWebJobsStorage__clientId` (or `__managedIdentityResourceId`) | The user-assigned identity; omit for the system-assigned one |
| `AzureWebJobsStorage__blobServiceUri`, `__queueServiceUri`, `__tableServiceUri` | Only for custom DNS or sovereign clouds (HTTPS) |

| Plan | Identity for host storage | Azure Files content share |
|---|---|---|
| Flex Consumption | Full | None |
| Dedicated | Full | None |
| Consumption, Elastic Premium | Blobs, queues, tables | Still needs `WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` (a key): keep it in Key Vault, or run without Azure Files (slower) |

**Roles for the identity on the host account:** **Storage Blob Data Owner** (the documented minimum) plus **Storage Table Data Contributor** for diagnostic events. Blob triggers add Storage Queue Data Contributor and Storage Account Contributor; Event Hubs triggers and timers rely on Storage Blob Data Owner. Use **separate app settings** (not `AzureWebJobsStorage`) for your own storage bindings and SDK clients, even on the same account.

Other rules:

- These settings must exist and be valid **at creation**; adding them later doesn't fix an app created without them. Never mark them as slot settings, and don't let deployments overwrite them.
- **Host ID** is derived from the app name's first 32 characters: two apps or slots sharing a storage account and a 32-character prefix collide (AZFD0004, the host stops). Give each app its own storage account.
- `APPLICATIONINSIGHTS_AUTHENTICATION_STRING` with **Monitoring Metrics Publisher** makes telemetry keyless too.

## Node.js versions

Node.js **24** (support until April 30, 2028) and **22** (until April 30, 2027) are the supported versions; Node.js 22 is the last one Linux Consumption gets. Programming model v4 (`@azure/functions` 4.x, 4.16.5 in October 2026) needs runtime 4.25+.

Errors: `reference/functions/errors.md`. Durable Functions: `reference/functions/durable-functions.md`; Functions on Container Apps: `reference/functions/functions-on-container-apps.md`.


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 107 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/azure/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
