Azure Migration

Azure Migrate Discovery & Assessment: From Appliance Deployment to Your First Right-Sizing Report

Someone hands you a datacentre of 400 virtual machines and says “move it to Azure — and tell me what it’ll cost.” You can’t size what you can’t see, and you can’t quote a price for VMs whose CPU, RAM, disk and network you’re only guessing at. Azure Migrate exists for exactly this moment: it is Azure’s free hub for discovering your existing servers, databases and web apps, assessing their readiness and right-size for Azure, mapping the dependencies between them so you don’t migrate a database without the app that needs it, and finally migrating them. This article covers the first three — discover, assess, map — because a migration that skips them is how teams end up running an over-provisioned, broken-up estate that costs more in the cloud than it did on-premises.

The thing that confuses newcomers is that “Azure Migrate” is not one tool but a project (a container in your subscription) plus a small appliance (a lightweight VM you run in your own datacentre) that quietly collects inventory and performance data and ships it to that project. The appliance watches your servers for days or weeks, learns their real utilisation, and feeds an assessment engine that says: this VM should become a Standard_D4s_v5, this disk should be Premium SSD, here’s the monthly bill, here’s what’s not ready to move. Get those moving parts straight and the rest is clicking through a wizard with confidence.

By the end you will know what each piece does, the difference between as-on-premises sizing and performance-based right-sizing (the most valuable feature and the one beginners ignore), how dependency mapping turns a flat server list into application groups, and how to read the readiness, sizing and cost columns of your first assessment without being misled — and you’ll have walked the appliance-to-report flow end to end.

What problem this solves

Migration projects fail in the planning phase, not the cutover. The classic failure is lift-and-shift at the same size: someone reads an on-premises VM as 8 vCPU / 32 GB because that’s how it was provisioned in 2018 and picks the matching Azure size — but the VM averages 9% CPU and 6 GB working set, massively over-provisioned as on-prem VMs almost always are. Migrate it as-is and you pay for a D8s that should have been a D2s, multiplied across hundreds of servers; the bill lands, finance panics, and the cloud gets blamed for being “expensive” when the real fault was sizing from the spec sheet instead of the telemetry.

The second failure is migrating servers in isolation. You move the web tier on Saturday, leave its database for next sprint, and Monday the app is down because it’s now reaching across a half-built VPN to a database 200 ms away. Servers are a web of dependencies — app→DB, app→cache, app→domain controller — and you must migrate a whole application group together, in a planned wave, or accept an outage.

The third is discovering that something can’t move only after you’ve started — an OS too old to support, a disk too large for the target tier, an unsupported boot type. These readiness problems are a five-minute fix to the plan if the assessment surfaces them, and a war-room if you hit them mid-cutover. Azure Migrate surfaces all three classes — wrong size, hidden dependency, blocked readiness — before you touch production, for free. Who hits this: anyone moving a VMware or Hyper-V estate, physical servers, or even AWS/GCP VMs into Azure, at any scale.

The planning failure What it looks like in production What Azure Migrate gives you instead
Size from the on-prem spec, not usage A fleet of over-provisioned VMs; the bill is 2–3× what it should be Performance-based right-sizing from collected CPU/RAM/disk telemetry
Migrate servers one at a time App breaks Monday because its DB is still on-prem Dependency mapping → migrate whole application groups together
Find blockers during cutover A war-room when an OS or disk turns out unsupported Readiness column flags every blocker before you move
Guess the Azure bill Finance surprise; cloud blamed for being expensive A monthly cost estimate per VM and for the whole project

Learning objectives

By the end of this article you can:

Prerequisites & where this fits

You should be comfortable with the Azure basics: a subscription and resource group (the project lives in one — see the Azure resource hierarchy) and running az in Cloud Shell. On the source side you need access to the hypervisor — a vCenter Server account for VMware, the host(s)/SCVMM for Hyper-V, or per-machine credentials for physical/other-cloud servers. You deploy one appliance VM in that environment with outbound internet (or a private-endpoint path) to Azure; basic discovery needs no agents on the servers.

This sits at the very front of the migration journey, upstream of everything — discovery and assessment come before you provision a single Azure VM. The output feeds VM sizing, so understanding Azure VM series families and managed disk types makes the recommendations legible. The actual replication and cutover (which shares an appliance lineage with Azure Site Recovery) is the next phase, out of scope here; picking the destination region is its own decision — see Azure regions and availability zones.

