Category Archives: Azure

Azure Canvas 2.0: Design, Import, Validate and Deploy Azure Architecture in Your Browser

Back in March I wrote a blog about an early version of Azure Canvas. It looked pretty but I quickly realized it would go nowhere as a downloadable C# app and I abandoned it before I expanded it further. What I needed was a webapp which was truly accessible. I’m happy to say the 2.0 is here and is more-or-less feature complete. At least, I think so, but I welcome and further suggestions for improvement, especially from those who are involved with this kind of thing day to day. Please post any suggestions in the comments below. I will read them and take them onboard.

Azure architecture often starts as boxes and arrows, becomes Infrastructure as Code, and eventually meets Azure Resource Manager, which may have several opinions about your boxes and arrows.

Azure Canvas brings those stages together in one free, browser-based tool. You can design an Azure environment visually, import existing resources, validate the design against a live subscription, generate templates, and deploy directly to Azure.

Try it: https://azure-canvas.com/

A diagram that understands Azure

Azure Canvas is more than a collection of draggable icons. It understands placement and relationships:

– VNets contain subnets.

– VMs, NSGs, route tables, NAT gateways, private endpoints, and Application Gateways live in subnets.

– VPN Gateway, Azure Bastion, and Azure Firewall receive their required reserved subnets.

– VNet peerings, VPN connections, public IP associations, monitoring links, identities, and application dependencies are represented explicitly.

The searchable toolbox covers networking, compute, containers, storage, databases, security, observability, messaging, and events. Resource-type captions are shown on badges by default, while right-click Explain provides a summary, typical connections, and a Microsoft Learn link.

Import what already exists

After signing in with Microsoft Entra ID, Azure Import can map either an entire resource group or one VNet with its connected resources.

The import is read-only and reconstructs relationships from Azure Resource Manager IDs. Imported resources can replace the current canvas or be added to it, which is useful when combining environments or subscriptions into a larger architecture view. Unsupported resource types are reported rather than silently ignored.

Imported resources retain their subscription name and region. Azure Canvas can display these as visual-only Subscription and nested Region boundaries, helping distinguish production, development, disaster-recovery, or cross-subscription environments without forcing Resource Groups to dominate a high-level network diagram.

Practical diagramming features

The canvas now includes:

– Arrange Canvas, including extra spacing for peered VNets and a separate Resource Group metadata rail.

– Change Region to update the design to a different Azure region.

– Marquee selection, Shift+click selection, group movement, keyboard deletion, and dependency-aware cleanup.

– Resizable VNets and automatic subnet layout.

– Freestyle Text Boxes for notes and dashed callouts attached to resources.

– Compact Labels that sit directly on an existing connection or object border for details such as `TCP 443`, protocols, or IP information. Labels move with their target and do not create extra connection lines.

– Light and dark modes.

– JSON import/export and browser-local saving.

The **Load Example** button creates a randomized, fully wired architecture for exploring the tool. The generated design is connected from the start rather than presenting a collection of empty relationship dropdowns.

Better network configuration

Route Tables now support multiple UDR entries. Each route has its own name, address prefix, next-hop type, and optional virtual-appliance IP address.

All routes are:

– Editable in the Properties panel.

– Imported from existing Azure route tables.

– Checked by diagram validation.

– Included in generated ARM JSON and Bicep templates.

NSGs also account for service-specific requirements. For example, when an NSG shares a subnet with Application Gateway v2, Azure Canvas includes the required `GatewayManager` traffic rule instead of waiting for Azure to explain the omission during deployment.

Validate against a real subscription

Validate Design combines local architecture checks with live Azure checks, including:

– Resource provider registration.

– Region availability.

– VM size availability by region.

– Storage account name availability.

– CIDR validity and overlap.

– Required subnet and resource relationships.

– Service-specific constraints.

Warnings remain advisory, while structural errors block deployment.

Generate or deploy

The Generate menu provides:

– A deployable Bicep template.

– A deployable ARM JSON template.

– A Terraform starter configuration for the currently supported Terraform resource set.

For the shortest route from diagram to Azure, Azure Deploy submits the generated ARM JSON directly to Azure Resource Manager. No local Azure CLI or Bicep compiler is required.

Deployment progress is monitored for up to 60 minutes to accommodate slower services. VPN Gateway and Azure Bastion designs display timing warnings before deployment. Azure errors are shown in selectable text, with nested failure details extracted where possible.

If a Resource Group already exists in another region, Azure Canvas explains the conflict and offers two sensible recovery paths: align the design using Change Region, or open the existing Resource Group in Azure Portal and delete it only if it is an unused failed deployment.

Lessons from deploying for real

Building Azure Canvas has reinforced that “valid template” and “Azure will deploy it” are not the same sentence.

Real deployments exposed retired VM image SKUs, regional resource mismatches, provider-registration limitations, subnet dependency races, gateway timing, quota limits, Application Gateway NSG requirements, and API properties that are technically mandatory even when their value is an empty array.

Every one of those failures improved the generator and the deployment experience. Azure remains an enthusiastic reviewer.

Privacy and access

Azure Canvas runs in the browser. Diagrams can be stored locally or exported as JSON. Azure access uses the signed-in user’s delegated permissions, and Azure Import is read-only. There is no application backend receiving your diagram by default.

Who is it for?

Azure Canvas is for architects, network and security teams, engineers, students, and anyone who prefers to understand an environment visually before expressing it as code.

It is free, actively evolving, and shaped by practical feedback from people designing and operating real Azure environments.

Try Azure Canvas: https://azure-canvas.com/

Azure Canvas 1.0 (early prototype!)

I have mentioned elsewhere that I might look into a version of space invaders in another language, most likely Python…however I woke up one night at 3AM with a different idea and figured a drag and drop Azure networking app would be a better use of my time.

Well, it’s debatable – I have deliberatly not looked to see if there are other applications like this around but I would virtually guarantee if I did then I’d find some. Feel free to add any you recommend in the comments. Nonetheless it isn’t the point. I wanted to do this myself and although it is still a work in progress I am happy with that progress so far.

This is version 1.0 and is a C#/WPF based app which allows you to design your network by dragging items from the toolbox on the left. You can right-click to update the properties of those objects once they are on the ‘canvas’ adding extra subnets if they’re vnets, OS versions/sizes/disk types etc if they VMs, zone redundancy, route types etc if they’re gateways, etc – you get the picture.

Objects ‘snap’ to the grid and snap to their respective vNets. The app will ensure that IP ranges don’t overlap and names aren’t duplicated. When you’re happy, if you’ve authenticated with your tenant, you can hit the ‘validate’ button to ensure it complies with what is actually available in Azure, eg some locations may not support certain VM sizings for example. If you don’t have access to log into your tenant then that’s fine too – the app provides some standard defaults.

Once you’re happy with what you have, hit one of the ‘generate’ buttons – Bicep or JSON to create an IaC template that you can import into your tenant and create the resources as you have designed them. Remember to save your diagram if you want to tweak it later.

As I say, this is a work in progress and there is still a lot of tools it is missing. Feel free to download the code from github and add new tools. I may do the same but I already have a 2.0 in the pipeline which is an HTML 5-based app which can be run direct from the web. This is also in the repo if you poke around but it is still in testing and requires more work. I will post here when I’m a bit further down the line on this one but it currently lacks a bit of the polish of this version, something that will be fixed in due course.

Download : GITHUB (full C# source)

https://github.com/bondy666/AzureCanvas/tree/4e1bcebae715a83362e6197d641dcf8ab82ed90a/AzureCanvas%201.0