See it liveWebsite meshlyr.com ↗Open demo demo.meshlyr.com ↗Sign in app.meshlyr.com ↗

The Problem

Ask an operations team for an accurate picture of what is running, what depends on what, and what it costs, and you get three artefacts that disagree with each other: a Visio from two years ago, a CMDB nobody trusts, and a spreadsheet export from the billing console. None of them answers the question that matters during an incident or a change window: if I touch this, what breaks, and who cares?

I have sat in enough change-advisory meetings across banking, aviation and government to know the answer is usually "we think nothing, let's find out". The Cloud Relationship Engine is my answer to that. It discovers the estate directly from the cloud provider APIs, read-only, builds one graph of every resource and the relationships between them, and layers on what you actually need: what changed, what is exposed, what it costs, and which business service it belongs to.

It runs live as Meshlyr, and there is an open demo with a fully synthetic multi-cloud estate at demo.meshlyr.com where you can click around without signing up. Every screenshot in this post uses that synthetic demo data, including any dollar amounts shown.

2clouds live (AWS + GCP)
70+AWS resource types discovered
90 daysof drift history per account
0agents installed in your account
The landing dashboard: KPI tiles, business-service cards, severity breakdown, resources by focus area and a clickable world map of regions, aggregated across every selected account.
The landing dashboard: KPI tiles, business-service cards, severity breakdown, resources by focus area and a clickable world map of regions, aggregated across every selected account.

Feature Tour

The relationship map

The heart of the product is an interactive graph. You start from the account and click to expand: VPC to subnets, subnets to instances, instances to volumes, security groups, roles and log groups. Containment, "uses" and shared relationships are drawn differently, large fan-outs are paged so the canvas stays readable, and clicking never moves the camera or the nodes you already have, which matters more than it sounds when you are tracing a path.

Focus lenses filter the canvas to networking, compute, serverless, databases, storage, secrets, IAM, IaC or monitoring, and compose with a region filter and a Group by Type or Region toggle. A "hide provider-managed defaults" switch removes the noise you do not own: on one real account it took the networking view from 353 nodes to 19.

The relationship map with a node selected. Severity markers sit on affected resources, and their parents are tinted so you can follow the signs down to the cause.
The relationship map with a node selected. Severity markers sit on affected resources, and their parents are tinted so you can follow the signs down to the cause.

Business services

A graph of resources is only useful to the business once it is grouped into the services the business recognises: Payments, Customer Portals, the Data Lake. Membership combines rules (tags, names, types, regions) with relationships on the graph and manual pins, so new resources join their service automatically. Each service gets its own scoped graph, findings, drift, cost and an exportable report.

There is also an assistant, powered by an LLM, that is grounded in the discovered graph. It can only reference resources that actually exist, and its suggestions come back as one-click changes you review and apply rather than prose you have to interpret.

A Tier 1 Payments service with its cost trend, member resources and the assistant suggesting improvements. Suggestions are advisory and only apply when you click them. All figures are synthetic demo data.
A Tier 1 Payments service with its cost trend, member resources and the assistant suggesting improvements. Suggestions are advisory and only apply when you click them. All figures are synthetic demo data.

Security findings and drift

Findings from the providers' native security services are merged into one severity-ranked table across every account and cloud, and every finding links back to the actual node on the map.

Findings across five accounts in two clouds, in one table, filterable by severity and account.
Findings across five accounts in two clouds, in one table, filterable by severity and account.

Drift is where the engine earns its keep. Every discovery run is compared with the previous run and with a pinned baseline, and every change is kept with a before-and-now trace. Changes are severity-rated by what they mean rather than what they are: a storage bucket becoming public or a firewall rule opening up is treated very differently from a tag being edited. Noise can be muted at whatever scope makes sense.

Infrastructure-as-code drift: every CloudFormation and Terraform stack is checked on each discovery run, with drifted stacks flagged and their drifted resources listed.
Infrastructure-as-code drift: every CloudFormation and Terraform stack is checked on each discovery run, with drifted stacks flagged and their drifted resources listed.

Blast radius

Pick any resource and see everything that depends on it, ring by ring. Edge direction matters here and is the part most tools get wrong: when a database fails, it is the things that use the database that are impacted, not the other way round. Impact is expressed in business terms, because the question that will actually be asked is "is a Tier 1 service affected?"

