← Back to portfolio Migration Reference
Cloud Migration · Regulated Healthcare

On-Premises to Azure — A Migration Reference

How a regulated healthcare estate moves from on-premises to Azure — compute, storage, databases, and disaster recovery — written as a service-by-service mapping from AWS, for practitioners who know one cloud deeply and need the other quickly.

Source: vSphere · Physical · SQL Server Target: Azure Landing Zones Azure Migrate · DMS SQL MI · ANF · Blob ASR · Failover Groups HIPAA · HITRUST

What this is. A reference architecture and migration playbook — not a case study. It documents the target-state design, the tool selection, and the decision points for moving a regulated healthcare estate to Azure, framed as a translation from AWS because that mapping is the fastest path for an engineer who already thinks in one cloud's primitives.

PART A

The Bridge from AWS

Most of Azure has a clean AWS analogue. The value is knowing precisely where the analogy holds — and where it quietly stops.

Service mapping

ConcernAWSAzure
Server migrationMGNAzure Migrate: Migration and modernization
Database migrationDMSAzure Database Migration Service
Landing zoneLanding Zone AcceleratorAzure Landing Zones (CAF)
Account hierarchyOrganizations + OUsManagement Groups + Subscriptions
Compute / block storageEC2 / EBSVirtual Machines / Managed Disks
Managed SQL ServerRDS SQL Server Multi-AZSQL Managed Instance (zone-redundant)
Shared file storageEFS / FSxAzure Files / Azure NetApp Files
Object storage + tieringS3 + lifecycleBlob + Hot / Cool / Archive
Network hubTransit GatewayVirtual WAN or hub-spoke peering
Private circuitDirect ConnectExpressRoute
Network filteringSecurity Groups / NACLsNSGs / Azure Firewall
Secrets & keysSecrets Manager / KMSKey Vault (both roles)
Policy enforcementConfig + SCPsAzure Policy (far more central)
BackupAWS BackupRecovery Services Vault
Private service accessPrivateLink / VPC endpointsPrivate Endpoints / Private Link
IdentityIAMEntra ID + Azure RBAC
ObservabilityCloudWatchAzure Monitor + Log Analytics

Where the analogy stops

Four mappings above are lossy enough to change how you design:

  • Resource Groups have no AWS equivalent. Every resource lives in exactly one, and deleting the group cascades to everything inside it. This is a blast-radius boundary AWS simply doesn't have, and it has to be designed deliberately rather than inherited.
  • Azure Policy is an enforcement engine, not an audit tool. AWS Config reports drift; Azure Policy can Deny a non-compliant deployment outright at management-group scope. Guardrails that need custom tooling on AWS are native here.
  • The account boundary splits in two. On AWS the account is identity, billing, and blast radius at once. On Azure the subscription is billing and quota, while the Entra tenant is identity. Isolation strategy has to account for both.
  • SQL Managed Instance is VNet-injected. Unlike RDS, it lives inside your virtual network on a delegated subnet. That subnet has to be sized and designed before the first instance, and it cannot be changed afterward without a rebuild.
PART B

The Migration

Discovery, wave sequencing, and the three workload classes that need different treatment.

End-to-end flow

Migration pipeline
On-Premises Estate vSphere · Physical · SQL Server · SMB / NFS shares Azure Migrate Appliance Discovery · Assessment · Dependency mapping Wave Planning (dependency-derived) Migration & modernization · Database Migration Service Managed Instance Link · Vendor-installed fresh build Azure Landing Zone Management Groups · Hub-spoke · Policy · Private Endpoints Landing Targets VMs · SQL MI · Azure Files / ANF · Blob tiers DR: ASR · Failover Groups · RSV (GRS)

Discovery and wave sequencing

The Azure Migrate appliance runs on-premises against vCenter and performs discovery, right-sizing assessment, and — the part that actually matters — dependency mapping. That dependency graph is what defines the waves; wave membership should be derived from observed traffic, not from an org chart or an application list.

Collection window

Give discovery four to six weeks of continuous collection before finalizing waves. Shorter windows systematically miss month-end batch jobs, quarterly reporting runs, and interfaces that only fire on a schedule — which is exactly how a "self-contained" application turns out to have a dependency discovered at cutover.

Compute — three workload classes

1 · Replication-based lift
Servers you fully control. Agentless replication via Migration and modernization, test-failover into an isolated VNet, then cut over. The default path and the cheapest per server.
2 · Vendor-installed fresh build
Clinical applications where the vendor will not support a replicated image. The vendor installs into a prepared VM and data is migrated separately. Slower, coordinated on the vendor's calendar — and in healthcare this class is consistently larger than initial estimates.
3 · Modernize in place
Reserved for applications with a genuine business case for refactoring. Resist expanding this class mid-migration; scope creep here is what turns a four-wave plan into a nine-wave plan.

Storage — the decision that carries the most risk

WorkloadTargetWhy
General SMB sharesAzure Files PremiumNative SMB, AD-integrated, straightforward. The default.
Clinical imaging / PACSAzure NetApp FilesSustained low-latency reads at high concurrency. Azure Files will not hold up under PACS access patterns — ANF costs more and is the right answer anyway.
Archive & retentionBlob + lifecycle policyHot → Cool → Archive on a rule. Six-year retention becomes a policy, not a storage bill.
Phased cutoverAzure File SyncKeeps the on-prem server as a cache while the authoritative copy moves to Azure. Decouples the file migration from the server migration.
The expensive mistake

