Skip to content

Tutorial — Choose Your Hosting Plan

This tutorial section provides four independent, step-by-step tracks — one for each Azure Functions hosting plan. Every track covers the same seven topics so you can follow the complete journey from local development to production on whichever plan fits your workload.

Which Plan Should I Start With?

flowchart TD
    Start["I need to run\nPython on Azure Functions"] --> Q1{"Need VNet /\nprivate networking?"}

    Q1 -->|No| Q2{"Predictable\nmonthly cost?"}
    Q1 -->|Yes| Q3{"Scale to zero\nwhen idle?"}

    Q2 -->|"Pay only\nwhen running"| CONS["☁️ Consumption (Y1)"]
    Q2 -->|"Fixed monthly\nbudget"| DEDI["🖥️ Dedicated (App Service)"]

    Q3 -->|Yes| FLEX["⚡ Flex Consumption (FC1)"]
    Q3 -->|"No — always\nwarm"| Q4{"Need deployment\nslots?"}

    Q4 -->|Yes| PREM["🚀 Premium (EP)"]
    Q4 -->|No| FLEX

    click CONS "consumption/01-local-run/"
    click FLEX "flex-consumption/01-local-run/"
    click PREM "premium/01-local-run/"
    click DEDI "dedicated/01-local-run/"

    style CONS fill:#0078d4,color:#fff
    style FLEX fill:#107c10,color:#fff
    style PREM fill:#ff8c00,color:#fff
    style DEDI fill:#5c2d91,color:#fff

Not sure yet? Start with Flex Consumption — it offers the broadest feature set (VNet, scale-to-zero, configurable memory) and is Microsoft's recommended default for new projects. You can migrate between plans later, though some migrations have limitations — see Migrate apps from Consumption to Flex Consumption.

Plan Comparison at a Glance

Feature Consumption (Y1) Flex Consumption (FC1) Premium (EP) Dedicated (ASP)
Scale to zero ❌ (min 1 instance)
VNet integration ✅ (Standard+)
Private endpoints ✅ (Standard+)
Deployment slots ✅ (Windows only, 2 incl. production) ✅ (Standard+)
Max instances 100 (Linux) / 200 (Windows) 1,000 20–100 (region/OS dependent) 10–30
Default timeout 5 min 30 min 30 min 30 min
Max timeout 10 min Unlimited Unlimited Unlimited
Instance memory 1.5 GB fixed 512 / 2,048 / 4,096 MB 3.5–14 GB Plan-dependent
OS Windows / Linux Linux only Windows / Linux Windows / Linux
Python versions 3.10–3.12 3.10–3.12 3.10–3.14 (Preview) 3.10–3.14 (Preview)
Storage backend File share Blob container File share File share
Kudu / SCM ✅ (Windows only)
Pricing model Per-execution Per-execution Pre-allocated Pre-allocated

Network Architecture by Plan

Each hosting plan has a different network topology. The diagrams below show the full infrastructure that each tutorial track deploys — including VNet, subnets, private endpoints, DNS zones, and identity configuration.

☁️ Consumption (Y1) — Public Network

flowchart TD
    INET[Internet] -->|HTTPS| FA[Function App\nConsumption Y1\nLinux Python 3.11]

    FA -->|System-Assigned MI| ENTRA[Microsoft Entra ID]
    FA -->|"AzureWebJobsStorage__accountName\n+ connection string"| ST[Storage Account\npublic access]
    FA --> AI[Application Insights]

    subgraph STORAGE[Storage Services]
        ST --- FS[Azure Files\ncontent share]
    end

    NO_VNET["⚠️ No VNet integration\nNo private endpoints"] -. limitation .- FA

    style FA fill:#0078d4,color:#fff
    style NO_VNET fill:#FFF3E0,stroke:#FF9800
    style STORAGE fill:#FFF3E0

⚡ Flex Consumption (FC1) — Full Private Network