A discovery-and-assessment engagement pulls in several teams: the cloud/platform team (needs Contributor + a few resource-provider rights to create the project), the virtualisation/infra team (provides the read-only vCenter/Hyper-V account and hosts the appliance VM), the network team (opens outbound TCP 443 or the private-endpoint path), and the application owners (supply optional guest credentials and validate the dependency map into real application groups). Knowing who owns which layer up front stops a firewall rule or a missing role from stalling the project on day one.

Core concepts

Four mental models make every screen in the portal obvious.

Azure Migrate is a project, and the project is a hub. The Azure Migrate project is a resource in your subscription that acts as a container and dashboard. Into it plug tools — Microsoft’s own discovery/assessment/migration tooling, plus first-party database and web-app tools and a few ISV partners. Everything the appliance collects lands in the project; every assessment reads from it. You create the project once per geography you’re assessing into and point all your appliances at it.

The appliance is your eyes inside the datacentre. The Azure Migrate appliance is a lightweight VM you deploy on-premises (OVA for VMware, VHD for Hyper-V, a PowerShell installer for physical servers). It connects to vCenter / Hyper-V / the servers with a read-only account, continuously pulls configuration data (cores, memory, disks, NICs, OS) and performance data (CPU %, memory, disk IOPS/throughput, network), and securely sends it to your project. It is agentless for this — nothing is installed on the guest VMs. It does not move any workload; it only observes.

Discovery, assessment and dependency mapping are three different verbs. Discovery builds an inventory — the servers, their specs and live utilisation. Assessment is an analysis you run on demand against that inventory: given these servers and this target region/pricing, what Azure size, disk, readiness and cost? You can run many assessments from one discovery, each with different assumptions. Dependency mapping discovers the connections between servers so you can group them into applications. Discovery is continuous; assessment is a point-in-time report you generate and re-generate as data accrues.

Sizing is either “same as on-prem” or “based on what it actually uses.” As-on-premises maps the allocated cores/RAM to the nearest Azure size — fast, conservative, usually over-provisioned. Performance-based sizes from collected utilisation (a chosen percentile × a comfort factor for headroom) and recommends the smallest size that fits. Performance-based is where the savings live, but needs enough collection time to be trustworthy — and that trust is quantified by a confidence rating of 1 to 5 stars, driven by how much performance data was collected over the assessment’s time range. A day of data against a 1-month window? Low stars, a guess. Several weeks? Five stars, trust it. A low-star performance-based report is not a finding — it’s a request for more time.

The vocabulary in one table

Pin down every moving part before the deep sections. The glossary repeats these for lookup; this is the mental model side by side:

Concept One-line definition Where it lives Why it matters
Migrate project The hub/container + dashboard Your subscription / resource group Everything plugs into it
Appliance On-prem VM that collects inventory + perf Your datacentre (OVA/VHD/script) Your eyes inside the estate; agentless
Discovery The inventory the appliance builds The project What everything else reads from
Assessment An on-demand sizing/cost/readiness report Run from the project The artefact you deliver
Dependency mapping The connections between servers The project (agentless/agent-based) Turns servers into application groups
As-on-premises sizing Map allocated specs to Azure Assessment setting Fast, safe, usually over-sized
Performance-based sizing Size from real utilisation Assessment setting Where right-sizing savings live
Comfort factor Headroom multiplier on utilisation Assessment setting Buffer for spikes/growth
Confidence rating 1–5 stars on data sufficiency On the assessment How much to trust the sizing
Readiness Ready / conditional / not-ready verdict Assessment per-server Flags blockers before you move

Discovery: getting the appliance seeing your estate

Discovery is the foundation — no inventory, no assessment. The first decision is which appliance you deploy, because the collection method differs by source environment. Pick the row that matches your datacentre:

Source environment Appliance form How it discovers Account it needs Agentless?
VMware vSphere OVA template (one appliance) Talks to vCenter Server API Read-only vCenter account Yes (inventory + perf + agentless deps)
Hyper-V VHD template Talks to Hyper-V host / cluster (WinRM) Admin on the host(s) Yes (inventory + perf)
Physical / bare-metal PowerShell installer (Windows) Connects to each server (SSH/WinRM) Per-server credentials Yes (inventory + perf)
AWS / GCP VMs Treated as physical Per-server credentials Per-server credentials Yes

