Azure App Service vs Functions vs Container Apps

Azure App Service is the classic PaaS — web apps with simple deploys (comparable to Vercel or Heroku). Azure Functions is serverless: short event-driven tasks without server management, automatically scales to zero. Container Apps is the modern choice for microservices: Kubernetes-grade orchestration without Kubernetes complexity. For monolithic web apps: App Service. For event-driven workloads: Functions. For microservices or polyglot stacks: Container Apps.

Azure App Service — PaaS for classic web apps

App Service is Azure's longest-running PaaS offering: you publish your app (Node, .NET, Python, Java, PHP) and Azure handles the OS, runtime, load-balancing, and scaling. Comparable to AWS Elastic Beanstalk or Heroku.

Strong: simplest deployment (Git push, ZIP upload, or via CI/CD), built-in features like Authentication, Custom Domains, SSL, Backups, Deployment Slots (blue/green). Scales vertically and horizontally with a click. Supports Linux and Windows.

Weak: pays for memory + CPU 24/7 (no scale-to-zero in Basic tier), limited container control, price scales less gracefully than Functions or Container Apps with fluctuating load.

Price: Basic B1 ~€44/month, Standard S1 ~€69/month, Premium V3 €175-€700/month depending on size.

Azure Functions — serverless event-driven

Functions are small pieces of code that run in response to an event: HTTP request, queue message, timer, blob upload, Cosmos DB change. Automatically scales from 0 to thousands of instances.

Strong: true scale-to-zero (no cost when idle), pay-per-execution model (first 1M executions/month free), perfect for webhooks, background jobs, scheduled tasks.

Weak: cold-start latency (300ms-2s on Consumption plan, 0 on Premium), 10 minutes max execution time (on Consumption), limited memory (1.5GB max on Consumption). Not suitable as the sole hosting for a large web app.

Price: Consumption: $0.20/M executions + $0.000016/GB-sec. For 1M HTTP calls/month: typically €5-€20.

Azure Container Apps — modern microservices

Container Apps runs Docker containers with Kubernetes-like orchestration (based on KEDA and Dapr) without you having to manage Kubernetes. Automatically scales on events, HTTP traffic, queue depth, etc.

Strong: deploy any containerized service (Node, Go, Python, .NET, custom), scale-to-zero supported, built-in revision management (blue/green, canary), service-to-service discovery, Dapr for sidecar patterns, supports event-driven scaling with KEDA.

Weak: newer product than App Service and Functions, less community content available, more complex than App Service for simple monolithic apps.

Price: €0.000024/vCPU-sec + €0.000003/GB-sec. For a typical microservice: €30-€150/month. Scales elastically with load.

Decision Matrix

  • Monolithic web app (Node, .NET, Python): App Service. Simplest, fastest, predictable costs.
  • Webhooks, API endpoints, background jobs: Functions. Scales elastically, pay only for use.
  • Microservices architecture (3+ separate services): Container Apps. Builds to Kubernetes level without the complexity.
  • Custom runtime or polyglot stack: Container Apps. Any language/runtime supported via containers.
  • Event-driven processing (queues, Service Bus): Functions or Container Apps. Both scale on queue events.
  • Mission-critical web app with 99.99% SLA: App Service Premium V3 or Container Apps with multiple replicas + Front Door.

How to combine them

Real Azure architectures often mix multiple services:

  • App Service for the web frontend — public-facing, predictable traffic.
  • Functions for webhooks and async jobs — Stripe webhooks, scheduled imports, email processing.
  • Container Apps for specific services — e.g., an AI inference service or a PDF generator that needs to be scalable.

A typical SME app on Azure mixes App Service (€69/month) + Functions (€10-€30/month) + Cosmos DB + Azure AD B2C. Total €150-€400/month with limited use.

Common mistakes

  • Choosing Functions for a full web app. Technically works, but cold starts and orchestration make it painful. For a real web app: App Service.
  • Choosing Container Apps because it's "modern". For a single service without a microservices architecture, App Service is cheaper and simpler.
  • Choosing App Service Premium for 1 user. Start with Basic or Standard; upgrade when the load justifies it.
  • Not setting up Application Insights. Without monitoring, you won't know what's slow.
  • Functions in a private VNet without a Premium plan. Consumption-tier Functions cannot be in a private VNet. Not a showstopper, but plan for it.

Frequently asked questions

Can I just deploy my Node.js app to App Service?

Yes, directly from GitHub or via Azure CLI. For Node 18/20 support, App Service Linux is required (no Windows runtime issues). Setup takes 30-60 minutes.

What is Azure Container Instances and how does it differ from Container Apps?

Container Instances is for individual containers without auto-scaling or orchestration — useful for ad-hoc jobs. Container Apps is for long-running services with scaling and orchestration.

Does Azure Functions work with Next.js?

Next.js itself runs better on App Service or via Azure Static Web Apps (which itself uses Functions under the hood for API routes). Pure Functions for Next.js rendering is not a standard path.

How does App Service scale?

Vertically: upgrade from Basic to Standard to Premium. Horizontally: auto-scale rules on CPU/memory/schedule. Up to 30 instances on Premium tier.

Is Container Apps more expensive than App Service?

At steady-state, comparable or slightly more expensive. With variable load (much idle time), cheaper due to scale-to-zero. Calculate it for your use case.

What is Azure Kubernetes Service (AKS) and when is it better?

AKS is full Kubernetes. Suitable for large microservices platforms (10+ services) or teams with Kubernetes expertise. For SMEs: Container Apps provides 80% of AKS functionality with 20% of the complexity.

Ready to get started?

Read our approach for building an Azure app, or schedule a brief introduction — we'll provide a no-obligation review and an honest estimate of scope, costs, and lead time.

Back to Journal
Chat