← Back to projects
Featured

Azure to AWS Migration & Infrastructure Modernization

Migrated a multi-environment production web application ecosystem from Azure to AWS with minimal downtime — re-platforming the backend onto Docker + Elastic Beanstalk, moving to S3/CloudFront and Amazon RDS, and preserving the existing CI/CD.

Role
Cloud / DevOps Engineer (Lead)
Duration
Sep 25 – Jan 26
AWSAzureAmazon S3CloudFrontElastic BeanstalkAmazon RDSSQL ServerACMIAMDockerGitHub ActionsReactNode.js
Azure to AWS Migration & Infrastructure Modernization cover

Key highlights

  • Migrated Development, QA, and Production environments from Azure to AWS with minimal downtime and full business continuity.
  • Re-platformed the Node.js backend into Docker on AWS Elastic Beanstalk for consistent, portable deployments.
  • Moved the frontend to Amazon S3 + CloudFront (ACM TLS) and the database from Azure SQL to Amazon RDS for SQL Server.
  • Migrated application data and storage (Azure Storage → S3) with validation testing to guarantee data integrity.
  • Preserved the existing GitHub Actions CI/CD, standardizing the deployment process across all environments.
  • Strengthened security through AWS ACM certificate management, IAM access controls, and network/security-group isolation.

Overview

Migrated a production web application ecosystem from Microsoft Azure to Amazon Web Services (AWS), covering Development, QA, and Production environments while maintaining application availability and minimizing downtime.

The existing platform consisted of a React frontend hosted as an Azure Static Web App, a Node.js backend on Azure App Service, an Azure SQL Database, and Azure Storage Accounts. The objective was to modernize the architecture, improve operational flexibility, optimize costs, and leverage AWS-native services.

Architecture

Azure to AWS migration architecture: React frontend moving from Azure Static Web Apps to S3 + CloudFront with ACM; Node.js backend re-platformed from Azure App Service to a Docker container on AWS Elastic Beanstalk; Azure SQL Database migrated to Amazon RDS for SQL Server; Azure Storage migrated to Amazon S3; GitHub Actions CI/CD retained.
Source (Azure) to target (AWS): Static Web App → S3 + CloudFront, App Service → Dockerized Elastic Beanstalk, Azure SQL → Amazon RDS for SQL Server, Azure Storage → S3 — with GitHub Actions retained throughout.

Source architecture (Azure)

  • Frontend — React application on Azure Static Web App.
  • Backend — Node.js application on Azure App Service.
  • DatabaseAzure SQL Database (MSSQL).
  • StorageAzure Storage Account.
  • CI/CDGitHub Actions.

Target architecture (AWS)

  • FrontendAmazon S3 + Amazon CloudFront, secured with AWS Certificate Manager (ACM).
  • Backend — Dockerized Node.js application on AWS Elastic Beanstalk (Docker platform).
  • DatabaseAmazon RDS for SQL Server.
  • StorageAmazon S3.
  • SecurityACM for TLS and IAM-based access controls.
  • CI/CDGitHub Actions (retained).

Business challenges

The Azure environment supported multiple application environments and business-critical workloads, so the migration required:

  • Minimal downtime during cutover.
  • Preservation of existing CI/CD workflows.
  • Secure migration of application data and storage.
  • Infrastructure modernization without impacting end users.
  • Consistent deployment processes across Development, QA, and Production.

Migration strategy

The migration was executed in phases to reduce risk and ensure business continuity.

Phase 1 — Assessment & planning

Reviewed the existing Azure architecture, identified dependencies between frontend, backend, database, and storage, defined the migration sequence and rollback procedures, and planned environment-specific activities for Development, QA, and Production.

Phase 2 — Infrastructure provisioning

Provisioned the AWS environments, configured networking and security controls, created the Amazon RDS instances, configured S3 buckets and CloudFront distributions, and implemented SSL certificates with AWS ACM.

Phase 3 — Application modernization

Rather than lifting-and-shifting the existing backend deployment model, the Node.js application was containerized with Docker — delivering consistent deployments, improved portability, simplified scaling, and fewer environment-specific issues — then deployed on AWS Elastic Beanstalk’s Docker platform.

Phase 4 — Data migration

Migrated the SQL Server databases from Azure SQL Database to Amazon RDS, moved application assets from Azure Storage Accounts to Amazon S3, and performed validation testing to ensure data integrity.

Phase 5 — Cutover & validation

Updated DNS configurations, validated application functionality across all environments, performed smoke and regression testing, and executed the production cutover with minimal downtime.

CI/CD architecture

The existing GitHub Actions pipelines were preserved throughout the migration:

  1. Developer pushes code to GitHub.
  2. GitHub Actions executes build and validation steps.
  3. The Docker image is built.
  4. The application is deployed to Elastic Beanstalk.
  5. CloudFront cache invalidation runs when frontend changes are released.

This minimized disruption to development workflows while improving deployment consistency.

Security enhancements

Several security improvements were introduced during the migration:

  • SSL/TLS certificate management with AWS ACM.
  • Centralized access control through AWS IAM.
  • Secure storage on Amazon S3.
  • Network isolation and security-group controls.
  • A containerized backend deployment model.

Results & outcomes

  • Availability — migrated Development, QA, and Production with minimal downtime.
  • Modernization — containerized the backend with Docker and adopted AWS-native services.
  • Scalability — improved frontend scalability via CloudFront + S3 and simplified backend scaling with Elastic Beanstalk.
  • Operational efficiency — preserved the existing GitHub Actions workflows and standardized deployments across environments.
  • Security — improved certificate management with ACM and tighter access control through IAM.

Key takeaway

This migration transformed a multi-environment Azure-hosted application into a modern AWS-native architecture — maintaining business continuity, minimizing downtime, preserving CI/CD processes, and improving scalability, security, and operational efficiency.


← Back to all projects