One VMware appliance scales to a large number of servers per vCenter; very large estates run several pointed at one project. It auto-updates its own components, so you deploy once and it stays current.

What the appliance actually collects

The appliance collects on two cadences, and the difference sets your expectations for when an assessment becomes trustworthy. Configuration/inventory (cores, RAM, disks and sizes, NICs, OS, boot type — used for readiness and as-on-prem sizing) is refreshed roughly hourly, so it shows up fast, in minutes to an hour. Performance counters (CPU %, memory, disk IOPS/throughput, network — used for performance-based right-sizing) are sampled continuously and rolled up, so good right-sizing needs days to weeks of accrued history. With guest credentials the appliance also gathers optional software inventory, SQL/web-app discovery (for those assessment types) and agentless dependencies. The beginner trap: deploy the appliance and immediately run a performance-based assessment and you’ll get a low confidence rating, because there’s barely any utilisation history. Plan for a collection window before you trust right-sizing.

Prerequisites and the network path

The appliance has to reach Azure — for most setups plain outbound HTTPS on TCP 443; locked-down networks route it through a private endpoint instead. The essentials:

Requirement VMware Hyper-V Physical
Outbound to Azure TCP 443 to Azure Migrate + storage URLs (or private endpoint) Same Same
Source connection vCenter API (usually 443) WinRM 5985/5986 to hosts SSH 22 (Linux) / WinRM 5985/5986 (Windows)
Appliance OS/resources Windows Server VM, a few vCPU + ~16 GB RAM Same Same (or installed on a provided server)
Account privilege Read-only vCenter role Admin on Hyper-V host(s) Per-server credentials (least privilege)
Project registration Appliance key from the project Same Same

Two gotchas that stall first-time deployments: a proxy without the right allow-list silently blocks registration (the appliance configuration manager surfaces a connectivity error you must read), and a vCenter account with too few privileges discovers inventory but can’t collect performance data for some objects, quietly capping your confidence rating. Grant the documented read-only role, not a hand-rolled subset.

Creating the project and registering the appliance

You create the project in the portal (Azure Migrate → create project, choosing subscription, resource group, name and the metadata geography), or as code — a minimal Bicep that stamps the resource:

// A Migrate project is a simple container resource; tools + appliances attach to it.
resource migrateProject 'Microsoft.Migrate/migrateProjects@2020-05-01' = {
  name: 'migrate-shop-prod'
  location: 'centralindia'   // where project metadata is stored
  properties: {}
}

The appliance itself is not an ARM/Bicep resource — you download the OVA/VHD or run the installer, then bind it to the project with a registration key from the portal. After it boots, its local configuration manager (a web app on the appliance) is where you supply source credentials and start discovery. To confirm the project exists, use az:

# Confirm the Migrate project exists in the resource group
az resource list --resource-group rg-migrate-prod \
  --resource-type Microsoft.Migrate/migrateProjects \
  --query "[].{name:name, location:location}" -o table

Discovery health then lives in the portal: Azure Migrate → Servers, databases and web apps → Discovery shows the appliance status (last-seen heartbeat) and a rising server count. When that count matches your datacentre and the heartbeat is green, discovery is working — let it gather performance data.

Assessment: turning inventory into a right-sizing report

An assessment is an on-demand report you create against a group of discovered servers — and you can run several from one discovery (a conservative as-on-prem one, a performance-based one for the savings story) and compare. The assessment type sets the target: Azure VM (IaaS lift-and-shift, the default), Azure VMware Solution (re-host onto AVS nodes), Azure SQL (SQL instances → SQL MI/DB/VM), or Azure App Service (ASP.NET/Java web apps).

We’ll focus on the Azure VM assessment — the one nearly everyone runs first. Its behaviour is governed by assessment properties you choose at creation — the knobs that decide whether the report is realistic or nonsense:

