Ga naar inhoud

Architectuur

Deze pagina beschrijft het globale ontwerp van het portaal. Het is een referentieontwerp: jouw uitrol kan afwijken in namen, netwerkindeling en de set ingeschakelde functies.

Ontwerpprincipes

Principe Betekenis
Eén codebase, één image per omgeving Elke klantomgeving draait dezelfde code. De build maakt de image één keer en elke omgeving ontvangt die (Uitrol en omgevingen).
Functies via configuratie Een configuratiebestand en feature flags bepalen welke plugins laden (Configuratie).
Data blijft in de omgeving Het portaal leest uit je Azure-omgeving en slaat zijn data op in een database in jouw subscription.
Standaard privé Database, key vault en container registry hebben in het referentieontwerp geen publieke toegang, en de webapp heeft private endpoints. Publieke toegang tot de webapp is een instelling.

Systeemcontext

flowchart LR
    user[Portal user]
    subgraph env["Portal environment (customer subscription)"]
        portal[Portal<br/>web app and backend]
    end
    entra[Microsoft Entra ID]
    azure[Azure: Resource Graph,<br/>Cost Management, Defender,<br/>Policy, Log Analytics]
    repos[Azure DevOps and GitHub<br/>repositories]
    models[Model endpoint<br/>Azure AI Foundry]
    mcp[MCP clients<br/>editors and agents]

    user -->|HTTPS| portal
    mcp -->|HTTPS| portal
    portal -->|sign-in, users, groups| entra
    portal -->|read| azure
    portal -->|read catalog files, pull requests| repos
    portal -->|chat completions| models

Componenten

flowchart TB
    subgraph web["App Service (Linux container)"]
        fe[Frontend<br/>React, Backstage]
        be[Backend<br/>Node.js, Backstage]
        fe --> be
    end
    subgraph plugins["Backend plugins"]
        cat[Catalog and modules]
        ins[Insights:<br/>cost, network, security, compliance]
        ag[AI agents]
        mr[Module registry]
        act[MCP actions]
        perm[Permission policy]
    end
    be --- plugins
    pg[(PostgreSQL<br/>Flexible Server)]
    sql[(Azure SQL<br/>cost data)]
    be --> pg
    ins --> sql
    ag --> pg
Component Doel
Frontend Single-page webapplicatie gebouwd op Backstage. Pagina's: workloads, domeinen, organisatie, docs, create, AI-agents, module registry, MCP inspector.
Backend Eén Node.js-proces dat alle backendplugins, de MCP-server en de AI-agent loop host.
Catalog en modules Entiteitenmodel, Azure Resource Graph-provider, Azure DevOps-provider, samenvoegen van fragmenten. Zie Catalog en entiteitenmodel.
Insights Kosten, netwerk, security en compliance. Zie Insights.
AI-agents In-process agent loop die een modelendpoint en de eigen tools van het portaal aanroept. Zie AI-agents.
PostgreSQL Catalog, plugindata en agentgesprekken. Alleen Entra-authenticatie.
Azure SQL Door Data Factory voorbereide kostendata. Alleen aanwezig als cost insights zijn ingeschakeld.

Azure-resources per omgeving

De Terraform-modules maken de volgende resources aan voor één omgeving. Optionele onderdelen hangen af van de functies die je inschakelt.

Resource Opmerkingen
Linux-webapp met een staging slot Container image uit de registry, system- en user-assigned identities, alleen HTTPS, minimaal TLS 1.2, health check op het liveness-endpoint, VNet-integratie
App Service plan De referentieomgeving gebruikt een premium v3 P0v3-plan. Dimensioneer op je belasting.
PostgreSQL Flexible Server Versie 16, standaard burstable B2s, 32 GB opslag, back-up van 7 dagen, geen geo-redundantie, geen publieke toegang, alleen Entra-authenticatie, extensies azure_storage, pg_cron en pg_stat_statements
Key Vault RBAC-autorisatie, purge protection, soft delete van 7 dagen, geen publieke toegang
Container registry Premium SKU, geen publieke toegang
Application Insights en Log Analytics Telemetrie en logs
Private endpoints Voor de productie- en staging slot, en voor de ondersteunende services
Cost insights (optioneel) Data Factory, storage, optionele Data Lake Gen2-accounts, Azure SQL (standaard S0), managed identities en foutalert. Zie Cost insights-setup.
AI Foundry (optioneel) AIServices-account, project, modeldeployments en private endpoint. Zie AI-setup.
Alerting (optioneel) Een PagerDuty-service geïntegreerd via een Azure Monitor action group

Bestaande landing zone

Het portaal wordt uitgerold in een bestaande spoke. Een data-only Terraform-module leest de bestaande resource group, het virtual network, de subnets, de Key Vault en de Log Analytics workspace van de spoke, in plaats van ze aan te maken. Zie Spoke canvas.

Data- en netwerkgrenzen

Twee beslissingen bepalen de grenzen (Beslissingen):

  • De omgeving is privé. De webapp, registry, key vault en database zijn bereikbaar via private endpoints. De deployment runners van de leverancier bereiken ze via private endpoints die de klant goedkeurt, en de klant kan die verbinding intrekken.
  • Data wordt verwerkt in de klantomgeving. Kosten-, security-, netwerk- en compliancedata worden gelezen en opgeslagen in de subscription van de klant, zodat de leverancier voor deze data niet als verwerker optreedt.
flowchart LR
    subgraph prov["Provider platform network"]
        run[Deployment runners]
    end
    subgraph cust["Customer subscription"]
        subgraph vnet["Spoke VNet"]
            pe1[Private endpoints:<br/>storage, key vault,<br/>registry, SQL, web app,<br/>staging slot]
            app[Web app<br/>VNet integration]
            pg[(PostgreSQL<br/>delegated subnet)]
        end
    end
    run -->|manual connection,<br/>customer approves| pe1
    app --> pg
    app --> pe1

Publieke toegang tot de webapp heeft drie waarden in de Terraform-module: geen publieke toegang, volledige publieke toegang (de standaard), of een beperkte waarde bedoeld voor de Azure AI agent service. Gebruik een WAF of een toegangsbeperking voor de webapp voor gebruikersverkeer (WAF en eigen domein).

Uitgaand HTTPS vanaf de webapp is nodig naar de service tags AzureResourceManager, AzureActiveDirectory en AzureMonitor, en naar graph.microsoft.com. Zie Vereisten.

Subnets in het referentieontwerp

Subnet Doel
default Private endpoints
app service Gedelegeerd aan de webapp (VNet-integratie)
PostgreSQL Gedelegeerd aan PostgreSQL Flexible Server
container app Alleen gebruikt wanneer AI-agents draaien met bring-your-own-resources

Dataflow van kosten

flowchart LR
    cm[Cost Management<br/>FOCUS export] -->|Parquet, Snappy| st[(Storage account /<br/>Data Lake)]
    st --> adf[Data Factory<br/>daily pipeline]
    adf --> sql[(Azure SQL<br/>views)]
    sql --> be[Portal backend]

Het portaal maakt de kostenexports zelf aan. Zie Cost insights-setup.