Sizing imaging storage on capacity rather than IOPS and latency. Capacity is the cheap dimension and the one everyone plans for. A radiologist waiting on study loads is the failure mode that ends a migration's credibility — and it surfaces after cutover, when moving the data again is at its most expensive.

Databases — three targets, not two

SQL Managed Instance — the default
Effectively 100% SQL Server compatible. Keeps SQL Agent jobs, cross-database queries, CLR, and Service Broker with little or no refactoring. VNet-injected, so no public exposure by default. This is the RDS SQL Server analogue.
Azure SQL Database — only with a modernization case
True PaaS, but the compatibility surface is narrower. Applications relying on Agent jobs or cross-database queries need real refactoring. Choose it deliberately, never as a lift target.
SQL Server on a VM — and you will need it
Clinical vendors routinely certify only specific SQL builds on a virtual machine they control. Running unsupported puts the support contract at risk on a patient-facing system. Plan for this class from the start rather than discovering it in wave two.

Migration method by database size

SizeMethodDowntime
< 200 GBNative backup to Blob, restore onto MIMaintenance window
200 GB – 1 TBDMS online mode — continuous replication, then cut overMinutes
> 1 TBManaged Instance Link (distributed availability group)Near-minimal
PART C

Landing Zone, DR & Governance

Where the workloads land, how they survive a region event, and how the estate proves it is compliant.

Landing zone topology

Hub-spoke with governance inheritance
Management Groups — Azure Policy inheritance HIPAA / HITRUST initiative · Deny effects · required tags Hub VNet ExpressRoute Gateway · Azure Firewall Private DNS Zones · Bastion ↕ ExpressRoute to on-premises Clinical Apps Spoke Application VMs Availability zones NSG per tier Data Spoke SQL MI (delegated subnet) Azure NetApp Files Private Endpoints Shared Services Domain controllers Key Vault · Monitoring Recovery Services Vault Paired Region — Disaster Recovery ASR replicated VMs · SQL MI auto-failover group Geo-redundant vault · pre-staged network

Spokes peer to the hub, never to each other. All egress and inter-spoke traffic transits Azure Firewall in the hub, which is where policy is enforced and logged — the same reason a Transit Gateway inspection VPC exists on AWS.

Disaster recovery

Tool selection — get this right

Azure Migrate for migration. Azure Site Recovery for DR. Microsoft is directing all new migration capability into Azure Migrate and explicitly not into Site Recovery. ASR still supplies the replication engine underneath some agent-based Migrate scenarios, but it is not the tool you select for a migration.

LayerMechanismProtects against
Virtual machinesASR replication to paired regionRegion loss
SQL Managed InstanceAuto-failover groupRegion loss, with automatic listener redirection
BackupsRecovery Services Vault, GRSDeletion, corruption, ransomware
Within-regionAvailability zonesDatacenter or rack failure
File dataANF cross-region replicationRegion loss for imaging and shares

Pre-stage the DR network. A failover that has to build VNets, NSGs, and DNS while the primary region is down is not a DR plan — it is an outage with extra steps.

HIPAA & governance

  • The BAA is contractual, not per-service. Microsoft's Business Associate Agreement covers in-scope Azure services through the Product Terms — no separate signature chase per service. Confirm which services are in scope before designing one in.
  • Azure Policy carries the compliance weight. Assign the built-in HIPAA/HITRUST initiative at management-group scope. Use Deny, not just Audit, for the controls that genuinely matter — public IP creation, unencrypted storage, missing tags.
  • Private Endpoints everywhere. PaaS services default to public endpoints. In a PHI environment, every one gets a Private Endpoint with public network access disabled, and Private DNS Zones linked to the hub.
  • Customer-managed keys in Key Vault for storage, disks, and SQL MI where the risk assessment calls for control over the key lifecycle rather than platform-managed encryption.
  • Defender for Cloud as the evidence surface — its regulatory compliance dashboard maps live posture to HIPAA controls, which is what turns an audit into a report rather than a project.
PART D

Field Notes

The differences that cost time if you arrive from AWS expecting symmetry.

What bites AWS practitioners

  1. NSGs evaluate at both subnet and NIC. Two rule sets, both must permit the traffic. A rule that looks correct at one level is silently overridden at the other — a reliable multi-hour debugging session on the first encounter.
  2. vCPU quota is per subscription, per region, per VM family. Not a soft global limit. A wave stops dead when a family runs out. Request increases weeks ahead, per family, per region.
  3. SQL MI's first deployment into a new subnet takes hours, not minutes — the platform is standing up a dedicated virtual cluster. Schedule it as its own task well ahead of any cutover window it feeds.
  4. The delegated subnet for SQL MI is immutable. Size it for the eventual instance count on day one; changing it later means rebuilding.
  5. Resource Group deletion cascades. There is no AWS equivalent to this blast radius. Group by lifecycle, not by convenience, and lock production groups with CanNotDelete.
  6. Terraform's azurerm provider replaces where aws updates in place. Attributes that are an in-place change on AWS force resource replacement on Azure. Read every plan carefully — a routine tag change should never be recreating a VM.
Guardrail parity with AWS

The account-assertion pattern — verifying the authenticated identity matches the intended target before any apply — translates directly. On AWS it is a Terraform check block against the caller identity; on Azure the equivalent guarantee is stronger, because a management-group Deny policy enforces it at the platform rather than inside the tool that happens to be running.