Property What it controls Common choices Beginner default Effect on result
Sizing criteria Spec-based vs usage-based As-on-premises / Performance-based Performance-based The whole savings story
Performance history Time range of perf data used Day / Week / Month Month (once you have data) Longer = more representative
Percentile utilisation Which percentile of usage to size to 50 / 90 / 95 / 99 95th Higher = more headroom, bigger size
Comfort factor Multiplier on observed usage 1.0–N (e.g. 1.3) 1.3 Buffer for spikes/growth
Target region Where you’re migrating Any Azure region Your chosen region Drives price + size availability
Pricing model PAYG vs reservations Pay-as-you-go / 1yr / 3yr RI PAYG to start Reservations cut cost 30–60%
Azure Hybrid Benefit Reuse Windows/SQL licences On / Off On if you own licences Big cost lever for Windows estates
VM series Which families are eligible D-series, E-series, etc. All current gen Constrains the recommended size
Storage type Target disk tier Premium / Standard SSD / auto Premium for prod Disk cost + performance
Currency Report currency INR / USD / etc. Your billing currency Cosmetic but get it right

As-on-premises vs performance-based — the decision that defines your report

This is the fork that matters most. As-on-premises sizing reads each VM’s allocated cores/RAM and picks the nearest Azure size, ignoring utilisation — fast, never under-sizes, but (because on-prem VMs are chronically over-provisioned) over-sized and over-priced; use it only as a conservative bound or when you have no performance data. Performance-based sizing reads collected utilisation, takes your percentile (say 95th) × comfort factor (say 1.3), and recommends the smallest size that fits. An 8-vCPU VM averaging 9% CPU with 95th-percentile at 18% might size down to 2 vCPU — real money, repeated across the fleet. The catch: it’s only as good as the data — short collection or a bad percentile and the recommendation is unsafe.

Dimension As-on-premises Performance-based
Sizes from Allocated cores/RAM (the spec) Collected CPU/RAM/disk/network
Collection time needed None Days to weeks for high confidence
Typical result Over-provisioned, costs more Right-sized, often much cheaper
Risk Wastes money, never under-sizes Under-sizes if data is thin or percentile too low
Confidence rating Always high (no perf data needed) 1–5 stars based on data collected
When to use No perf data; ultra-conservative bound The real plan, once data has accrued
Knobs that tune it None Percentile, comfort factor, history range

Reading the assessment report without being fooled

Run the assessment and you get a summary (readiness donut, monthly cost, confidence stars) plus a per-server table. The columns that matter, and the trap in each:

Report element What it tells you The trap What to actually do
Azure readiness Ready / Conditionally ready / Not ready / Unknown “Unknown” often means missing data, not a blocker Fix discovery (creds/perf), then re-assess
Recommended Azure VM size The size the engine picked Only as good as the sizing criteria + confidence Check the confidence stars before trusting it
Monthly cost estimate Compute + storage per VM and total Defaults may be PAYG, no Hybrid Benefit Set pricing model + AHB to match reality
Confidence rating (stars) How much perf data backed the sizing Low stars on a performance-based report = guess Collect longer; don’t ship a 1-star report
Storage / disk recommendation Target disk tier + monthly disk cost Premium everywhere inflates cost Right-tier non-critical disks to Standard SSD
Readiness issues / messages The reason a server isn’t ready Easy to skim past Read each — it’s your remediation list

Three reading rules save the most pain: a low-confidence performance-based assessment is a “come back later,” not a result; “not ready” almost always has a fixable reason in the issues column (unsupported OS, an over-cap disk, an unsupported boot type) that becomes a one-line plan change; and the cost is a PAYG/list estimate unless you said otherwise — turn on Hybrid Benefit and model reservations before you quote, or you’ll over-state the bill and lose the savings argument.

Dependency mapping: from a server list to application groups

A flat list of 400 servers doesn’t tell you what to migrate together. Dependency mapping observes the actual TCP connections between servers — which talks to which, on what port — so you can draw the boundary around an application (web → app → DB → cache → DC) and migrate the whole group in one wave. Skip it and you migrate a web tier whose database is still on-prem, and the app breaks. Two flavours:

Mapping mode How it works Setup Best for Limitation
Agentless Appliance polls each server (with guest creds) for active connections, periodically Provide guest OS credentials; no install Quick, broad mapping across many servers Point-in-time polling — may miss short-lived connections
Agent-based An agent on each server streams connection data continuously Install dependency agents (and a workspace) Deep, continuous, per-process detail on key apps Agent rollout effort; doesn’t scale to the whole estate easily