Blast radius from a single database: direct dependants on the inner ring, and the business services they belong to.
Blast radius from a single database: direct dependants on the inner ring, and the business services they belong to.

Cost on every resource

Every resource carries its own daily cost, taken from the providers' detailed billing exports, with net and gross views, coverage reporting and a forecast. Getting this to reconcile with the provider's own console was a project in itself. Billing data and inventory data describe the same resources in different ways, and there are several subtle traps along the way. Recommendations come from three clearly separated sources: the provider's own recommenders, deterministic rules for common waste patterns, and an optional LLM advisor whose suggestions are labelled as advisory and can never claim a saving larger than what the resource has actually cost.

Cost management: per-resource spend by service and by resource, with provider, rule-based and LLM-suggested recommendations kept in separate sections. Synthetic demo data.
Cost management: per-resource spend by service and by resource, with provider, rule-based and LLM-suggested recommendations kept in separate sections. Synthetic demo data.

Architecture diagrams you can export

The same graph renders as a conventional nested architecture diagram (account, region, network, subnet, resource) using official cloud icons, exportable to PNG, SVG and draw.io. The editor understands which connections are legal, so it will not let you draw something that cannot exist in the real cloud.

The generated architecture view, with real icons and labelled relationships, ready to export to draw.io.
The generated architecture view, with real icons and labelled relationships, ready to export to draw.io.

Architecture

The control plane runs serverless on AWS. Discovery never happens on the request path: a daily schedule (or a "Discover now" click) fans out one discovery per connected account, the results are stored as a snapshot, and the web tier only ever reads the latest snapshot. Page loads never wait on a cloud API.

The control plane. The write path (top) discovers and builds snapshots; the read path (bottom) serves them and never calls a customer cloud.
The control plane. The write path (top) discovers and builds snapshots; the read path (bottom) serves them and never calls a customer cloud.
  • Onboarding is infrastructure-as-code, with no agents. On AWS the customer deploys a small CloudFormation stack that creates a read-only role trusting only our control plane, protected against the confused-deputy problem. On GCP it is a Terraform module using Workload Identity Federation, so no service-account key is ever created, which matters because most enterprises block key creation by policy anyway.
  • Discovery is orchestrated, not monolithic. It runs as a Step Functions workflow that sweeps regions in parallel and isolates failures, so one misbehaving region reports itself rather than sinking the whole run.
  • Read-only, metadata only. Secrets, parameters and certificates are discovered for their configuration (rotation, expiry, access policy) and never their values.
  • Multi-tenant from day one. Every request derives the tenant and role from a verified sign-in token, never from anything the browser sends, with per-account permission levels and always-on two-factor sign-in.
  • Versioned permissions. As the discovery permission set grows, the app detects customers running an older role template and offers an in-place update.

The Common Model

The design principle I have been strictest about: only the discovery adapter is cloud-specific. Each cloud has a thin adapter that translates native resources into one cloud-neutral model, and every feature (drift, blast radius, business impact, cost) is a query over that one graph.

Thin adapters in, one graph in the middle, every feature a query over it.
Thin adapters in, one graph in the middle, every feature a query over it.

GCP was fitted to the model after AWS, which is the harder direction and the real test of the idea. It worked: a GCP project flows through exactly the same pipeline and every page renders it with no provider-specific UI logic. Every relationship also records how the engine knows it exists, so a relationship inferred by an LLM or drawn by a person is never confused with one declared by a cloud API.

Lessons Learnt

  • Never make a customer redo their infrastructure-as-code because of something you did. Removing and re-adding an account once invalidated the trust the customer had already deployed. Removal is now reversible.
  • Prove a migration with a structural diff, not a smoke test. Before the new discovery workflow became the default, both paths ran against the same account and their graphs were compared node for node. That surfaced a subtle identity collision no test would have caught.
  • An error is not the same as "found nothing". Treating the two the same once let a temporary credential problem blank a panel for most of a day.
  • Measure, don't assume. An animation that was "self-stopping" turned out to be running most of the time. Assumptions about efficiency are worth exactly what you measured.

Meshlyr is free during the early-access pilot. Have a play with the open demo, or reach out if you would like to connect a real account.