Skip to content

Web app on Azure

Front Door to App Service outside the VNet, with only its integration interface in the app subnet, reaching Azure SQL and Key Vault through private endpoints and Private DNS zones, with Azure's filled arrowheads.

azure10 nodes5 groups9 edges
Open full size
Web app on Azure with Front Door, App Service and private endpointsWeb app on Azure with Front Door, App Service and private endpointsWeb app on Azure with Front Door, App Service and private endpointsWeb app on Azure with Front Door, App Service and private endpoints
azure-web-app.yamlOn GitHub
# yaml-language-server: $schema=../references/diagram.schema.json
title: Web app on Azure
subtitle: Front Door sends traffic to App Service, which reaches Azure SQL and Key Vault through private endpoints
direction: down
# Filled triangles, as in Azure's reference diagrams; one port per edge.
arrowhead: filled
layout: { merge: false }

legend:
  solid: Request traffic
  dotted: Telemetry

groups:
  sub: { type: azure:subscription, label: Production subscription }
  rg: { type: azure:resource-group, label: rg-web-prod, in: sub }
  vnet: { type: azure:vnet, label: vnet-web-prod 10.20.0.0/16, in: rg }
  snet-app: { type: azure:subnet, label: snet-app-integration, in: vnet }
  snet-pe: { type: azure:subnet, label: snet-pe, in: vnet }

nodes:
  users: { icon: azure:users, label: Users }
  fd: { icon: azure:front-door, label: Azure Front Door, note: WAF policy, in: rg }
  # App Service is a PaaS service outside the VNet; only its integration interface sits in the subnet.
  app: { icon: azure:app-service, label: App Service, note: Web app, in: rg }
  vnet-int: { icon: azure:network-interfaces, label: Integration interface, note: Outbound traffic only, in: snet-app }
  pe-sql: { icon: azure:private-endpoint, label: Private endpoint, note: SQL Database, in: snet-pe }
  pe-kv: { icon: azure:private-endpoint, label: Private endpoint, note: Key Vault, in: snet-pe }
  sql: { icon: azure:sql, label: Azure SQL Database, in: rg }
  kv: { icon: azure:key-vault, label: Key Vault, note: Connection secrets, in: rg }
  # Private DNS zones make App Service resolve the private endpoints instead of the public ones.
  dns: { icon: azure:dns-zones, label: Private DNS zones, note: privatelink zones, in: rg }
  insights: { icon: azure:app-insights, label: Application Insights, note: Telemetry, in: rg }

edges:
  - users -> fd: HTTPS
  - fd -> app
  - app -> vnet-int: VNet integration
  - vnet-int -> pe-sql
  - pe-sql -> sql: Private Link
  - vnet-int -> pe-kv
  - pe-kv -> kv: Private Link
  - vnet-int -> dns: name resolution
  # Laid out Insights -> App Service (arrowhead at Insights) so it sits beside Front Door
  # instead of past the VNet.
  - { from: insights, to: app, arrow: start, line: dotted }

Start from this one

Copies the spec to diagram.yaml, then renders every format.

$ orrery init azure-web-app$ orrery render diagram.yaml -f all --theme both