The pragmatic pattern: use agentless broadly to draw rough application boundaries, then reach for agent-based only on the few business-critical apps that need continuous, per-process certainty before a risky cutover. Either way you turn the observed connections into groups in the portal and assess each as a unit, so cost and readiness come out per-application — which is how a migration is sequenced into waves. Two notes: agentless mapping needs the same guest credentials as software inventory, and dependency data accrues over time — a few hours shows the busy connections; a week catches the once-a-night batch job that would otherwise surprise you at cutover.

Architecture at a glance

The flow runs strictly left to right. In your on-premises datacentre, the lightweight Azure Migrate appliance connects with a read-only account to vCenter (or Hyper-V hosts, or each physical server) and continuously pulls configuration/inventory and performance counters — plus, with guest credentials, software inventory and agentless dependency data. It touches no workload; it only observes, then ships everything over outbound TCP 443 (or a private-endpoint path) into your Azure Migrate project — the hub holding the discovered inventory. From there you run an assessment: the engine reads the collected specs and utilisation, applies your sizing criteria, and emits the right-sizing report (recommended VM size, disk tier, readiness, monthly cost, a 1–5-star confidence rating) alongside the dependency map that groups servers into applications. The numbered badges mark the four places a first project most often goes wrong: the appliance’s outbound path, the source credentials, the collection-time-versus-confidence trap, and the pricing assumptions baked into the cost number.

Left-to-right Azure Migrate architecture: an on-premises datacentre where the appliance connects with a read-only account to vCenter, Hyper-V and physical servers and collects configuration, performance and dependency data; the appliance ships it over outbound TCP 443 (or a private endpoint) into an Azure Migrate project hub; and an assessment engine produces a right-sizing report (recommended VM size, disk tier, readiness, monthly cost, 1-to-5-star confidence) plus a dependency map grouping servers into applications. Numbered badges flag the outbound path, source-credential privilege, the collection-time-versus-confidence trap, and the cost estimate's pricing assumptions.

Real-world scenario

Meridian Logistics, a fictional but realistic mid-market freight company, ran 180 VMs on VMware vSphere: a customer portal, a fleet-tracking app, a data-warehouse, internal line-of-business apps, three domain controllers and the usual file servers. Their CFO had approved “a move to Azure” with a hard expectation: it must not cost more than the datacentre. The infra lead, new to Azure Migrate, made every classic beginner move first, then corrected them — which is why the story is instructive.

He deployed the VMware appliance OVA, pointed it at vCenter with a fresh read-only account, and within an hour saw 180 servers appear. Elated, he immediately ran a performance-based assessment for Central India at PAYG pricing, and got an estimate of roughly ₹14.8 lakh/monthhigher than their datacentre run-rate. Three mistakes were buried in that number. The assessment carried a 2-star confidence rating (barely an hour of performance data, so the engine fell back to conservative, over-large sizes); Azure Hybrid Benefit was off, so every Windows VM was priced with a licence the company already owned; and pricing was PAYG with no reservations modelled.

He let the appliance collect for three weeks, then re-ran the same servers with corrected assumptions: history Month, 95th percentile, comfort factor 1.3, Hybrid Benefit on, 3-year reserved instances. Confidence climbed to 5 stars, and the right-sizing told a different story: dozens of 8-vCPU VMs averaging under 10% CPU collapsed to 2- and 4-vCPU sizes, and the estimate landed near ₹6.9 lakh/month — comfortably under the datacentre. The over-statement had been almost entirely bad assumptions on thin data, not a real cost problem.

Dependency mapping then changed the sequence. Agentless mapping revealed the portal reached not only its SQL database but also a shared authentication service and a nightly batch host nobody had documented — connections that only surfaced after a week of polling caught the 02:00 job. Had they migrated the portal alone on the planned weekend, Monday’s batch run would have failed reaching back on-prem. Instead they grouped all four into one application group and cut them over as a single wave, with no surprise outage. The lesson, and the one this article exists to teach: the appliance is cheap and fast, but the numbers only become trustworthy after collection time and correct pricing — and the plan only becomes safe after you’ve seen the dependencies.

Advantages and disadvantages

