Azure Functions Flex Consumption: When to Replace the Premium Plan in 2026
Azure Functions Flex Consumption: When to Replace the Premium Plan in 2026
When Microsoft GA-ed Flex Consumption for Azure Functions in 2024, most enterprise teams did not react – the Premium plan was established, worked, and nobody wanted to change a working thing. In Q2 2026 at Christie's we ran a FinOps audit of serverless workloads and Flex emerged as the unexpected champion: 60% of our Premium Function Apps could move to Flex at half the cost without losing functionality.
This article is the breakdown of when and how to use Flex.
A Quick Comparison of the Three Plans
| Property | Consumption | Flex Consumption | Premium (EP1+) |
|---|---|---|---|
| Price (idle) | EUR 0 | EUR 0 | ~EUR 120/month |
| Price (active) | Per-GBs | Per-second per instance | Fixed per plan |
| VNet integration | No | Yes | Yes |
| Cold start | 2–10 s | 0–1 s (always-ready) | 0 s |
| Max execution time | 10 min | 60 min | 60 min |
| Always-ready instances | 0 | 0–N (configurable) | 1+ (built into the SKU) |
| HTTP scale-out limit | 200 | 1 000 | Per SKU |
| Deployment slots | No | Limited (1) | Yes |
| Custom domain + SSL | Yes | Yes | Yes |
| Zone redundancy | No | Yes | Yes (zone redundant) |
Three real game changers of Flex over Consumption:
- VNet integration – Flex supports private endpoints, Consumption does not. For PE-only architectures (see the June 2026 article) this is the choice between "usable" and "unusable"
- Pre-warmed instances – minimum 0, maximum 100. Cold start anxiety disappears
- Per-second billing with GB-second – cheaper than Premium per-plan for burst workloads
Real Cost Example: a Christie's REST API
Workload: a REST API for an internal reporting tool. ~200 requests/hour during business hours, 0 outside. p95 latency requirement: 500 ms.
| Plan | Monthly cost | Comment |
|---|---|---|
| Consumption | ~EUR 25 | Not viable – the API needs VNet for DB |
| Premium EP1 (1 instance) | ~EUR 120 | Works, but idle 20 hours/day |
| Premium EP1 zone-redundant | ~EUR 360 | High availability, expensive |
| Flex Consumption (1 always-ready) | ~EUR 52 | VNet + no cold start, pay only for real usage |
| Flex Consumption (0 always-ready) | ~EUR 18 | No cold start guarantee |
For this API we migrated to Flex with 1 always-ready instance – EUR 68/month savings vs Premium EP1, plus EUR 308 vs EP1 zone-redundant. Scaled across 15 similar APIs: ~EUR 1 000/month savings.
Flex Consumption in Bicep
// Server farm with the Flex SKU
resource flexPlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: 'asp-api-flex-prod'
location: location
sku: {
tier: 'FlexConsumption'
name: 'FC1'
}
properties: {
reserved: true // Linux
}
}
// Function App
resource flexFunc 'Microsoft.Web/sites@2024-04-01' = {
name: 'func-api-flex-prod'
location: location
kind: 'functionapp,linux'
identity: { type: 'SystemAssigned' }
properties: {
serverFarmId: flexPlan.id
virtualNetworkSubnetId: functionSubnet.id
vnetRouteAllEnabled: true
publicNetworkAccess: 'Disabled'
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storageAccount.properties.primaryEndpoints.blob}deployments'
authentication: {
type: 'SystemAssignedIdentity'
}
}
}
scaleAndConcurrency: {
instanceMemoryMB: 2048
maximumInstanceCount: 100
alwaysReady: [
{
name: 'http'
instanceCount: 1 // 1 always-ready for HTTP triggers
}
]
}
runtime: {
name: 'dotnet-isolated'
version: '9.0'
}
}
}
}Three important parameters versus Premium:
functionAppConfig.deployment.storage– Flex deploys packages into a Blob container via MSI, not the classic WEBSITE_RUN_FROM_PACKAGE SAS URLscaleAndConcurrency.instanceMemoryMB– you have to pick a memory tier (2048, 4096); per-second billing scales accordinglyalwaysReady– per-trigger configuration (HTTP vs queue); a different count per trigger
Deployment via GitHub Actions
name: Deploy Flex Function
on:
push:
branches: [main]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Build and package
run: |
dotnet publish src/Api.csproj -c Release -o output
cd output
zip -r ../app.zip .
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Upload to Flex deployment container
run: |
az storage blob upload \
--account-name "${{ vars.STORAGE_NAME }}" \
--container-name "deployments" \
--name "app-${{ github.sha }}.zip" \
--file app.zip \
--auth-mode login \
--overwrite
- name: Sync Flex Function App
run: |
az functionapp deployment source config-zip \
--resource-group "${{ vars.RG_NAME }}" \
--name "${{ vars.FUNC_NAME }}" \
--src "https://${{ vars.STORAGE_NAME }}.blob.core.windows.net/deployments/app-${{ github.sha }}.zip" \
--build-remote falseHeads up: Flex has no Kudu for file inspection and no SCM endpoint for the classic Zip Deploy. Deployment flows through Blob storage with MSI authentication. If you have a legacy CI/CD pipeline that relies on az functionapp deployment source config-zip with a SAS URL, you must adjust.
When NOT to Switch From Premium to Flex
Three scenarios where Premium remains the right call:
- In-memory state / cache between requests – Flex pre-warm instances do not aggregate state perfectly; periodic shutdown drops memory. Premium with
alwaysOn=truehas persistent instances - Workloads with 24/7 fixed load – for steady 5+ instance load, Premium 3Y reserved comes out cheaper than Flex per-second
- Deployment slots for blue/green – Flex has only 1 slot (production). If you do slot swaps, stay on Premium
Migration Playbook: Premium → Flex in One Sprint
At Christie's we did the migration per Function App like this:
- Day 1 – new Flex Function App next to the existing one, deploy the same code, smoke test
- Day 2 – point integration tests at Flex, performance comparison (p50, p95, p99 latency)
- Day 3 – Front Door / APIM routes 10% of traffic to Flex, monitor for 24h
- Day 4 – 50% of traffic, verify cost projection
- Day 5 – 100% cutover, keep Premium for 7 days as rollback
- Day +7 – delete the Premium plan
The key: deployment via blob storage with MSI requires deployment pipeline tweaks (~2 hours). Everything else is unchanged – same runtime, same code, same app settings.
Limits Worth Calling Out
| Limit | Flex Consumption | Workaround |
|---|---|---|
| Max execution time | 60 min | Same as Premium |
| Concurrent HTTP requests | 1 000 | Scaled via instances |
| Memory per instance | 512 MB – 4 GB | Larger = higher cost |
| Deployment slots | 1 | Use a Front Door staging slot |
| Connected to App Service Environment | No | Use Premium in ASE |
| Custom container images | No | Managed runtime only |
For 95% of workloads the limits are irrelevant. Custom container support is the biggest miss – if you have a Function with a custom Docker image, Flex is not an option.
Conclusion
Flex Consumption is the most overlooked optimization in an Azure FinOps audit checklist in May 2026. For most Premium Function Apps it delivers identical functionality at 30–50% of the cost. Migration is a one-sprint affair; the deployment pipeline is the only thing that changes.
At Christie's and CostSentry.AI we saved hundreds of EUR per month by flipping 70% of our Premium Function Apps – with no compromise on latency or SLA.
If you are auditing your own serverless stack and want to identify Flex Consumption candidates, check out our cloud architecture services or reach out for a FinOps review.
About the author

