Request an exact quote
Cloud Migration migration path

From Microsoft Azure to Amazon Web Services

Moving workloads from Azure to AWS, why managed services (not VMs) are the hard part, AWS MGN/DMS tooling, egress and licensing reality, and a landing-zone-first cutover.

Effort
High
Est. timeline
~18 wks
Amazon Web Services model
Usage-based (compute + egress)
Open source
No
▶ Model your savings in the interactive calculator

Cross-cloud moves from Azure to AWS are driven by consolidation (often post-M&A), pricing/commitment optimization, breadth of AWS services, or strategy, rarely by the IaaS itself. Base compute rates are similar across hyperscalers, so savings come from rightsizing, committed-use discounts, and avoiding egress, not the move. Be clear on your motive first, it shapes everything. And know going in: lifting VMs is easy; untangling managed services is the real work.

The managed services carry the lock-in, not the VMs

Azure VM → EC2 is mechanical. The difficulty, and the lock-in, is in the managed services:

  • Azure SQL / SQL MI → RDS / Aurora (via DMS); Cosmos DB → DynamoDB (data-model rework).
  • Blob Storage → S3; Azure Files → EFS/FSx.
  • Azure Functions → Lambda; Service Bus / Event Grid → SQS/SNS/EventBridge.
  • Entra ID + Azure RBAC → IAM / IAM Identity Center (a different model, not a translation).
  • Bicep/ARM → CloudFormation, or keep Terraform and re-target the AWS provider.
  • AKS → EKS (re-platform manifests; mind ingress/identity differences).

Map each service before you move, this layer concentrates the re-architecture, testing, and surprises.

The service map is your real scope estimate

Draw the mapping table first, because it is the honest measure of scope. Azure SQL and SQL Managed Instance move to RDS or Aurora through DMS, and a matching engine keeps that clean. Blob Storage to S3 is close in shape, but re-express your lifecycle and access tiers rather than assuming they port. Cosmos DB to DynamoDB is the item to think hardest about: the partition-key and consistency models differ enough that it is a data-model exercise. Azure Functions map to Lambda with different triggers and packaging, Service Bus and Event Grid split across SQS, SNS, and EventBridge, and AKS to EKS is portable at the manifest level but the ingress and identity glue is not. Mark each row mechanical or re-architecture and assign an owner, so nothing surfaces as a surprise during cutover.

Watch the Microsoft licensing angle

A specific Azure→AWS wrinkle: Windows Server and SQL Server licensing. On Azure you may use Azure Hybrid Benefit or included licensing; on AWS you’ll run license-included instances or bring your own (BYOL) with the rules that entails. Model the Windows/SQL licensing cost on AWS explicitly, it can move the business case either way.

Stand up the landing zone before anything moves

Build the AWS landing zone first: AWS Organizations, accounts, networking (VPC, subnets, security groups), identity (IAM Identity Center), and guardrails. Establish connectivity (VPN or Direct Connect) back to Azure for replication. Inventory Azure resources tagged by application so you migrate coherent app groups.

Let MGN and DMS do the replication

  • Servers: AWS Application Migration Service (MGN), block-level replication of Azure VMs into EC2 with minimal downtime.
  • Databases: AWS DMS (full load + CDC) to keep targets current until cutover.
  • Storage: AzCopy / DataSync to move Blob → S3 (mind egress, see below).

Re-platform IaC rather than clicking it twice.

Rebuild the AWS side in code, since Bicep won’t carry across

Recreate the AWS environment as code from the outset rather than hand-building it in the console. Keep Terraform and re-target the AWS provider, or adopt CloudFormation, whichever fits your team, but treat the IaC baseline as a first-class deliverable. Done well it gives you a reviewable definition of production, a staging copy to pilot against, and a repeatable pattern so later app groups are cheaper than the first. Encode the IAM and IAM Identity Center model in the same code so identity is designed in, not retrofitted. Bicep and ARM do not carry across, so this is a genuine rebuild, and it is worth doing carefully once.

Watch the egress, it can dominate

Moving large datasets out of Azure incurs egress fees, a one-time cost that surprises teams mid-project. Factor egress into the plan and the business case, and validate that AWS committed-use/Savings Plans pricing actually beats your Azure spend for steady-state workloads.

One egress bill, plus the licensing math

