projects / aws-to-azure-migration
05/cloud infrastructure

AWS to Azure Cloud Migration

CompletedQ1 2023

Zero-downtime infrastructure migration from AWS (EC2, RDS, ECR) to Azure (AKS, SQL, Container Registry) with Terraform and Jenkins.

role
Tech lead - migration planning, execution, zero-downtime cutover
period
Q1 2023
status
Completed
impact
Zero-downtime migration · 20% infrastructure cost reduction

The Mandate

CareerLabs made a strategic decision to migrate its cloud infrastructure from Amazon Web Services (AWS) to Microsoft Azure - driven by enterprise integration requirements, governance standardization, and long-term cloud strategy alignment.

As the technical lead, I evaluated Azure Kubernetes Service (AKS) as the migration target, designed the full cut-over plan, and executed the migration end-to-end across workloads, databases, container registries, networking, and CI/CD.

Non-negotiable requirement: zero business downtime.


Scope

This was a full infrastructure migration, not a lift-and-shift of one or two services:

  • EC2-based applications → Azure Kubernetes Service (AKS)
  • AWS RDS databases → Azure SQL Database
  • AWS ECR container registry → Azure Container Registry
  • Jenkins CI/CD → Azure DevOps with Azure Pipelines
  • AWS networking (VPC, security groups, load balancers) → Azure VNets, NSGs, CDN Front Door, Nginx Ingress
  • AWS CloudWatch monitoring → Azure Monitor + Application Insights

Every component had to be assessed, an Azure equivalent identified, migrated, and validated - without touching live production traffic.


Technical Approach

1. Assessment & Migration Planning

Started with a full inventory of all AWS resources. For each:

  • Identified the appropriate Azure equivalent
  • Assessed migration complexity and downtime risk
  • Mapped service dependencies to determine safe migration order
  • Projected cost in the new environment

This produced a phased roadmap - lower-risk, higher-isolation services first, databases and high-traffic services last.

2. Docker Compose → AKS with HPA and Node Autoscaling

Applications were running on Docker Compose on EC2 - manageable at small scale but not horizontally scalable. Migration to AKS was the opportunity to fix this.

I refactored Docker Compose workloads into Kubernetes manifests with:

  • Horizontal Pod Autoscaler (HPA) for traffic-responsive scaling
  • Node Autoscaling for cost-efficient cluster sizing
  • Namespace-based isolation per environment and service tier
  • Azure Container Registry replacing AWS ECR for image storage

3. Zero-Downtime Database Migration

Migrated relational databases from AWS RDS to Azure SQL Database using the Azure Database Migration Service:

  • Schema analysis and optimization for Azure SQL
  • Parallel run validation - Azure database receiving replicated writes while AWS remained primary
  • Cutover executed in a maintenance window with a verified, tested rollback plan

4. Delivery Layer - Nginx Ingress + Azure CDN Front Door

Configured Nginx Ingress Controller inside AKS for internal cluster routing and TLS termination. Set up Azure CDN Front Door as the global entry point - handling:

  • Global load balancing and traffic routing
  • DDoS protection
  • SSL/TLS at the edge
  • Caching for static assets via Azure Storage

This delivery layer replaced the combination of AWS ALB, CloudFront, and S3 that was in place on the AWS side.

5. CI/CD Migration - Jenkins → Azure DevOps

Re-engineered Jenkins pipelines into Azure Pipelines integrated with Azure DevOps. The new pipeline architecture was deliberately cleaner than what it replaced - this migration was used as an opportunity to pay down CI/CD technical debt and establish repeatable, automated deployments post-migration.

6. Monitoring & Observability

Deployed Azure Monitor, Application Insights, and Log Analytics to establish a standardized observability framework. Set up real-time alerting to replace the Google Chat/Telegram alerting that was running on AWS.


Technology Stack

Category Source (AWS) Target (Azure)
Compute EC2 (Docker Compose) AKS with HPA + Node Autoscaling
Databases AWS RDS Azure SQL Database
Container Registry AWS ECR Azure Container Registry
CI/CD Jenkins Azure DevOps + Azure Pipelines
Ingress AWS ALB Nginx Ingress Controller
CDN / Edge CloudFront Azure CDN Front Door
Storage S3 Azure Storage
Monitoring CloudWatch Azure Monitor + Application Insights
IaC Manual Terraform + ARM Templates

Quantified Impact

Metric Result
Business downtime Zero
Cloud cost reduction 20% via right-sizing and reserved capacity planning
Deployment model Docker Compose on EC2 → Kubernetes with HPA and autoscaling
Governance Fragmented → standardized with Azure Policy and unified IAM
CI/CD Manual Jenkins → automated Azure Pipelines

Impact & Takeaway

Cloud migrations fail when they're treated as pure infrastructure exercises. This one succeeded because it was treated as an engineering project with clear dependency sequencing, validated rollback plans at every step, and parallel-run periods for the riskiest components (databases).

The 20% cost reduction was the headline outcome. The more durable outcome was a modernized, governable infrastructure - migrating from Docker Compose to AKS with autoscaling was not just a cloud-provider switch but a genuine architectural improvement that the engineering team could build on confidently.

Full enterprise migration. Zero downtime. EC2 + Docker Compose → AKS with autoscaling. 20% cost reduction.


Tags: cloud migration · AWS to Azure · infrastructure migration · AKS deployment · zero-downtime migration · Terraform migration · cloud strategy · Azure adoption · multi-cloud