flowchart TD
    INET[Internet] -->|HTTPS| FA[Function App\nFlex Consumption FC1\nLinux Python 3.11]

    subgraph VNET["VNet 10.0.0.0/16"]
        subgraph INT_SUB["Integration Subnet 10.0.1.0/24\nDelegation: Microsoft.App/environments"]
            FA
        end
        subgraph PE_SUB["Private Endpoint Subnet 10.0.2.0/24"]
            PE_BLOB[PE: blob]
            PE_QUEUE[PE: queue]
            PE_TABLE[PE: table]
            PE_FILE[PE: file]
        end
    end

    PE_BLOB --> ST["Storage Account\nallowPublicAccess: false\nallowSharedKeyAccess: false"]
    PE_QUEUE --> ST
    PE_TABLE --> ST
    PE_FILE --> ST

    subgraph DNS[Private DNS Zones]
        DNS_BLOB[privatelink.blob.core.windows.net]
        DNS_QUEUE[privatelink.queue.core.windows.net]
        DNS_TABLE[privatelink.table.core.windows.net]
        DNS_FILE[privatelink.file.core.windows.net]
    end

    PE_BLOB -.-> DNS_BLOB
    PE_QUEUE -.-> DNS_QUEUE
    PE_TABLE -.-> DNS_TABLE
    PE_FILE -.-> DNS_FILE

    FA -.->|User-Assigned MI| UAMI[Managed Identity]
    UAMI -->|RBAC| ST
    FA --> AI[Application Insights]

    subgraph DEPLOY[Deployment]
        BLOB_CTR[Blob Container\ndeployment-packages]
    end
    ST --- BLOB_CTR

    style FA fill:#107c10,color:#fff
    style VNET fill:#E8F5E9,stroke:#4CAF50
    style ST fill:#FFF3E0
    style DNS fill:#E3F2FD

🚀 Premium (EP) — Private Network with Warm Instances

flowchart TD
    INET[Internet] -->|HTTPS| FA[Function App\nPremium EP1\nLinux Python 3.11]

    subgraph VNET["VNet 10.0.0.0/16"]
        subgraph INT_SUB["Integration Subnet 10.0.1.0/24\nDelegation: Microsoft.Web/serverFarms"]
            FA
        end
        subgraph PE_SUB["Private Endpoint Subnet 10.0.2.0/24"]
            PE_BLOB[PE: blob]
            PE_QUEUE[PE: queue]
            PE_TABLE[PE: table]
            PE_FILE[PE: file]
        end
    end

    PE_BLOB --> ST["Storage Account\nallowPublicAccess: false\nallowSharedKeyAccess: true"]
    PE_QUEUE --> ST
    PE_TABLE --> ST
    PE_FILE --> ST

    subgraph DNS[Private DNS Zones]
        DNS_BLOB[privatelink.blob.core.windows.net]
        DNS_QUEUE[privatelink.queue.core.windows.net]
        DNS_TABLE[privatelink.table.core.windows.net]
        DNS_FILE[privatelink.file.core.windows.net]
    end

    PE_BLOB -.-> DNS_BLOB
    PE_QUEUE -.-> DNS_QUEUE
    PE_TABLE -.-> DNS_TABLE
    PE_FILE -.-> DNS_FILE

    FA -.->|System-Assigned MI| ENTRA[Microsoft Entra ID]
    FA --> AI[Application Insights]

    subgraph STORAGE[Content Backend]
        SHARE[Azure Files\ncontent share]
    end
    ST --- SHARE

    WARM["🔥 Pre-warmed instances\nMin: 1, Max: 20-100"] -.- FA

    style FA fill:#ff8c00,color:#fff
    style VNET fill:#E8F5E9,stroke:#4CAF50
    style ST fill:#FFF3E0
    style DNS fill:#E3F2FD
    style WARM fill:#FFF3E0,stroke:#FF9800

🖥️ Dedicated (App Service Plan) — Fixed Capacity with VNet