Advantages Disadvantages / limits
Free discovery and assessment (you pay only for what you migrate) Trustworthy right-sizing needs days–weeks of collection, not minutes
Agentless inventory + performance — nothing on the guest VMs Some depth (per-process deps, certain perf) needs guest creds / agents
Performance-based right-sizing turns over-provisioned VMs into real savings A low-confidence report misleads if you ship it too early
One project hub for VMware, Hyper-V, physical, even AWS/GCP First-party PaaS/web-app discovery has prerequisites beyond basic inventory
Dependency mapping groups servers into safe migration waves Agentless deps are point-in-time polls — can miss short-lived connections
Cost estimates support Hybrid Benefit + reservations modelling Cost is an estimate at the assumptions you set — not a binding quote
Re-run assessments cheaply as data and assumptions change Appliance + network path setup has real prerequisites (ports, privileges)

The advantages dominate when you have time to plan; the disadvantages bite when you rush — deploy on Monday, ship a performance-based report on Tuesday, and you’ve handed your CFO a 2-star guess. The discipline is simple: let it collect, set the assumptions honestly, and read the confidence rating before you believe the size.

Hands-on lab

You don’t need a datacentre to learn the workflow. This lab creates a project, deploys a tiny stand-in source VM, and walks the assessment flow — free-tier-friendly (a B1s VM, deleted at the end). Run in Cloud Shell (Bash).

Step 1 — Variables and resource group.

RG=rg-migrate-lab
LOC=centralindia
PROJ=migrate-lab-$RANDOM
az group create -n $RG -l $LOC -o table

Step 2 — Create an Azure Migrate project (the hub).

# Create the project via a tiny inline Bicep (the portal is the usual path)
az deployment group create -g $RG --template-uri \
  https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.migrate/migrate-project/azuredeploy.json \
  --parameters migrateProjectName=$PROJ location=$LOC -o table 2>/dev/null \
  || echo "If the quickstart URL is unavailable, create the project in the portal: Azure Migrate -> Create project."

Expected: a project resource named like migrate-lab-1234 in $RG. Confirm it:

az resource list -g $RG --resource-type Microsoft.Migrate/migrateProjects \
  --query "[].{name:name, location:location}" -o table

Step 3 — Deploy a stand-in “source” VM. (In a real engagement the appliance discovers existing servers; here we just want one VM whose size we can reason about.)

az vm create -n vm-legacy-sim -g $RG --image Ubuntu2204 \
  --size Standard_B1s --admin-username azureuser --generate-ssh-keys -o table

Step 4 — Inspect the VM’s “spec sheet” — what as-on-premises sizing reads.

az vm show -n vm-legacy-sim -g $RG --query "hardwareProfile.vmSize" -o tsv
az vm list-sizes -l $LOC --query "[?name=='Standard_B1s'].{cores:numberOfCores, ramMB:memoryInMb}" -o table

This allocated size is what an as-on-premises assessment maps directly. Performance-based sizing would instead read real utilisation over weeks and likely recommend something smaller if it idles.

Step 5 — Read the utilisation performance-based sizing would use.

VMID=$(az vm show -n vm-legacy-sim -g $RG --query id -o tsv)
az monitor metrics list --resource "$VMID" --metric "Percentage CPU" \
  --interval PT1M --aggregation Average Maximum -o table | head -20

A nearly-idle VM is exactly the over-provisioned pattern right-sizing exploits: low average and 95th-percentile CPU → a smaller recommended size.

Step 6 — Tour the real assessment flow. Open Azure Migrate, select $PROJ, and walk Servers, databases and web apps. With no appliance you won’t have discovered servers, but you can open the Assessment creation flow and read every property — sizing criteria, percentile, comfort factor, target region, pricing model, Hybrid Benefit. That muscle memory is the point.

Validation. You created a project and saw the gap between a VM’s allocated spec (what as-on-premises reads) and its utilisation (what performance-based reads) — the gap right-sizing exploits.

Cleanup (avoid lingering charges).

az group delete -n $RG --yes --no-wait

Cost note. A B1s is a few rupees per hour; an hour of this lab is under ₹50, and deleting the group stops everything. The Migrate project itself is free.

Common mistakes & troubleshooting

The failure modes that stall first-time Azure Migrate projects — symptom, root cause, how to confirm, and the fix:

