3 min read
Azure Functions Premium Plan: Enterprise Serverless
Premium plan eliminates cold starts while keeping serverless scaling. Pre-warmed instances, VNet integration, and unlimited execution time.
Premium vs Consumption
| Feature | Consumption | Premium |
|---|---|---|
| Cold starts | Yes | No (pre-warmed) |
| Max timeout | 10 min | Unlimited |
| VNet integration | No | Yes |
| Min instances | 0 | 1+ (configurable) |
| Scaling | Event-driven | Event-driven |
| Billing | Per execution | Per vCPU-second |
Creating Premium Plan
# Create premium plan
az functionapp plan create \
--name my-premium-plan \
--resource-group myRG \
--location eastus \
--sku EP1 \
--min-instances 1 \
--max-burst 10
# Create function app on premium
az functionapp create \
--name my-premium-func \
--resource-group myRG \
--plan my-premium-plan \
--storage-account mystorageaccount \
--runtime dotnet
SKU Options
| SKU | vCPU | Memory | Price |
|---|---|---|---|
| EP1 | 1 | 3.5 GB | $0.173/hr |
| EP2 | 2 | 7 GB | $0.346/hr |
| EP3 | 4 | 14 GB | $0.692/hr |
Pre-Warmed Instances
# Set minimum instances (always warm)
az functionapp config set \
--name my-premium-func \
--resource-group myRG \
--min-instances 2
# View current instance count
az functionapp show \
--name my-premium-func \
--resource-group myRG \
--query "siteConfig.preWarmedInstanceCount"
VNet Integration
# Integrate with VNet
az functionapp vnet-integration add \
--name my-premium-func \
--resource-group myRG \
--vnet myVNet \
--subnet functions-subnet
Private Endpoints
# Create private endpoint
az network private-endpoint create \
--name func-private-endpoint \
--resource-group myRG \
--vnet-name myVNet \
--subnet private-endpoints \
--private-connection-resource-id $(az functionapp show --name my-premium-func -g myRG --query id -o tsv) \
--group-id sites \
--connection-name func-connection
Scale Configuration
// host.json
{
"extensions": {
"http": {
"maxConcurrentRequests": 200
}
},
"functionTimeout": "00:30:00" // 30 minutes
}
Long-Running Functions
// Unlimited execution time with Premium
[FunctionName("LongRunningProcess")]
public static async Task<IActionResult> Run(
[HttpTrigger] HttpRequest req,
ILogger log)
{
// Process for hours if needed
await ProcessLargeDataset(); // No timeout
return new OkResult();
}
Accessing Private Resources
// Connect to SQL in private VNet
[FunctionName("QueryPrivateSQL")]
public static async Task<IActionResult> Run(
[HttpTrigger] HttpRequest req)
{
// Connection goes through VNet integration
var connectionString = "Server=private-sql.database.windows.net;...";
using var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
// Query data...
}
Monitoring Instances
// App Insights query - check instance distribution
FunctionAppLogs
| where TimeGenerated > ago(1h)
| summarize count() by RoleInstance
| render piechart
Cost Optimization
# Scale to zero during off-hours (loses pre-warming)
az functionapp config set \
--name my-premium-func \
--resource-group myRG \
--min-instances 0
# Use slots for dev/test on same plan
az functionapp deployment slot create \
--name my-premium-func \
--resource-group myRG \
--slot staging
Premium plan: production-grade serverless without compromises.