flowchart TD
    INET[Internet] -->|HTTPS| FA[Function App\nDedicated B1-P3v3\nLinux Python 3.11]

    subgraph VNET["VNet 10.0.0.0/16"]
        subgraph INT_SUB["Integration Subnet 10.0.1.0/24\nDelegation: Microsoft.Web/serverFarms"]
            FA
        end
        subgraph PE_SUB["Private Endpoint Subnet 10.0.2.0/24"]
            PE_BLOB[PE: blob]
            PE_QUEUE[PE: queue]
            PE_TABLE[PE: table]
            PE_FILE[PE: file]
        end
    end

    PE_BLOB --> ST["Storage Account"]
    PE_QUEUE --> ST
    PE_TABLE --> ST
    PE_FILE --> ST

    subgraph DNS[Private DNS Zones]
        DNS_BLOB[privatelink.blob.core.windows.net]
        DNS_QUEUE[privatelink.queue.core.windows.net]
        DNS_TABLE[privatelink.table.core.windows.net]
        DNS_FILE[privatelink.file.core.windows.net]
    end

    PE_BLOB -.-> DNS_BLOB
    PE_QUEUE -.-> DNS_QUEUE
    PE_TABLE -.-> DNS_TABLE
    PE_FILE -.-> DNS_FILE

    FA -.->|System-Assigned MI| ENTRA[Microsoft Entra ID]
    FA --> AI[Application Insights]

    RFP["📦 WEBSITE_RUN_FROM_PACKAGE=1\nNo content share required"] -.- FA
    ALWAYS_ON["⚙️ Always On: true\nFixed capacity"] -.- FA

    style FA fill:#5c2d91,color:#fff
    style VNET fill:#E8F5E9,stroke:#4CAF50
    style ST fill:#FFF3E0
    style DNS fill:#E3F2FD

VNet is optional for Dedicated

The Dedicated plan supports VNet integration on Standard (S1) tier and above. The Basic (B1) tier used in the beginner tutorial does not include VNet integration. The diagram above shows the full architecture available at Standard+ tiers.

Tutorial Tracks

Each track contains the same seven steps. Pick your plan and follow from start to finish.

☁️ Consumption (Y1)

Classic serverless — pay only when your functions execute. Best for lightweight, event-driven workloads that don't need VNet access.

Step Topic
01 Run Locally
02 First Deploy
03 Configuration
04 Logging & Monitoring
05 Infrastructure as Code
06 CI/CD
07 Extending with Triggers
### ⚡ Flex Consumption (FC1)

Next-generation serverless — scale-to-zero with VNet integration, configurable instance memory, and per-function scaling. Microsoft's recommended default for new projects.

Step Topic
01 Run Locally
02 First Deploy
03 Configuration
04 Logging & Monitoring
05 Infrastructure as Code
06 CI/CD
07 Extending with Triggers

🚀 Premium (EP)

Always-warm instances with VNet support and deployment slots. Best for latency-sensitive workloads or long-running functions that need guaranteed capacity.

Step Topic
01 Run Locally
02 First Deploy
03 Configuration
04 Logging & Monitoring
05 Infrastructure as Code
06 CI/CD
07 Extending with Triggers

🖥️ Dedicated (App Service Plan)

Traditional App Service hosting with predictable pricing. Best when you already have an App Service Plan with spare capacity, or need features like deployment slots on a fixed budget.

Step Topic
01 Run Locally
02 First Deploy
03 Configuration
04 Logging & Monitoring
05 Infrastructure as Code
06 CI/CD
07 Extending with Triggers

What Each Step Covers

Step Topic You Will Learn
01 Run Locally Set up local dev environment, run functions with Core Tools, test endpoints
02 First Deploy Provision Azure resources and deploy your first function app
03 Configuration Manage app settings, connection strings, and environment-specific config
04 Logging & Monitoring Configure Application Insights, structured logging, and live metrics
05 Infrastructure as Code Define all resources in Bicep, deploy reproducibly
06 CI/CD Automate build, test, and deploy with GitHub Actions
07 Extending with Triggers Add Timer, Blob, Queue, and Event Grid triggers beyond HTTP

See Also

Sources