# Symptom Root cause Confirm (portal / command) Fix
1 Appliance shows “not connected” / no heartbeat Outbound 443 blocked, or proxy not allow-listed Appliance configuration manager → connectivity check; Discovery blade last-seen Open 443 to Azure Migrate + storage URLs, or set the proxy; consider private endpoint
2 Servers discovered but no performance data vCenter/host account under-privileged Discovery shows config but perf columns blank; confidence stays low Grant the documented read-only vCenter role (or host admin)
3 Performance-based assessment is 1–2 stars Not enough collection time Assessment summary shows low confidence rating Wait days–weeks; re-run the assessment after data accrues
4 Recommended sizes look too big Sizing set to as-on-premises, or percentile/comfort too high Open assessment properties Switch to performance-based; 95th percentile, comfort ~1.3
5 Monthly cost looks far too high AHB off and/or PAYG pricing Assessment properties → pricing/AHB Turn on Azure Hybrid Benefit; model reserved instances
6 Many servers marked “not ready” Unsupported OS, oversized disk, unsupported boot type Per-server readiness issues column Read each message; plan remediation (OS upgrade, disk split, Gen change)
7 Readiness shows “unknown” for many VMs Missing/insufficient data, not a real blocker Readiness reason = data/collection Fix discovery (creds, time), then re-assess
8 Dependency map is empty / thin Guest credentials not provided, or not enough polling time Dependencies view sparse Add guest creds for agentless; let it poll longer; agent-based for depth
9 Stale numbers in the report Assessment is a point-in-time snapshot Assessment “last assessed” date is old Recalculate the assessment to pull latest discovery
10 Project can’t be created / wrong place Missing RBAC or unregistered resource provider az provider show -n Microsoft.Migrate not Registered; insufficient role az provider register -n Microsoft.Migrate; get Contributor on the RG

The three that burn the most hours: #2 (under-privileged account → no perf data → permanently low confidence) is silent — fix the role and the stars climb; #5 (high cost from AHB-off/PAYG) has sunk more migration business cases than any technical blocker; and #3 vs #4 are opposite errors people conflate — a too-big size is a sizing-criteria problem (fixable now), while low confidence is a time problem (only fixable by waiting).

Best practices

Security notes

Cost & sizing

The good news dominates: Azure Migrate discovery and assessment are free — the project, appliance software, discovery, assessments and dependency mapping all cost nothing. The costs are indirect and modest, and the output is what controls your real Azure bill later:

Cost element What you pay Rough magnitude Notes
Migrate project + assessment Free ₹0 Discovery, assessment, dependency mapping included
Appliance VM (on-prem) Your own datacentre resources Existing capacity A few vCPU + ~16 GB RAM on your hypervisor
Egress to Azure Outbound bandwidth for telemetry Small Inventory/perf metadata, not bulk data
Agent-based deps (optional) Log Analytics workspace ingestion Per-GB if used Only if you choose agent-based mapping
The migrated estate (downstream) The Azure VMs/disks you provision The whole bill This is what right-sizing controls

The leverage is entirely in the assessment’s assumptions. Two settings move the downstream bill most: Azure Hybrid Benefit (reusing Windows/SQL licences you own cuts Windows compute ~40%) and reserved instances (1- or 3-year commitments cut 30–60% versus PAYG). A performance-based, 5-star assessment with both modelled is the difference between a migration that saves money and one finance cancels. Right-tiering disks and acting on the down-sizing recommendations are the next levers — free, because you choose them before provisioning anything. To keep right-sizing after cutover, pair this with Azure Advisor’s cost recommendations.

Interview & exam questions

1. What are the four core capabilities of Azure Migrate? Discover (inventory servers/DBs/apps), assess (size, readiness and cost for Azure), map dependencies (connections between servers), and migrate (replicate and cut over). Discovery and assessment are free.

2. What is the Azure Migrate appliance and where does it run? A lightweight VM deployed in your own datacentre (OVA for VMware, VHD for Hyper-V, script for physical) that connects with a read-only account, agentlessly collects configuration and performance data, and sends it to your project over TCP 443. It observes only — it doesn’t move workloads.

3. Explain as-on-premises vs performance-based sizing. As-on-premises maps the VM’s allocated cores/RAM to the nearest Azure size — fast, never under-sizes, but usually over-provisioned. Performance-based sizes from collected utilisation (a percentile × comfort factor) and recommends the smallest size that fits — where the savings come from, but only trustworthy with enough collection time.

