Back to Blog
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

FeatureConsumptionPremium
Cold startsYesNo (pre-warmed)
Max timeout10 minUnlimited
VNet integrationNoYes
Min instances01+ (configurable)
ScalingEvent-drivenEvent-driven
BillingPer executionPer 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

SKUvCPUMemoryPrice
EP113.5 GB$0.173/hr
EP227 GB$0.346/hr
EP3414 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.

Michael John Peña

Michael John Peña

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.