Move the data so you pay egress once. Run the bulk Blob-to-S3 copy with AzCopy or DataSync while the source is still serving traffic, then reconcile a small delta during the freeze rather than recopying the whole store. Delete stale blobs and expired snapshots first, because you are billed to move every byte regardless of whether you still need it. Keep egress on its own line in the business case: it is a one-time migration cost, not part of the steady-state per-vCPU comparison, and folding it into the ongoing figure distorts both. When AWS Savings Plans pricing only just edges out your current Azure spend, a heavy egress bill plus the Windows and SQL licensing math can decide whether the move actually pays for itself, so model all three together in the calculator above.

Cut over app group by app group

  1. Replicate a pilot workload + database end to end and validate before scaling.
  2. Per app group: final delta sync via MGN/DMS, freeze source writes, cut over DNS (Route 53), validate apps, integrations, and cost.
  3. Run a hypercare window with Azure as fallback; keep replication until sign-off.

Acceptance bar: functional + integration parity, performance at/above baseline, and validated cost, not just “the VMs booted.”

Our take

Azure → AWS is straightforward for VMs and decidedly hard for managed services, that layer drives the re-architecture, lock-in, egress bill, and Windows/SQL licensing math. Lead with the landing zone, use MGN + DMS, model egress and steady-state cost honestly, and cut over app group by app group with Azure as fallback. Model your per-vCPU comparison in the calculator above, and treat the figures as illustrative until your pilot proves both function and cost.

Tooling & automation for this path

Use AWS Application Migration Service (MGN) for servers and AWS DMS for databases; rebuild IaC (CloudFormation/Terraform); sync Blob→S3; cut over via Route 53.

Primary references: official Amazon Web Services documentation ↗ and the Microsoft Azure documentation ↗ , always verify version-specific behavior against them before you migrate.

Frequently asked questions

What is the right tooling to replicate Azure VMs and databases into AWS?

AWS Application Migration Service (MGN) does block-level replication of your Azure VMs into EC2 with minimal downtime, and it keeps replicating until you are ready to cut over. For the data tier, AWS DMS runs a full load plus change data capture so RDS or Aurora stays current with the Azure source. Run MGN and DMS together so servers and databases reach cutover readiness at the same time.

How does Windows and SQL Server licensing change when I move from Azure to AWS?

On Azure you may be relying on Azure Hybrid Benefit or license-included pricing. On AWS you either run license-included instances or bring your own license under the applicable rules. Model the Windows and SQL licensing cost on AWS explicitly, because it can swing the business case in either direction and is easy to leave out of an early estimate.

Does Cosmos DB move cleanly to DynamoDB?

No, plan for data-model rework. The partition and consistency models differ, so treat Cosmos DB to DynamoDB as a re-architecture rather than a copy, and validate query patterns and throughput on a pilot before committing the whole dataset. Blob to S3 and Azure Files to EFS/FSx are closer, but still confirm your lifecycle and access patterns carry over.

How do I cut over DNS from Azure to AWS safely?

After a final delta sync through MGN and DMS, freeze writes on the Azure source, then move DNS to AWS using Route 53. Validate the application, its integrations, and its cost on AWS before releasing traffic fully, and keep Azure running as a fallback through a hypercare window until sign-off.

Model your 3-year cost

Pre-filled for Microsoft Azure → Amazon Web Services; adjust every figure with your own numbers. Estimates are illustrative, not vendor quotes, see our methodology.

Sized at 200 cloud vCPUs, cost is computed on this.
Stay on Microsoft Azure (3yr)
$384,000
Move to Amazon Web Services (3yr + migration)
$468,000
Projected extra cost
$84,000 (22%)
Payback period
-
Build a decision report from these numbers:

How this is licensed: Cloud pricing is usage-based and highly variable. Cross-cloud savings come mainly from rightsizing, committed-use / reserved discounts, and avoiding egress, base on-demand compute rates are similar across hyperscalers. Set $/vCPU to your negotiated or committed rates (and add storage/egress) for an accurate comparison.

Illustrative, editable figures, not vendor pricing (defaults reviewed May 2026).

Request a vendor-accurate Amazon Web Services quote

A guided builder that turns your estimates into a requirements report (RFQ) you can send to a vendor, partner, or distributor for a binding quote, then feed the real prices back into the calculator above. How our estimates work.

  1. 1Size it
  2. 2Requirements
  3. 3Your details
  4. 4Channels & export

How big is your Microsoft Azure estate?

Count the OS/database server VMs and their typical vCPU allocation. Licensing usually counts all vCPUs on each VM. Not sure? Enter rough numbers, the distributor confirms exact counts later.

200 cloud vCPUs
Default mid-size assumption (200 cloud vCPUs)