4. What does the assessment’s confidence rating mean? A 1–5-star score on a performance-based assessment reflecting how much performance data was collected over its time range. Low stars mean thin data and an unreliable size — the fix is to collect longer and re-run, not to ship the report.

5. Why do dependency mapping before migrating? Because servers depend on each other (app→DB, app→auth, app→batch), and migrating one without its dependencies breaks the application. Mapping reveals the connections so you group servers into application groups and migrate each as a planned wave.

6. Agentless vs agent-based dependency mapping? Agentless polls each server (using guest credentials) periodically — quick and broad but point-in-time, so it can miss short-lived connections. Agent-based streams connection data continuously with per-process detail — deeper but more rollout effort; reserve it for critical apps.

7. An assessment estimates a higher cost than the on-prem datacentre. Name three things to check. (1) Confidence rating — thin data forces conservative, larger sizes; (2) Azure Hybrid Benefit off, so Windows VMs are priced with licences you already own; (3) PAYG pricing with no reservations modelled. Fix all three and the estimate usually drops sharply.

8. A server is marked “not ready.” What do you do? Read the readiness issues column for the reason — unsupported OS, a disk over the target tier’s size cap, an unsupported boot/generation type — and remediate in the plan (upgrade the OS, split the disk, change the VM generation). “Not ready” is almost always a fixable, documented reason, not a dead end.

9. Servers appear but the performance columns are blank. Why? The source account is under-privileged to read performance counters, so discovery sees configuration but not utilisation and confidence stays pinned low. Grant the documented read-only role and the data — and the stars — fill in.

10. What does the appliance need on the network, and what’s the private alternative? Outbound TCP 443 to Azure Migrate and storage endpoints, plus the source connection (vCenter API, or WinRM/SSH). For locked-down environments, route it over a private endpoint instead of the public internet.

11. Can Azure Migrate assess databases and web apps, not just VMs? Yes — with guest credentials it discovers SQL instances/databases and ASP.NET/Java web apps and runs Azure SQL and Azure App Service assessments, recommending PaaS targets (SQL MI/DB, App Service) rather than just lift-and-shift VMs.

12. Which exams cover this? Discovery/assessment maps to AZ-305 (Designing Infrastructure Solutions) for the migration-design objectives, AZ-104 (Administrator) for the operational mechanics (appliance, ports, sizing), and AZ-900 for the “how do I plan a migration” fundamentals. The right-sizing and TCO angle also touches FinOps fundamentals.

Quick check

  1. You deploy the appliance and 200 servers appear within the hour. Is it safe to run a performance-based assessment immediately and trust the sizes? Why or why not?
  2. An assessment shows a recommended size much larger than you expected for a clearly idle VM. What’s the single most likely setting to check?
  3. What does a 2-star confidence rating on a performance-based assessment actually tell you to do?
  4. Why must you map dependencies before deciding the migration order?
  5. Your cost estimate looks far too high for a Windows-heavy estate. Name the two pricing settings most likely responsible.

Answers

  1. No. Inventory appears in minutes, but performance-based sizing needs days to weeks of collected utilisation. Run it now and you’ll get a low confidence rating and conservative, over-large sizes. Let it collect first.
  2. The sizing criteria — it’s probably set to as-on-premises (which trusts the allocated spec and ignores that the VM is idle), or the percentile/comfort factor is too high. Switch to performance-based with a 95th percentile and ~1.3 comfort factor.
  3. It tells you the appliance didn’t collect enough performance data for the assessment’s time range, so the sizing is unreliable. The action is to wait for more collection and recalculate the assessment, not to ship it.
  4. Because servers depend on each other (app→DB, app→auth, app→batch). Migrating one without its dependencies breaks the application. Dependency mapping reveals the connections so you migrate whole application groups together.
  5. Azure Hybrid Benefit is off (so Windows VMs are priced with licences you already own) and pricing is PAYG with no reserved instances modelled. Turn AHB on and model reservations and the estimate typically drops sharply.

Glossary

Next steps

You can now stand up a Migrate project, deploy the appliance, run a high-confidence assessment, and read a defensible right-sizing report. Build outward:

AzureAzure MigrateMigrationAssessmentDiscoveryDependency MappingRight-SizingTCO
Need this built for real?

Vinod is a Senior Cloud Architect (22+ yrs) — available for Azure / AWS / GCP architecture, landing zones, and migrations.

Work with me

Comments

Keep Reading