๐ What's New
- Size against p90, p99 or a per-row policy โ each VM can be sized on a statistic chosen from its ENV, Criticality and Workload, and a safety veto holds a downsize when the VM's own Peak or p95 says it is saturating, marking the row in a Review Flag column. Criticality is a new optional column.
- Sizing confidence and a scale-out advisory โ the input check says how well your data supports a sizing, and the App Portfolio flags VMs with a low median and a high peak as scale-out candidates, as guidance with its reasons.
- Validated Excel template โ Download Excel Template gives a workbook whose ENV, OS, Workload and Criticality cells are dropdowns.
- Browser Storage and fleet snapshots โ see everything the tool keeps in your browser, save a run as a named snapshot, compare it with a later run of the same estate, and export or import a snapshot as a file.
- A relative savings figure โ the stats bar, the App Portfolio and the print report show how far Optimized ranks below Like-to-Like, as a percentage only, never a dollar amount.
- Input limits and a reserved-column notice โ a file over 100,000 rows or 500 columns is refused with the reason, and a column named like one of this tool's own output columns is named in the input check.
๐ Recent Updates
- Filter presets โ save the whole filter configuration under a name and re-apply it anytime from the bar above the Generate button; presets are per page and stay in your browser.
-
Results Excel โ download the results grid as a styled
.xlsx(formatted header, autofilter, numeric columns) alongside the existing CSV. - Nearest Miss column โ no-match rows now name the closest qualifying instance and the filter(s) that excluded it, so you know exactly what to relax.
- Scenario comparison โ pin generation runs (named, up to six) and diff them. Two runs give a detailed pairwise view: match-rate change, newly matched/unmatched VMs, the configuration settings that differed, and old โ new values for every changed recommendation. Three or more give an N-way matrix โ one column per run over the rows that differ across the set. Either view exports to CSV.
- Install & offline โ the tool is an installable app that keeps working offline after your first visit; a page always loads the current version when you're online, and everything else updates automatically in the background.
๐ Earlier Updates
-
App Portfolio & executive Excel โ add an
App Namecolumn and group your estate by application: a per-app dashboard (Open App Portfolio after generating) with a searchable app table you can filter to no-match or compliance-sensitive apps, a per-app App CSV export, and a styled multi-sheet.xlsxexport of the whole portfolio. -
Excel upload โ
.xlsxworkbooks are accepted alongside CSV. In a multi-sheet workbook the sheet whose columns best match an inventory is opened, and a picker lets you switch to any other sheet. -
Column auto-mapping โ headers like
vCPUs,RAM, orHostnamemap automatically to the expected columns; ambiguous cases open a mapping panel, and confirmed mappings are remembered for repeat uploads. -
Region Check panel โ after upload, chips show each
region as recognized (green), auto-resolved (amber, e.g.
us-east-1a โ us-east-1), or unknown (red โ those rows would use built-in sample data). - Faster loading โ instance data loads per region on demand; pages open with a few KB of data instead of ~25 MB.
- Real progress, no freezing โ generation runs in a background worker with a row-accurate progress bar and automatic fallback.
- Preview search โ filter the results preview live across all visible columns.
- Fit / headroom flag โ a โฒ% beside a like-for-like match shows how far the chosen instance over-provisions its worst axis (vCPU or memory) versus the size you requested โ the unavoidable waste of discrete instance sizes and mismatched vCPU:RAM ratios. Shown only when it is worth flagging (โฅ 25%), and more emphatically at โฅ 100%.
- No-Match export โ download only the rows that got no recommendation, with reasons, to fix and re-upload.
- Executive print report โ ๐จ๏ธ Print Report opens a print-ready one-page summary (headline stats plus the match-rate, recommended-family, and vCPU/RAM before โ after charts) to print or save as PDF.
- Alternative recommendations โ beside the best match, each row carries Most Cost Optimized, Workload Based, Newest Generation, and Best Network picks per provider (Best Network uses a real published field on AWS/Azure, a vCPU-count proxy on GCP) (separate columns; the Excel export gets one sheet per strategy).
- Dark mode โ ๐ toggle on every page; follows your OS setting until you choose manually.
- Keyboard & screen-reader support โ collapsible sections, table sorting, and status updates are fully accessible.
๐ Table of Contents
๐ 1. Introduction
Welcome to the Cloud Instance Recommender, a client-side, auditable rule-evaluation engine for cloud infrastructure decisions. Sizing across AWS, Azure, and Google Cloud Platform is its first and most developed policy set โ evaluated entirely in your browser, with no data ever uploaded to an external server.
This distinction matters for a specific kind of buyer: regulated-industry infra teams, government contractors, air-gapped or data-residency-constrained shops, and MSPs handling client data often cannot accept a mainstream sizing platform's default SaaS connection back to the vendor, even where a self-hosted tier exists elsewhere in that platform's lineup. This tool has no such connection to disable or negotiate around โ nothing it processes ever leaves the browser. Nothing here changes who can use the tool; it changes who this guide, and the product roadmap, are written for.
The Rule Engine UI builds on the underlying rule engine with five capabilities: interactive Rule Engine UI dropdowns that set global defaults without CSV changes, a Minimum Generation filter to exclude EOL instance families (e.g., AWS m5/r5), conflict detection that highlights contradicting filter combinations in red, a split AWS Pricing Calculator Bulk Template that generates separate files for Like-to-Like and Optimized recommendations, and a Min Gen CSV column for per-row generation control.
| Benefit | Description |
|---|---|
| ๐ Right-sizing | Identify over-provisioned VMs and recommend appropriately-sized replacements |
| โ Smart Scaling | N/2, N, N+1 strategy with industry-standard 40 % / 80 % thresholds |
| ๐ก Rule-based guardrails | Production environments automatically block burstable, prev-gen, and undersized instances |
| ๐ฅ OS Compatibility | Windows workloads automatically exclude ARM/Graviton instances that cannot run them |
| โ Multi-Cloud | Side-by-side recommendations across AWS, Azure, and GCP in one run |
| ๐ Audit trail | "Rules Applied" output column explains every recommendation decision |
| ๐ Privacy-first | 100 % client-side โ your inventory data never leaves your browser |
๐ Supported Cloud Providers
| Provider | Regions | Instance Families | Notable Support |
|---|---|---|---|
| AWS EC2 | 35 regions | t, m, c, r, x, z, p, g, i, d, trn, inf, mac, hpcโฆ | Graviton (ARM), Nitro Enclaves, Bulk Template export |
| Azure VMs | 60 regions | B, D, E, F, H, L, M, N, NC, ND, NVโฆ | ARM (Dpdsv5, Bpsv2), Burstable B-series detection |
| GCP Compute | 46 regions | E2, N2, N4, C2, C3, C4, M1โM4, A2, A3, G2, T2A, H3, Z3โฆ | T2A ARM, shared-core detection, zone normalisation |
๐ 2. Getting Started
๐ System Requirements
| Requirement | Specification |
|---|---|
| Browser | Chrome 80+, Firefox 75+, Edge 80+, Safari 13+ |
| JavaScript | Must be enabled |
| CSV file size | Up to 10 MB (โ 5,000โ10,000 VMs), at most 100,000 rows and 500 columns; a workbook that expands to more than 200 MB is refused before it is opened |
| Internet | Required for the first visit; after that an offline cache keeps pages and previously used region data working without connectivity |
| Local storage | Used for what you set or ask for: preferences, saved column mappings, filter presets, custom rules, manual VMs and, if you save them, fleet snapshots, which include the columns you uploaded. The uploaded file itself is never stored |
๐ Accessing the Platform
The tool is hosted on GitHub Pages and requires no installation:
- Open your browser and navigate to the Cloud Instance Recommender URL.
- From the homepage, select your target: AWS, Azure, GCP, or Multi-Cloud.
- Each provider page loads independently with provider-specific filtering options.
Installing as an app (optional)
The tool is a Progressive Web App. Use your browser's Install action (the install icon in the address bar, or Add to Home Screen on mobile) to run it as a standalone app. Installed or not, the site keeps working offline after the first visit โ pages and any region data you've already used are served from a local cache, and updates are picked up automatically on your next online visit.
๐ 3. Data Preparation
๐ Input Columns
The columns a CSV row can carry are below; column names are auto-detected (case-insensitive, spaces/underscores normalised). VM Name, CPU Count, Memory (GB) and one provider Region are required; the rest are optional, or needed only for Optimized recommendations, as noted against each row.
| Column Name | Description | Example |
|---|---|---|
| VM Name | Unique identifier for the virtual machine | web-server-01 |
| CPU Count | Number of vCPUs currently allocated | 4 |
| Memory (GB) | RAM in gigabytes currently allocated | 16 |
| Disk (GB) |
Optional. Provisioned disk, carried through to the outputs and
written into the AWS bulk template's
Storage amount per Instance (GB) field, which was
previously blank. A header ending in MB or MiB (RVTools reports
Provisioned MiB) is converted to GB on ingest, the
same way memory is. It does not affect sizing โ
CPU Count and Memory (GB) still drive that.
|
512 |
| AWS Region / Azure Region / GCP Region | Target cloud region for recommendation (provider-specific column) | us-east-1 / East US / us-central1-a |
| CPU Utilization | Average CPU utilisation % โ used for Optimized recommendations when available; a row can also be sized on its p90, p95, p99 or Peak reading (see below) | 45 |
| Memory Utilization | Average memory utilisation % โ used for Optimized recommendations when available; a row can also be sized on its p90, p95, p99 or Peak reading (see below) | 60 |
| CPU Utilization p95 Memory Utilization p95 | Optional 95th-percentile readings. Used when Size against is set to p95 โ an average hides bursts, so a VM averaging 20% with a p95 of 85% is not the downsize candidate its average suggests. | 85 |
| Criticality |
Optional: Critical, High,
Medium, Low. How costly an outage of
this VM is. A value outside this list is named in the input
check. It changes a recommendation only when
Size against is set to the per-row policy.
|
High |
| CPU Utilization p90 Memory Utilization p90 CPU Utilization p99 Memory Utilization p99 | Optional 90th- and 99th-percentile readings, used when Size against is set to p90 or p99. Same fallback rules as p95. | 78 / 93 |
| CPU Utilization p50 Memory Utilization p50 | Optional median readings. They map and are carried, but they never size a row: a median sits below the average for a bursty VM. The scale-out advisory reads it next to Peak (see the App Portfolio page). | 12 |
| CPU Utilization Peak Memory Utilization Peak | Optional peak/max readings, used when Size against is set to Peak. A "Max CPU" column auto-maps here rather than to the average. | 97 |
Which statistic sizes a row. The Size against selector in Optimization Settings chooses between Average (the default), p90, p95, p99, Peak and a per-row policy (below). A row that does not carry the chosen statistic falls back to what it does have โ preferring the higher remaining one, since sizing against a lower number than you asked for under-provisions โ and every row reports the basis actually used in a Sized On column, so a recommendation can always be traced to the number behind it.
The per-row policy. Choosing Per-row policy (ENV, Criticality, Workload) sizes each row on the statistic its own ENV, Criticality and Workload select, instead of one statistic for the whole file. Criticality and Workload each name a statistic and the higher one wins; the row's ENV then caps it, so a Dev VM is never sized on the figure a Production VM is. The defaults: Production Critical p99, High p95, Medium and Low p90; a Database takes at least p95 and a Batch VM Peak; Production may reach Peak, Staging p95, and Dev, Test and QA stay on the average; memory is held at p95 or below, since memory is rarely bursty. A blank or unrecognised ENV is treated like Production and a blank Criticality like Medium, because when it is unclear the higher figure is the safe one; the Sized On cell says when it assumed. If a row lacks the statistic its policy asks for, it falls back exactly as above. A policy that is not valid stops the run with the problem named rather than guessing.
The safety veto. Sizing on a statistic can still miss a VM that is saturating. So in a per-row policy run, when a row would be downsized on CPU or memory, the tool also looks at that dimension's own readings: if its Peak is 95% or more, or its p95 is above 85%, the downsize is held — that dimension keeps its current size — and the row is marked in a Review Flag column, for example CPU downsize held for review: Peak 97% reaches 95%. Look at those rows by hand. A VM that is not being downsized is never flagged, a missing Peak or p95 never holds anything, and the column is blank for every other row. The two thresholds are defaults, and the veto applies only to per-row policy runs; the other statistics size exactly as before.
โ Optional Columns
These five columns activate the Rule Engine. All are optional โ blank cells use the safe defaults shown below. They can also be set globally via the Rule Engine UI dropdowns in the Advanced Filtering section (CSV per-row values always override the UI defaults).
| Column | Accepted Values | Default | What it activates |
|---|---|---|---|
| ENV |
Production, Prod,
Staging, Stage, Dev,
Test
|
No rules | Rules 1a, 1b, 1c, 1d โ see Section 4 |
| OS |
Linux, Windows,
Windows Server, macOS
|
Linux | ARM/Graviton exclusion for Windows; mac1/mac2-only for macOS (AWS) |
| Workload |
General, Database,
SQL Server, Web Server,
Cache, ML/AI (or GPU),
Batch, HPC, SAP,
Analytics (Spark/big data),
File Server (or Backup),
NoSQL (or Search),
Application Server (or Middleware),
Container Host, Build Farm (CI/CD),
Domain Controller (or Jump Box)
|
General | Preferred instance families sorted first before cheapest selection |
| Compliance |
Comma-separated, like Exclude:
Current-Generation Hardware,
AWS Nitro Enclaves,
Confidential Computing,
Azure Trusted Launch. Legacy
PCI/HIPAA/SOC2/FIPS
still work (see below).
|
None | Tightens instance selection toward each requirement's real signal โ see "Security & Compliance" below. Does not certify PCI/HIPAA/SOC2/FIPS compliance itself. |
| Min Gen |
AWS 5,
6, 7Azure 3,
4, 5 (v-number)GCP n2,
n2d, n4
|
No minimum |
Excludes instances older than the specified generation (e.g.,
AWS m5 is excluded when Min Gen = 6). On AWS and Azure, a whole
number above zero (6 or 6.0) is a
valid Min Gen; anything else is not applied. On GCP, a listed
family name (n2, n2d, n4)
is valid instead. Rules Applied says when a value wasn't
applied.
|
๐ท Current Instance Type (optional)
Not a rule-engine column, and not required โ but if your VMs already
run in a cloud, a
Current Instance Type column lets the
recommendation be read directly against what it replaces. Also
recognised as Instance Type, VM Size,
Machine Type, or Current Size. Examples:
m5.xlarge, Standard_D4s_v3,
n2-standard-4.
It is carried through to the preview and every export untouched, and sits immediately left of the recommended instances. By default it does not affect sizing โ CPU Count and Memory (GB) drive that, and two VMs with the same CPU and memory get the same recommendation however different the machines they run on today. The exception is cloud-to-cloud mode, where a row that omits CPU Count and Memory (GB) is sized from its Current Instance Type instead.
๐ Sample CSV Structure
VM Name,App Name,CPU Count,Memory (GB),CPU Utilization,Memory Utilization,AWS Region,ENV,OS,Workload,Compliance,Min Gen,Exclude,Current Instance Type web-server-01,Storefront,4,16,45,60,us-east-1,Production,Linux,Web Server,,6,,m5.xlarge db-server-02,Billing,8,32,70,80,us-west-2,Production,Windows,Database,PCI,7,"Burstable,GPU",m5.2xlarge app-server-03,Billing,2,8,35,45,eu-west-1,Dev,Linux,General,,,,t3.large cache-server-04,Storefront,4,16,25,30,us-east-1,Staging,Linux,Cache,,6,Burstable,m5.xlarge ml-server-05,Analytics,8,64,80,75,us-west-2,Production,Linux,ML/AI,HIPAA,7,,r5.2xlarge
๐ก Data Collection Tips
| Provider | Where to get utilisation data |
|---|---|
| AWS | CloudWatch โ EC2 โ CPUUtilization metric (14โ90 day average recommended). Cost Explorer for current instance types. |
| Azure | Azure Monitor โ Virtual Machines โ Percentage CPU & Available Memory. Azure Advisor for existing recommendations. |
| GCP | Cloud Monitoring โ compute.googleapis.com/instance/cpu/utilization. Recommender API for existing rightsizing signals. |
Collection best practices:
- Use a 30โ90 day average โ short windows miss weekly/monthly patterns
- Include at least one peak business period (quarter end, product launch, etc.)
- Use P95 or P99 if your workload has spiky traffic, not just averages
- Validate CPU count and memory against the actual current instance type, not OS-reported values
๐ก 4. Environment & Workload Rules
The Rule Engine applies automatically when optional CSV columns are present. Rules narrow the candidate instance list before the cheapest-match selection runs โ so every recommendation already satisfies your environment constraints.
Effect: Removes CPU-credit-based families
AWS t1, t2, t3, t3a, t4g
Azure B-series (bsv2, bsv3, bpsv2โฆ)
GCP f1-micro, g1-small, e2 shared-core
Effect: Current-generation instances only
Independently, Compliance names "AWS Nitro Enclaves" (legacy PCI/HIPAA also expand to this) on AWS:
Nitro Enclaves support required. "Confidential Computing" reuses this same check on AWS, plus a Azure dc*/ec* family match; no signal exists on GCP. "Azure Trusted Launch" requires the real trusted_launch field on Azure only.
Rationale: prev-gen lacks modern security features; the rest are real per-instance signals, not certifications โ see "Security & Compliance" below.
Effect: Excludes undersized instances
AWS Excludes nano and micro sizes
Azure โฅ 2 vCPUs (Production)
GCP โฅ 2 vCPUs (Production)
Rationale: Headroom for monitoring agents and traffic spikes
Effect: Prefers instances with โฅ 4 vCPUs
Rationale: Larger instance sizes map to higher network bandwidth tiers, critical for database replication and high-throughput web traffic
Excludes all ARM/Graviton instances (t4g, m6g, c6g, r6g on AWS; Dpdsv5, Bpsv2 on Azure; T2A on GCP)
OS = macOS AWS only:
Limits to mac1 and mac2 families
๐ข Min Generation Rule (MG)
The Min Generation rule excludes instances older than a specified hardware generation. This is useful when older generations are approaching end-of-life (e.g., AWS m5/r5 EOL) or when you have a policy requiring modern silicon.
| Provider | Column / UI value | Excluded when set to... | Included families |
|---|---|---|---|
| AWS | 5, 6, 7 |
Min Gen = 6 โ excludes m5, r5, c5, t3, and all earlier gens | m6i, m6a, m7i, m7g, r6i, r7a, c6i, c7gโฆ |
| Azure | 3, 4, 5 (v-number) |
Min Gen = 4 โ excludes Dsv3, Esv3 and older | Dsv4, Dsv5, Esv4, Esv5, Fsv2โฆ |
| GCP |
n2, n2d, n4 (family name)
|
Min Gen = n2 โ excludes N1, E2 shared-core, F1, G1 | N2, N2D, C2, C2D, T2A, A2, G2, C3, N4, C4โฆ |
AWS Min Gen, Azure Min Gen and
GCP Min Gen columns. Nothing is translated between clouds.
๐ฏ Workload Family Mappings
| Workload | AWS Preferred Families | Azure Preferred Series | GCP Preferred Series |
|---|---|---|---|
| General | m (General Purpose) | D-series | N2, E2 |
| Database | r, x, z (Memory-optimised) | E-series, M-series | M1, M2, M3, M4 |
| Web Server | m, c (General + Compute) | D-series, F-series | N2, E2, N4 |
| SQL Server | r, x, z (Memory-optimised) โ minimum 4 vCPUs | E-series, M-series | M1, M2, M3, M4 |
| Cache | r, x (Memory-optimised) | E-series, M-series | M1, M2, M3 |
| ML/AI (GPU) | p, g, trn, inf (GPU/Accelerated) | NC, ND, NV series | A2, A3, G2 |
| Batch | c, m (Compute-optimised) | F-series, D-series | C2, C2D, C3, C3D |
| HPC | hpc, c | HB, HC series | H3, C2 |
๐ Rules Reference Summary
| Rule | Trigger | Action | Output tag |
|---|---|---|---|
| 1a | ENV = Production or Staging | Remove burstable families | 1a: Burstable excluded |
| 1b | ENV = Production, or Compliance names Current-Generation Hardware (PCI/HIPAA/SOC2/FIPS all expand to this) | Current-gen only | 1b: Prev-gen excluded |
| 1b-Nitro | Compliance names AWS Nitro Enclaves (PCI/HIPAA expand to this too) + AWS | Nitro Enclaves required | 1b: Nitro required (Compliance) |
| 1b-Confidential | Compliance = Confidential Computing + AWS/Azure (no signal on GCP) | AWS: Nitro reused. Azure: dc*/ec* family match |
1b: Confidential computing required (Compliance)
|
| 1b-TrustedLaunch | Compliance = Azure Trusted Launch + Azure | The real trusted_launch field required |
1b: Trusted Launch required (Compliance)
|
| 1c | ENV = Production or Staging | Size floor (no nano/micro) | 1c: Size floor applied |
| 1d | ENV = Production + DB/Web Workload | โฅ 4 vCPUs preferred | 1d: Network-tier preference (โฅ4 vCPUs) |
| OS-Win | OS = Windows | Exclude ARM/Graviton | OS: ARM excluded (Windows) |
| OS-Mac | OS = macOS (AWS only) | mac1/mac2 families only | OS: mac1/mac2 only (macOS) |
| Workload | Workload โ General | Preferred families sorted first | Workload: database preference |
| MG | Min Gen set (CSV or UI) | Exclude instances below specified generation | MinGen: 6+ |
| SQL | Workload = SQL Server | Remove candidates below 4 vCPUs (licence minimum) | SQL: 4-vCPU licence floor |
| BP | ENV = Dev/Test + measured CPU below the downsize threshold; known-high memory withholds the preference (unknown memory is allowed) | Prefer burstable families (the inverse of 1a) |
BP: Burstable preferred (Dev/Test, low utilization)
|
| GA | Workload = ML/AI (or GPU) | Require a GPU / ML ASIC / FPGA instance | GPU: accelerator required |
| GA | Any other workload, blank included | Exclude accelerator instances | GPU: accelerators excluded (non-GPU workload) |
48 vCPU / 192 GB request on GCP picked
g2-standard-48. Set Workload to
ML/AI on the rows that genuinely want an accelerator.
Neither direction can produce a blank result: if the filter would leave
no candidates, the rule is skipped and the row says so (GPU: no accelerator available (not applied)). Migrating an existing GPU fleet? This exclusion applies to the Like-to-Like match too, so a VM that runs on a GPU box today will be matched to a CPU-only instance of the same shape unless its
Workload is set to ML/AI (or
GPU). Label those rows so their accelerator hardware is
preserved.
๐ 5. Step-by-Step Usage Guide
Step 1 โ Choose Your Cloud Provider
- Single provider: Navigate directly to the AWS, Azure, or GCP page for focused recommendations with provider-specific filtering options.
- Multi-cloud: Use the Multi-Cloud page to compare recommendations across all three providers in a single run from one CSV upload.
Step 2 โ Download and Prepare the Template
- Click Download Sample CSV on the provider page to get a template with the correct column headers. Or click Download Excel Template for a workbook whose ENV, OS, Workload, and Criticality cells are dropdowns, so a mistyped value cannot slip in. Its Read me and Allowed values sheets explain each column; the tool reads the Inventory sheet.
- Replace the sample rows with your actual VM inventory. Include the optional ENV, OS, Workload, and Compliance columns where applicable.
- Save the file as UTF-8 CSV.
Step 3 โ Upload Your CSV
- Drag and drop your CSV onto the upload zone, or click it to browse.
- The tool validates the file, checks required columns, and shows a data preview and an input check (see the FAQ below).
- Review any warnings before proceeding โ common issues include missing region columns or non-numeric CPU/memory values.
Step 4 โ Select Recommendation Type
| Type | What it does | When to use | Data needed |
|---|---|---|---|
| Like-to-Like | Finds cheapest instance with โฅ current CPU and โฅ current memory | Conservative migrations; guaranteed headroom | CPU Count, Memory (GB), Region |
| Optimized | Applies N/2, N, N+1 strategy to right-size based on actual utilisation | Cost reduction; over-provisioned estate | Above + CPU Utilization, Memory Utilization |
| Both | Generates both columns per VM for comparison | Decision-making; stakeholder reporting | All columns |
Step 5 โ Configure Optimization Settings
(Only relevant for Optimized or Both recommendation types)
Optimization Mode
- CPU-Based: Scale CPU according to utilisation thresholds
- Memory-Based: Scale memory according to utilisation thresholds
- Both can be enabled simultaneously
N/2, N, N+1 Thresholds (Industry-Standard Defaults)
| Zone | CPU / Memory Utilisation | Action | Rationale |
|---|---|---|---|
| Downsize (Nรท2) | โค 40 % | Halve the target resource | Avg below 40 % = significantly over-provisioned; AWS, Azure, and GCP advisors all flag this range |
| Keep Same (N) | 40 % โ 80 % | Use current resource count | Right-sized zone with adequate headroom for spikes |
| Upsize (N+1) | > 80 % | Add one unit of the resource | SRE best practice: keep utilisation below 80 % to avoid saturation incidents |
Step 6 โ Configure Rule Engine & Advanced Filtering (Optional)
Expand the Advanced Filtering section to access both the Rule Engine UI controls and provider-specific filters.
Rule Engine Defaults
Five dropdowns let you set rule defaults for the entire batch without modifying your CSV. Per-row CSV column values always take priority over these UI defaults.
| Dropdown | Options | Effect |
|---|---|---|
| Default Environment | โ / Production / Staging / Dev / Test | Applies ENV rules to every row that has no ENV column value |
| Default OS | โ / Linux / Windows / macOS | Applies OS compatibility rules globally |
| Default Workload | โ / General / Database / SQL Server / Web Server / Cache / ML/AI / Batch / HPC / SAP / Analytics / File Server / NoSQL / Application Server / Container Host / Build Farm / Domain Controller | Sets family preference order for all rows |
| Default Compliance | Checkboxes, any combination โ Current-Generation Hardware / AWS Nitro Enclaves / Confidential Computing / Azure Trusted Launch (each page shows only the ones with a real effect there) | Tightens instance selection toward each checked requirement |
| Minimum Generation | AWS: Gen 5+ / 6+ / 7+ ยท Azure: v3+ / v4+ / v5+ ยท GCP: N2 / N2D / N4 | Excludes instance families below the selected generation |
Conflict Detection
When two selected options directly contradict each other, the conflicting dropdowns are highlighted in red with an explanatory warning. For example:
- OS = Windows + processor filter restricted to Graviton/ARM only
- ENV = Production or Staging + main families restricted to burstable types only (t/B/e2)
- Workload = ML/AI + processor filter restricted to Intel/AMD only (no GPU available)
- OS = macOS while an Azure or GCP provider is selected (macOS is AWS-only)
Resolve conflicts before generating recommendations โ rules will still run but may produce unexpected results if contradictions are left in place.
Step 7 โ Generate and Download Results
- Click ๐ Generate Recommendations. A progress bar shows processing status for large files.
- Once complete, the download section updates based on what was generated.
-
AWS page โ both Like-to-Like and Optimized selected:
three buttons appear:
๐ Download Results (Excel) โ the full workbook (the primary download); flat CSVs are behind the CSV โพ menu
๐งพ Bulk Template (Like-to-Like) โ AWS Pricing Calculator format, Like-to-Like instances only
๐งพ Bulk Template (Optimized) โ AWS Pricing Calculator format, Optimized instances only - AWS page โ single type selected: Download Results (Excel), the CSV โพ menu, and one Bulk Template button.
- Azure / GCP pages: Download Results (Excel), with the Results CSV behind the CSV โพ menu.
๐ฏ 6. Understanding Recommendations
๐ Like-to-Like Strategy
- The full instance catalogue for the specified region is loaded.
- All instances with vCPUs < required CPU or memory < required memory are removed.
- The Rule Engine applies ENV, OS, Workload, and Compliance filters.
- The cheapest remaining instance is returned (workload preferred families are sorted to the top first).
โก N/2, N, N+1 Optimization Strategy
- Calculate target CPU and memory from utilisation data using the 40 %/80 % thresholds.
- Run the same Like-to-Like process against the adjusted targets.
| Scenario | CPU Util | Memory Util | Target CPU | Target Memory |
|---|---|---|---|---|
| Over-provisioned | 25 % | 30 % | Current รท 2 | Current รท 2 |
| Right-sized | 55 % | 65 % | Current (N) | Current (N) |
| Under-provisioned | 85 % | 40 % | Current + 1 | Current (N) |
| Mixed | 25 % | 85 % | Current รท 2 | Current + 1 |
๐ 7. Output Columns Explained
The downloaded CSV preserves all original input columns and appends recommendation columns for each selected provider.
Original Input Columns (preserved)
VM Name, CPU Count, Memory (GB), CPU Utilization, Memory Utilization, [Provider] Region, ENV, OS, Workload, Compliance โ all returned unchanged.
Recommendation Columns (added per provider)
| Column | Description | Example value |
|---|---|---|
| AWS Like-to-Like Instance | Recommended EC2 instance type (like-for-like) | m6i.xlarge |
| AWS Like-to-Like Family | The family category the recommended instance belongs to, as the provider itself classifies it | General purpose |
| AWS Like-to-Like vCPUs | vCPU count of the recommended instance | 4 |
| AWS Like-to-Like Memory (GiB) | Memory of the recommended instance in GiB | 16 |
| AWS Optimized Instance | Recommended EC2 instance type (optimised) | m6i.large |
| AWS Optimized Family | Family category of the optimised instance | General purpose |
| AWS Optimized vCPUs | vCPU count of the optimised instance | 2 |
| AWS Optimized Memory (GiB) | Memory of the optimised instance in GiB | 8 |
| AWS Rules Applied | Pipe-separated list of rules that fired for this row | 1a: Burstable excluded | 1c: Size floor applied |
| AWS No Match Reason | Why no instance was found (no-match rows only) | CPU Count is 0 or missing |
| AWS Nearest Miss | Closest instance that met the CPU/memory requirement, and which filter group(s) excluded it (no-match rows only) | m7i.large (2 vCPU / 8 GB) โ relax: current-generation only |
The same pattern applies for Azure and GCP (replacing "AWS" with the provider name).
Status values for recommendation columns
| Value | Meaning |
|---|---|
m6i.xlarge (etc.) |
Successful recommendation |
Missing data |
Required input column (CPU, Memory, or Region) was blank |
No utilization data |
Optimized type selected but CPU/Memory Utilization were 0 or blank |
No data available |
No instance in the region catalogue met the requirements (after rules applied) |
Error |
Unexpected processing error โ check browser console for details |
๐ฅ 8. Export Options
๐ Standard Results CSV
Available on all provider pages. Downloads a CSV containing all original input columns plus the recommendation columns described in Section 7. This file is ready for:
- Excel / Google Sheets pivot table analysis
- Importing into ITSM or CMDB tools
- Sharing with stakeholders for review
- Filtering by "Rules Applied" to audit environment-specific decisions
๐ Results Excel (.xlsx)
๐ Download Results (Excel) is the primary download: a workbook with a Recommendations sheet (formatted header row, autofilter, fitted column widths, and numeric columns stored as real numbers โ so sorting and filtering behave correctly in Excel with no import dialog or encoding step) plus one sheet per alternative strategy. The flat CSV exports (Results, No-Match Rows, App Summary) live behind the CSV โพ checklist beside it โ tick the ones you want and click Download selected. The spreadsheet engine loads on first click; everything runs in the browser.
๐งพ AWS Pricing Calculator Bulk Template AWS only
Available exclusively on the AWS page after recommendations are generated. Produces a CSV that exactly matches the column schema of the Amazon EC2 Instances worksheet in the AWS Pricing Calculator's Bulk Upload Template.
Column mapping
| Bulk Template Column | Populated from | Default |
|---|---|---|
| Group | ENV column value | Default |
| Description | VM Name | โ |
| AWS Region | AWS Region column | โ |
| Operating System | OS column (Windows โ "Windows Server", else "Linux") | Linux |
| Instance Type | Like-to-Like or Optimized instance type (one per file) | โ |
| Tenancy | Fixed | Shared Instances |
| Number of Instances | Fixed | 1 |
| Usage Type | Fixed | Always On |
| Purchasing Options | Fixed | On-Demand |
| Storage amount per Instance (GB) | Disk (GB) column, rounded up to a whole GB (blank when the file had none) | โ |
| Storage Type, IOPS, throughput | Always left blank for the calculator to default | โ |
Path A โ Bulk Import (recommended for large lists)
- Open AWS Pricing Calculator and click Create estimate.
- Click Bulk import (top-right corner of the estimate view).
- Select the correct service template (EC2 Instances).
- Click Download template, then replace its rows with the CSV downloaded from this tool (Like-to-Like or Optimized โ not both).
- Upload the filled template, then click Save and add service or Save and view summary.
Path B โ Manual EC2 configuration
- Open AWS Pricing Calculator and click Create estimate.
- Search for EC2 and click Configure.
- Set the region, OS, instance type, and quantity to match the recommended instances.
- Click Save and add service or Save and view summary.
Azure Pricing Calculator steps
- Open the Azure Pricing Calculator.
- Find Virtual Machines and click Add to estimate.
- Scroll down (or click View) to the configuration panel.
- Set the region, OS, tier, and instance size to match the recommended VM types, then save your estimate.
GCP Pricing Calculator steps
- Open the GCP Pricing Calculator.
- Click Add to estimate.
- Select Compute Engine.
- Configure the machine type, region, and quantity to match the recommended instances, then save.
๐ App Portfolio & Executive Excel
Include an App Name column in your inventory and the tool can present the whole estate grouped by application. After generating, an Open App Portfolio button appears in the download section on every provider page.
App โ Workload mapping
If your file has App Name but no
Workload column, a mapping panel lets you assign a
workload to each application. Every VM in that application inherits
the workload at generation time โ a row's own
Workload cell still takes precedence when present.
App Summary CSV
A per-application rollup โ VM count, total vCPUs and memory, and matched vs no-match counts, and the number of scale-out candidates โ downloadable from the same download section. The last column is blank, not 0, for an application where no VM carried both a median and a peak.
The App Portfolio page
Open App Portfolio hands the current results to a dedicated page in your browser (nothing is uploaded). It opens with:
- Overview tab โ estate KPIs, a sortable and searchable application table (ENV mini-bar, match rate, region count and compliance flags per app, expandable to that app's VMs), plus rankings and callouts: biggest apps, worst match rate, compliance-sensitive apps, scale-out candidates, and unassigned VMs.
- One tab per application โ VM / vCPU / memory KPIs, ENV / OS / workload mini-bars, compliance and region chips, the recommended instance-family spread per provider, match health with the top no-match reasons, right-sizing counts (on Optimized runs), a scale-out advisory, and a full per-VM detail table.
The scale-out advisory. A VM whose median (p50) utilization is 20% or less while its Peak reaches 80% or more is listed as a scale-out candidate, with its reasons, for example "CPU: low p50 (10%), high Peak (95%)". CPU and memory are judged separately. It needs both readings: a VM without a median and a peak is not judged, which is different from "not a candidate", so the counts read "1/2 judged" and the detail column stays blank for the VM that could not be judged. It is guidance, not an action: a low median with a high peak can suit a smaller base instance behind a load balancer, but this tool sizes instances and does not configure autoscaling. The thresholds are defaults.
Executive Excel workbook
The Download Executive Excel button builds a styled,
multi-sheet .xlsx entirely in the browser:
- Portfolio Summary โ one row per application plus an estate TOTALS row, with autofilter and number formatting.
- Contents โ clickable links to every sheet.
- One sheet per application (and an Unassigned sheet) โ a KPI block and the full per-VM detail table.
- About โ a column legend, data dates, and notes.
๐ Comparing Two Runs (Scenario Comparison)
The download section includes a Scenario comparison bar for measuring what a configuration change actually does to the recommendations:
- Generate recommendations, then click ๐ Pin this run โ it becomes scenario A.
- Change filters (or apply a different preset) and generate again.
- Pin the new run (scenario B) and click Compare A โ B.
The comparison shows how many VMs changed, the match rate A โ B, newly matched and newly unmatched counts, and a table of only the changed rows with old โ new values for each recommendation column. Rows are paired by VM Name (or by position when names aren't unique), so use the same input file for both runs. Up to six runs can be pinned and named in place; with three or more, Compare all shows an N-way matrix. Scenarios are held in memory and clear when the page reloads.
๐ง 9. Advanced Filtering
The Advanced Filtering section contains two types of controls: the Rule Engine UI (global defaults for ENV/OS/Workload/Compliance/Min Gen) and provider-specific filters that narrow the instance candidate pool. Provider filters are applied first; the Rule Engine then runs on the already-filtered set.
โ Rule Engine UI Controls
Five dropdowns inside Advanced Filtering set rule defaults for the entire batch. These act as a fallback when a CSV row has no value in the corresponding column โ per-row CSV values always override them.
| Dropdown | AWS options | Azure options | GCP options |
|---|---|---|---|
| Default Environment | Production / Staging / Dev / Test (same across all providers) | ||
| Default OS | Linux / Windows / macOS (same across all providers) | ||
| Default Workload | General / Database / SQL Server / Web Server / Cache / ML/AI / Batch / HPC / SAP / Analytics / File Server / NoSQL / Application Server / Container Host / Build Farm / Domain Controller | ||
| Default Compliance | Current-Generation Hardware / AWS Nitro Enclaves / Confidential Computing / Azure Trusted Launch (checkboxes, any combination) | ||
| Minimum Generation | Gen 5+ / Gen 6+ / Gen 7+ | v3+ / v4+ / v5+ | N2 / N2D / N4 |
๐จ Conflict Detection
When a UI selection directly contradicts another filter, the conflicting control is highlighted with a red border and an inline warning message. Four conflict types are detected:
| Conflict | What triggers it | Highlighted control |
|---|---|---|
| OS โ Processor | OS = Windows AND all selected processor filters are ARM/Graviton-only | Default OS dropdown |
| ENV/Compliance โ Families | ENV = Production or Staging, AND main family filter includes only burstable types (t/B/e2) | Default Environment dropdown |
| Workload โ Processor | Workload = ML/AI AND processor filter excludes all GPU/ARM options | Default Workload dropdown |
| OS โ Providers | OS = macOS AND an Azure or GCP provider is selected | Default OS dropdown |
๐ถ AWS-Specific Filters
| Filter | Description |
|---|---|
| Current Generation Only | Excludes previous-generation families (t2, m4, c4, r4, etc.). Recommended for all new deployments. |
| Physical-Core Licensing (alternate floor) | Present on the AWS, Azure and Multi-Cloud pages. Off by default, which sizes SQL Server's 4-core licence floor by vCPU โ the correct basis for a VM licensed directly, and also for License Mobility / BYOL, which Microsoft licenses by virtual core with the same 4-vCPU-per-VM minimum. Turning this on switches the floor to physical cores instead โ a stricter, more conservative count (AWS and Azure instances are typically hyperthreaded ~2:1, so an 8-vCPU instance is often only 4 physical cores) for scenarios where you specifically need to size against physical cores rather than a licensing requirement. Has no effect on GCP rows โ no comparable field exists for that provider. |
| Instance Family Names | Restrict to specific family categories: General purpose, Compute optimized, Memory optimized, Storage optimized, Micro instances, GPU instance, Machine Learning ASIC, FPGA, Media Accelerator. The options are read from the catalogue, so they always match the data. The multi-cloud page has no such control; use its Instance Category filter instead. |
| Processor Manufacturer | Intel, AMD, or AWS (Graviton/ARM). Note: selecting AWS Graviton and then setting OS = Windows via the CSV column will still exclude Graviton โ OS rules always take priority. |
| Main Family Prefix | Restrict by family prefix (t, m, c, r, x, z, p, g, i, dโฆ) |
| Exclude Types |
Exclude individual type classes: Graviton/ARM, GPU, Mac instances,
previous generation, Nitro-only, Bare Metal (backed by the real
is_bare_metal field)
|
๐ท Azure-Specific Filters
| Filter | Description |
|---|---|
| Instance Family Names | Restrict to specific family categories: General purpose, Compute optimized, Memory optimized, Storage optimized, GPU, High performance compute |
| VM Series | Filter by series: B (burstable), D (general), E (memory), F (compute), H (HPC), L (storage), M (large memory), N (GPU) |
| Processor Architecture | Intel x86-64, AMD EPYC, ARM (Ampere) |
| VM Families | Filter by specific family strings (dv5, ev5, fsv2โฆ) |
| Exclude Types | Exclude ARM, GPU, or burstable categories |
๐ด GCP-Specific Filters
| Filter | Description |
|---|---|
| Instance Family Names | Restrict to specific family categories: General purpose, Compute optimized, Memory optimized, Storage optimized, Accelerator optimized, Network optimized |
| Machine Families | E2, N1, N2, N4, C2, C2D, C3, C3D, C4, M1, M2, M3, M4, A2, A3, G2, T2D, T2A, H3, Z3 |
| CPU Platform | Intel, AMD, ARM |
| Machine Type Prefix | Filter by standard, highmem, highcpu, ultramem |
| Exclude Types | Exclude ARM (T2A), GPU, shared-core families, or Bare Metal (backed by the machine type's own "-metal" name, no field needed) |
โญ Filter Presets
The bar above the Generate Recommendations button saves the entire configuration under a name โ recommendation type, optimization thresholds, the five Rule Engine defaults, every provider filter, and the exclude-type selections (plus the provider checkboxes on the Multi-Cloud page).
- ๐พ Save current asโฆ โ snapshot the current controls under a new name; a name box opens right in the bar.
- Apply โ restore a preset; dependent panels (optimization ranges, exclude grids) rebuild automatically.
- Update / Delete โ overwrite a preset with the current settings, or remove it. Both (and saving over an existing name) ask for a second confirming click, so a stray click can't destroy a preset.
- ๐ค Export / ๐ฅ Import โ download the page's presets as a JSON file and import them in another browser or on another machine. Imports never overwrite: a name you already have comes in with an "(imported)" suffix.
Presets are scoped to the page they were saved on (an AWS preset doesn't appear on Azure) and are stored in your browser's local storage โ they never leave your machine unless you export them, and they survive reloads. Nothing is applied automatically: a preset takes effect only when you click Apply.
๐งฉ User-Defined Rules
Its own top-level Custom Rules section, first on every tool page, lets you author your own conditional filters without touching the CSV. Each rule has four parts:
- Dimension โ the row value the rule keys on: ENV, OS, Workload, or Compliance.
-
Value to match โ text compared case-insensitively
against the row's value for that dimension (e.g.
database). - Action โ Exclude or Include Only (an allow-list).
-
Families or types โ a comma-separated token list
the action applies to (e.g.
r5, r6orburstable).
A rule fires on every row whose value on that dimension matches, and
folds its tokens into that row's Exclude / Include Only set โ the
same per-row mechanism the CSV's own Exclude column
feeds, so a custom rule and a CSV cell can never disagree about how a
token is interpreted (a family prefix, a category like
GPU, or a specific type name all work the same way in
both places).
Rules are listed below the entry form with a delete button, stored per page (like presets, never leaving your machine), and applied automatically on the next Generate โ no re-upload needed. Use this for a standing preference the Rule Engine dropdowns don't express โ "always exclude burstable for Database regardless of ENV," or "for HIPAA rows, include only Nitro-supported families" โ without hand-editing every row.
๐พ Browser Storage and Fleet Snapshots
Everything this tool keeps is kept in your browser, never sent anywhere. The Browser Storage section on every tool page lists each kind of data the tool stores, with its size, and lets you clear one of them, or all of them. Clearing is two-step: the first press asks you to confirm, the second clears.
A fleet snapshot saves the results of your last run under a name you choose, so you can come back to it. A snapshot holds the per-VM results, the providers and the custom rules that run used. The per-VM results include the columns you uploaded, so a snapshot holds your inventory's data as well as the recommendations, though not the original file. You need a completed run to save one.
Export file saves one snapshot as a JSON file, and Import snapshot file reads such a file back in, so a fleet state can move to another browser or person without a server. The file is made and read on your device and is sent nowhere. It holds the same per-VM results as the snapshot, so handle it like the inventory. An import is checked first: a file that is not a snapshot from this tool, is from a different version, is too large or holds anything other than plain values is refused with the reason, and nothing is stored. If the name is already taken you are asked for another one; an import never replaces an existing snapshot. This is a way to share a file, not collaboration: nothing is kept in sync.
Compare with last run checks a saved snapshot against your latest run. The two count as the same estate only when at least 90% of the VMs in the larger run appear in both, matched by VM Name. For the same estate you see how many VMs and cells changed, and a table of each changed cell (up to 50 rows). For a different estate the comparison is refused, and the message lists the VMs that were added and removed, so you can save the new run as its own snapshot instead.
Your browser sets how much it will store for this site, usually about 5 MB. If that is full, a save is refused with a message, and nothing already stored is lost. Delete a snapshot or clear some data, then try again.
โ 10. Multi-Cloud Comparison
The Multi-Cloud page processes a single CSV against all three providers simultaneously, producing side-by-side recommendations in one output file. This is useful for migration planning, vendor selection, and lock-in risk assessment.
CSV Format for Multi-Cloud
Include region columns for every provider you want to compare. Providers with a blank or missing region column are skipped for that row.
VM Name,App Name,CPU Count,Memory (GB),CPU Utilization,Memory Utilization,AWS Region,Azure Region,GCP Region,ENV,OS,Workload,Compliance,AWS Min Gen,Azure Min Gen,GCP Min Gen,Exclude,Current Instance Type web-server-01,Storefront,4,16,45,60,us-east-1,East US,us-central1-a,Production,Linux,Web Server,,,,,,m5.xlarge db-server-02,Billing,8,32,70,80,us-west-2,West US 2,us-west1-b,Production,Windows,Database,PCI,,,,"Burstable,GPU",m5.2xlarge
Regional Equivalents Reference
| Geography | AWS Region | Azure Region | GCP Region |
|---|---|---|---|
| US East | us-east-1 | East US | us-east1-b |
| US West | us-west-2 | West US 2 | us-west1-b |
| Europe West | eu-west-1 | North Europe | europe-west1-c |
| Europe Central | eu-central-1 | Germany West Central | europe-west3-a |
| Asia Pacific (SE) | ap-southeast-1 | Southeast Asia | asia-southeast1-a |
| Asia Pacific (NE) | ap-northeast-1 | Japan East | asia-northeast1-a |
Interpreting Multi-Cloud Output
The output CSV contains recommendation columns for every selected provider in the same row, making it easy to filter in Excel or Google Sheets:
- Sort by VM Name to see all providers for each workload
- Use the "Rules Applied" columns to understand why providers differ
- Provider pricing calculators should be used to compare actual costs โ do not compare instance types directly as the vCPU/memory ratio differs across providers
๐ง 11. Troubleshooting
File Upload Problems
| Problem | Likely Cause | Solution |
|---|---|---|
| "CSV parsing failed" | Special characters, wrong encoding, or malformed CSV |
Save the file as UTF-8 CSV (not UTF-8 BOM). Remove characters like
< > & from data
values. Check for unescaped commas inside quoted fields.
|
| "File too large" | The file exceeds 10 MB, has more than 100,000 rows or 500 columns, or is a workbook that expands to more than 200 MB | Split into smaller batches. Remove unused columns. Filter to the VMs you need recommendations for. The previous upload stays loaded when a file is refused. |
| "Missing required columns" | Column name mismatch | Column names are matched case-insensitively and with space/underscore normalisation, but the exact words must be present. Download the sample CSV template and compare your headers. |
| "Invalid region name" | Typo or wrong provider format |
AWS regions use hyphens: us-east-1. Azure uses
display names: East US. GCP uses zone format:
us-central1-a.
|
Recommendation Problems
| Problem | Cause | Solution |
|---|---|---|
| "No data available" for all VMs | Region not recognised, or filters eliminated every candidate | Check the Region Check panel after upload โ red chips mean the region isn't in the catalogue. If regions are green or amber (auto-resolved), read the Nearest Miss column: it names the closest candidate and the filter group to relax. |
| Recommendations seem too large | Utilisation data is missing or zero โ falling back to Like-to-Like | Ensure CPU Utilization and Memory Utilization columns contain non-zero values when using Optimized mode. |
| No recommendation after ENV = Production | Rule engine eliminated all candidates | Check the Rules Applied and Nearest Miss columns โ the latter names the closest candidate and which filter excluded it. Try relaxing the Advanced Filtering options. Ensure the region has current-generation instances (all major regions do). |
| Windows VMs getting ARM recommendations | OS column is blank or misspelled |
Set the OS column to exactly Windows or
Windows Server for affected rows.
|
| Optimized same as Like-to-Like | Utilisation in the 40โ80 % "keep same" zone | This is expected โ the N/2,N,N+1 strategy keeps the same size when utilisation is in the right-sized band. |
Browser / Performance Problems
| Problem | Solution |
|---|---|
| Generation waits after clicking the button | Instance data loads per region on demand; if your CSV's regions are still downloading, the run is queued and starts automatically once they arrive โ no action needed. On repeat visits the data is served from the offline cache. |
| Download button does nothing | Check that your browser's pop-up blocker is not intercepting the download. Allow pop-ups for the site or use a different browser. |
| Processing hangs on large files | A very large file takes longer; if it stalls, split it into batches. Close other browser tabs to free memory. Refresh the page (this also clears the loaded instance data โ allow time to reload). |
| Results CSV opens as garbled text in Excel | When opening a CSV in Excel, use Data โ From Text/CSV and select UTF-8 encoding. Do not double-click the file directly. |
โจ 12. Best Practices
๐ Data Collection
- Collect at least 30 days of utilisation data; 90 days is ideal to capture seasonal variation
- Use the P95 or P99 percentile for CPU if your workload is spiky โ average metrics underestimate peak demand
- Memory utilisation from the OS is more reliable than hypervisor-reported figures โ use OS-level agents where possible
- Tag VMs with their ENV, OS, and Workload in your CMDB and export that metadata directly into the CSV
๐ Recommendation Implementation
- Start with Dev/Test environments โ fast to change and low risk if something is wrong
- For Production, use Like-to-Like first to establish a safe baseline, then consider Optimized for a second wave
- Always have a rollback plan: snapshot or image the VM before resizing
- Monitor for 48โ72 hours after a resize before treating it as complete
๐ฐ Cost Strategy
- Use this tool to identify the right instance type โ then separately apply Reserved Instance or Savings Plan pricing in the provider's pricing calculator
- Re-run the tool quarterly for dynamic workloads; semi-annually for stable production systems
- After a cloud migration, re-run with actual utilisation data from the new environment โ the right-sizing picture often changes after migration
๐ Security & Compliance
- The Compliance column tightens instance selection toward real hardware/software signals โ it does not itself certify PCI-DSS, HIPAA, SOC 2, or FIPS compliance. Those are account- and program-level facts (your BAA, your AWS/Azure/GCP compliance program, your own controls), not properties of an instance type.
-
Set
Compliance = Current-Generation Hardwareto keep recommendations on current-generation instances โ a reasonable baseline for any regulated workload, on any of the three clouds. -
Add
AWS Nitro Enclaves(comma-separated) to require Nitro-capable AWS instances โ the real primitive many organizations use to isolate PCI/HIPAA-sensitive processing. LegacyPCIandHIPAAvalues still work and expand to both of the above automatically; legacySOC2andFIPSexpand to Current-Generation Hardware alone. -
Add
Confidential Computingfor memory-encrypted instances โ AWS reuses the Nitro Enclaves signal above; Azure requires its dc*/ec* confidential-VM families; GCP has no per-instance-type signal for this at all (a genuine gap in that feed, not an oversight), so the option has no effect there. -
Add
Azure Trusted Launchfor Secure Boot + vTPM instances (Azure only, distinct from Confidential Computing's memory encryption). - For FIPS-boundary or data-residency requirements, manually verify that recommended regions are within your geographic compliance boundary โ this is a region choice, not an instance-type one.
- No inventory data ever leaves your browser โ the tool is fully client-side
โ 13. Frequently Asked Questions
๐ General
Q: Is my data secure?
A: Yes. All processing happens in your browser โ your VM inventory never
leaves your machine. The tool loads a static instance catalogue at
start-up; there is no backend server receiving your data.
Q: Why doesn't the output include a dollar amount?
A: Cloud pricing is not static โ it changes with region, OS, discounts,
Savings Plans, Reserved Instances, and enterprise agreements. Showing a
dollar figure in the output would be misleading within weeks, so none
ever appears โ no price column, no CSV field, no export sheet. Since
3.17, the stats bar, App Portfolio Overview, and Executive Print Report
show one aggregate, relative percentage per provider instead ("Optimized
ranks ~X% lower than Like-to-Like"). This tool identifies the right
instance type; use your provider's pricing calculator for
accurate cost figures. The AWS Pricing Calculator Bulk Template export
makes this workflow seamless for AWS.
Q: Can I use this tool offline?
A: Yes โ after your first visit. A service worker caches the pages and
any region data you've used, so those keep working without connectivity,
and you can optionally install the site as an app from your browser.
Regions you've never loaded still need one online visit. A page always
loads the current version when you're online; region data and scripts
update automatically in the background.
Q: Which file formats are supported?
A: CSV (UTF-8) and Excel .xlsx workbooks. A workbook with
several sheets opens the one whose columns best match an inventory โ an
RVTools export lands on its vInfo sheet rather than its
cover tab โ and a picker lets you switch. Common header variants like
vCPUs, RAM, or Hostname are
mapped to the expected columns automatically.
Q: I mapped my columns wrong once and now it keeps doing it. How do I
undo that?
A: When you confirm the column-mapping panel, that answer is remembered
against your file's set of headers, and any later file with the same
headers is mapped the same way without asking. Everything remembered is
listed under Remembered column mappings in the upload section,
with a Forget button on each. Forget one and the next file with
those headers will ask again.
Q: I don't have a file at all. What are my options?
A: Three. Enter VMs manually takes them one at a time โ and if
you have several that are alike, set Copies and they are added
numbered from the name you gave (web โ
web-01โฆweb-05); any row can be corrected afterwards with
the โ๏ธ button rather than deleted and retyped.
Paste rows from a spreadsheet takes them straight from Excel.
And under the sample template there are three ready-made datasets to
load โ a clean one, a 500-VM one, and a deliberately messy one that
shows what the input check catches.
Q: Can I paste rows instead of uploading a file?
A: Yes โ Or paste rows from a spreadsheet under the upload box.
Copy the cells out of Excel or Google Sheets, header row included, and
paste. It is read exactly like an uploaded file: the same column
mapping, the same unit handling, the same input check.
Q: The tool says some of my rows look wrong. What is it
checking?
A: After an upload, the input check names rows that will not size
sensibly โ a missing or zero CPU count or memory figure, a CPU count or
memory size no provider sells (usually a unit that was never converted),
a utilization outside 0โ100%, or a blank VM name โ and gives you the row
numbers as your spreadsheet shows them. It is a report, not a gate: the
file still loads and you can still generate. If the same VM name appears
more than once, it asks whether those are one VM listed twice or
different VMs that share a name, because only you know. If a column is
named like one of this tool's own output columns (typically because an
earlier export was uploaded again), it says so: a run ignores that
column and writes its own, so the old values are never mixed into the
new results. Rename the column in your file to keep its values.
Q: The input check says "How well the data supports sizing". What
does High, Medium and Low mean?
A: It appears only when your file carries percentile or peak columns
(p90, p95, p99 or Peak) and some VMs fall short of them. Per VM:
High means every dimension the row reports (CPU, memory) has a
percentile or peak reading; Medium means only one does;
Low means an average only, or nothing, so bursts are invisible.
It describes what the file carries, not which statistic a run will size
on. The whole-file answer is separate and depends on how many VMs there
are (under 25 Low, 25 to 249 Medium, 250 or more High): thousands of
average-only rows make the file larger, not any row richer. A plain
average-only upload does not show this note at all.
Q: Can I upload an AWS Application Discovery Service export?
A: Yes โ the ADS import template is recognised and needs no
mapping. Its logical-core count becomes the vCPU count (not the socket
or physical-core count), RAM.TotalSizeInMB becomes memory,
and memory utilisation โ which ADS does not report as a percentage โ is
worked out from the memory used against the memory total. Without that
last step your VMs could only be sized on CPU, and their memory would be
left exactly as it is.
Q: Can I upload an RVTools export directly?
A: Yes. The vInfo sheet is found and read, its
VM column is used for the VM name โ not Host,
which is the ESXi server the VM runs on โ and its Memory
column, which holds MiB although the header does not say so, is
converted to GB. The file status confirms it was recognised as an
RVTools export.
Q: My memory column is in MB. Will that work?
A: Yes. A header that says so (Memory (MB),
RAM MiB) is converted, as is a format that is recognised โ
an RVTools export reports MiB without saying so, and that is known. When
neither the header nor the format says, the values are not taken as
proof: if they look like MiB, the input check asks, and nothing
is converted until you answer. A fleet of genuine 512 GB machines is
unusual but real, and dividing it by 1024 would be its own kind of
corruption. You can also set the unit yourself in the column-mapping
panel.
Q: Can I save my filter configuration for next time?
A: Yes โ use the โญ Filter presets bar above the Generate button to save
the current configuration under a name and re-apply it later. Presets
are per page and stored in your browser, and can be exported as a JSON
file to move them to another browser or machine (see Section 9).
โ Technical
Q: Why does the tool recommend a different instance than our cloud
provider's own advisor?
A: Provider advisors (AWS Trusted Advisor, Azure Advisor) typically look
at longer time horizons (14โ90 days) and use conservative thresholds.
This tool applies your chosen utilisation window and thresholds. The
recommendations can legitimately differ โ treat both as data points
rather than absolute answers.
Q: Why are the downsize thresholds set to 40 % instead of 50
%?
A: The 40 %/80 % thresholds align with the approach used by AWS Cost
Optimisation, Azure Advisor, and GCP Recommender. At 40 %, there is
still comfortable headroom for traffic spikes and OS/monitoring
overhead. The old 50 % default was too aggressive for most production
workloads. You can adjust both thresholds in the UI if your environment
requires different values.
Q: I set ENV = Production but got a t3.large recommendation.
Why?
A: Check the Rules Applied column โ the rule engine reports exactly what
happened. If "1a: Burstable excluded" is not listed, verify that the ENV
column value is exactly Production (no extra spaces or
different capitalisation).
Q: Can I use a mix of ENVs in the same CSV?
A: Yes โ rules are applied per row. You can have Production, Staging,
and Dev rows in the same file; each gets its own rule evaluation.
Q: What happens if no instance survives after all rules are
applied?
A: The tool notes the failure in the Rules Applied column with a โ
warning and falls back to the best available instance from the pre-rules
candidate set. This is a signal to either relax filters or review
whether the requirements are achievable in that region.
๐ผ Business
Q: What typical savings can I expect?
A: Organisations commonly see 15โ40 % reduction in compute spend from
right-sizing alone, before applying Reserved Instances or Savings Plans.
The actual figure depends heavily on how over-provisioned the original
fleet is.
Q: How often should I re-run the tool?
A: Monthly for dynamic/seasonal workloads; quarterly for stable
production workloads; immediately after any significant architectural
change or traffic pattern shift.
Q: Can I share results with stakeholders who don't have access to the
tool?
A: Yes โ the downloaded CSV can be opened in Excel or Google Sheets. The
"Rules Applied" column provides plain-English audit notes explaining
every recommendation, making it straightforward to present to
non-technical stakeholders.
Q: Is the AWS Pricing Calculator Bulk Template ready to import
immediately?
A: It populates all required columns with On-Demand, Always On, Shared
Instances defaults. Storage type, IOPS and throughput are left blank for
the calculator to default, and the storage amount is filled in only when
your file carried a Disk (GB) column; add the rest in the calculator
after import if your estimate needs it.
๐ฏ 14. Conclusion
The Cloud Instance Recommender gives you a fast, privacy-first starting point for cloud rightsizing at any scale โ from a handful of VMs to thousands. By combining flexible like-to-like and optimised recommendation modes with a configurable rule engine, it produces recommendations that are not just cheap, but appropriate for the environment, OS, workload type, and compliance posture of each individual VM.
Key things to remember:
- Add ENV, OS, Workload, and Compliance columns to get environment-aware recommendations with a full audit trail
- Use the 40 %/80 % thresholds as a starting point โ adjust them based on whether your utilisation data is averages or percentiles
- No absolute dollar figure is ever in the output โ a relative savings percentage is shown since 3.17, and the AWS Pricing Calculator Bulk Template export is still the way to get an authoritative cost estimate
- Treat recommendations as an informed starting point, not a final answer โ validate in a non-production environment first
- Re-run quarterly to keep pace with changing workloads and the cloud providers' expanding instance catalogues