Skip to content
15 years of IT experience
CybexsoftConsultancy Services
← Back to case studies

Azure Production Infrastructure

Production-grade Azure infrastructure for an enterprise web platform

An enterprise product team needed a secure, resilient Azure platform built from scratch. We delivered a Terraform-managed environment covering Blob Storage with CDN, Application Gateway with WAF, VM Scale Sets, Azure App Service, and an Azure DevOps Pipelines CI/CD workflow — all inside a hub-spoke VNet with private endpoints and centralized monitoring.

Industry
Enterprise SaaS
Engagement
9-week build
Team
Platform + backend
Focus
Azure IaC, CI/CD, HA compute

The situation

What was wrong

The engineering team had outgrown ad-hoc Azure resource creation and needed a hardened, production-grade platform before their next enterprise onboarding wave. Everything was missing: no hub-spoke network design, no autoscaling strategy, assets stored on VM local disk, deployments via manual RDP/SSH, and no pipeline to speak of. Security reviews were blocked because there was nothing consistent to review.

  • All resources lived in a single flat subscription with no network segmentation or private endpoints.
  • Static assets and uploads stored on VM local disks — no redundancy, no CDN, no lifecycle management.
  • Deployments required direct VM access with no audit trail and a release process measured in hours.
  • No autoscaling — traffic spikes caused manual scale-up operations during working hours only.
Engagement focus
AzureTerraformAzure DevOpsApp ServiceVMSS
Outcome

Production-ready Azure platform live in 9 weeks with zero manual click-ops and a sub-15-minute release pipeline.

How we worked

The approach, step by step

Stabilise delivery early, then build the foundation that keeps it stable once we hand it back.

    1

    Hub-spoke network and subscription structure

    Established a hub VNet for shared services (Bastion, firewall, VPN gateway) and a spoke VNet for the application workload, peered together. Defined Network Security Groups with least-privilege rules, private endpoints for Storage and Key Vault, and Azure Private DNS zones to resolve them inside the VNet without public exposure.

    2

    Blob Storage, CDN, and static delivery

    Provisioned Azure Blob Storage accounts with geo-redundant replication (GRS) for media uploads and build artifacts, lifecycle policies for tiering, and versioning for rollback. Connected Azure CDN (Front Door origin group) in front of the static container for low-latency global delivery with cache invalidation wired into the pipeline.

    3

    Application Gateway with WAF

    Deployed an Azure Application Gateway v2 with Web Application Firewall (WAF) in prevention mode as the single ingress point. Configured HTTPS listeners with an App Service–managed certificate, path-based routing rules to split traffic between the VM Scale Set backend pool and the App Service backend, and custom health probes per service.

    4

    VM Scale Sets for stateful compute

    Deployed a Zone-redundant VM Scale Set (VMSS) using a hardened custom image baked via Azure Image Builder. Autoscale rules target 60% CPU with a 3-minute cooldown and a minimum of 2 instances across zones. Custom Script Extension handles bootstrap; rolling upgrade policy keeps releases zero-downtime.

    5

    Azure App Service for managed app runtime

    Deployed stateless API and background worker services to Azure App Service (Linux, P2v3 plan) with deployment slots for blue/green promotion. VNet Integration routes all outbound App Service traffic through the spoke VNet, keeping downstream calls to databases and Key Vault private. App settings and connection strings sourced from Key Vault references.

    6

    Azure DevOps Pipelines CI/CD

    Built a multi-stage Azure Pipeline triggered on main-branch merges: lint → unit tests → Docker build → ACR push → VMSS rolling update + App Service slot swap. YAML pipeline definitions live in the repo; environment-scoped approvals gate production promotion. Pipeline service connection uses a federated workload identity — no stored secrets.

    7

    IaC, monitoring, and handoff

    All resources codified in Terraform with remote state in an Azure Storage backend and state locking via blob leases. Wired Azure Monitor, Log Analytics Workspace, and Application Insights for end-to-end observability. Delivered Terraform module documentation, runbooks for day-2 operations, and a recorded handoff walkthrough.

Handover

What we delivered

  • Terraform modules for hub-spoke VNet, NSGs, private endpoints, Bastion, and DNS zones
  • Azure Blob Storage with GRS, lifecycle policies, CDN/Front Door integration, and cache-bust pipeline step
  • Application Gateway v2 with WAF (prevention mode), HTTPS, path-based routing, and health probes
  • Zone-redundant VMSS with custom image, autoscale policies, and zero-downtime rolling upgrades
  • Azure App Service (Linux) with deployment slots, VNet Integration, and Key Vault references
  • Azure DevOps multi-stage pipeline: lint → test → ACR build → VMSS update → App Service slot swap
  • Azure Monitor dashboards, Log Analytics workspace, Application Insights, and alert rules
  • Terraform remote state in Azure Storage with blob lease locking and per-environment workspaces

Stack

What it runs on

TerraformAzure VNetAzure Blob StorageAzure CDN / Front DoorApplication Gateway v2WAFVM Scale SetsAzure Image BuilderAzure App ServiceAzure DevOps PipelinesAzure Container RegistryKey VaultAzure MonitorLog AnalyticsApplication Insights

Afterwards

What changed

Measured after handover, once the client's own team was running the system without us.

9 wk
End-to-end delivery
100%
Infrastructure as Code coverage
15 min
End-to-end CI/CD pipeline

Planning something like this?

Tell us what you are trying to move, migrate or automate and we will reply within one business day with an honest read on the work — including the parts we think you should not do.

More engagements