Skip to content

Deployment Topology


Azure resource topology

flowchart TB
    classDef az fill:#dbeafe,stroke:#2563eb
    classDef net fill:#dcfce7,stroke:#16a34a
    classDef sec fill:#fff7ed,stroke:#ea580c

    subgraph Sub["Azure Subscription"]
        subgraph RG["Resource Group: rg-capdash-prod"]
            subgraph VNet["VNet: vnet-capdash-prod"]
                subgraph AppSubnet["Subnet: snet-app"]
                    WebApp[App Service\napp-capdash-prod]:::az
                end
                subgraph FuncSubnet["Subnet: snet-func"]
                    FuncApp[Function App\nfunc-capdash-worker]:::az
                end
                subgraph DataSubnet["Subnet: snet-data"]
                    SQL[(Azure SQL\ncapdash-prod/CapacityDashboard)]:::az
                end
            end
            KV[Key Vault\nkv-capdash-prod]:::sec
            APPI[Application Insights\nappi-capdash-prod]:::az
            ASP[App Service Plan\nasp-capdash-prod\nB2 Linux]:::az
        end
    end

    WebApp -->|Private Endpoint| SQL
    FuncApp -->|Private Endpoint| SQL
    WebApp -->|Private Endpoint| KV
    FuncApp -->|Private Endpoint| KV

CI/CD pipeline

sequenceDiagram
    participant Dev as Developer
    participant GH as GitHub Actions
    participant AZ as Azure (ARM)
    participant APP as App Service / Function App

    Dev->>GH: git push → main branch

    Note over GH: bicep-deploy.yml triggers

    GH->>GH: az login (OIDC fedcred)
    GH->>AZ: az deployment group create\n--template-file infra/bicep/main.bicep

    AZ->>AZ: Provision / update resources\n(idempotent, ARM handles drift)
    AZ-->>GH: Deployment outputs\n(webAppName, functionAppName, ...)

    GH->>APP: az webapp deploy\n--src-path dist.zip
    GH->>APP: az functionapp deployment\n--src-path worker.zip

    GH->>APP: az webapp config appsettings set\n(push Key Vault refs, APPI connection, etc.)

    APP-->>GH: Deployment complete

    Note over GH: Health check — GET /healthz
    GH->>APP: GET https://{webAppUrl}/healthz
    APP-->>GH: 200 { status: ok }

Environments

Environment Branch Infra Bicep parameter file
production main rg-capdash-prod infra/bicep/params/prod.bicepparam

Info

A staging environment is not yet provisioned. PRs run Bicep what-if only.