Martin Rylko
Senior Cloud Architect & DevOps Engineer
14+ years in IT – from on-premises datacenters and Hyper-V clustering to cloud infrastructure on Microsoft Azure. I specialize in Landing Zones, IaC automation, Kubernetes and security compliance.
Frequently Asked Questions
How is Flex Consumption different from classic Consumption?▾
When should I pick Flex Consumption over the Premium plan?▾
How does Flex Consumption handle cold starts?▾
Does Flex Consumption work with Bicep and Deployment Stacks?▾
You might also like
Azure Private Endpoints Everywhere: Refactoring a Serverless Pipeline From APIM to PE-Only
A practical refactor of a serverless email pipeline from APIM-fronted architecture to a private-endpoint-only end state. Shared PE subnet, Function Apps Premium, Service Bus, and Log Analytics with no public surface.
ReadAzure Cosmos DB Cost Optimization: 8 Levers to Cut Your RU/s Bill
A practical guide to reducing Azure Cosmos DB costs. Provisioned vs Serverless, autoscale tuning, indexing policy, TTL, and multi-region trade-offs with real numbers from running CostSentry.AI.
ReadMicrosoft Build 2026: Foundry, FOCUS 1.3, and Agent Cost Trace
My Microsoft Build 2026 recap from a cloud architect's perspective. The Foundry rebrand, FOCUS 1.3 GA, Agent Cost Trace for AI workloads, and three practical takeaways for enterprise customers.
Read