<aside> โš ๏ธ

Ready to deploy, not deployed. Templates compile and the package is ready. No Azure resources, Entra registrations, role assignments or secrets exist yet (task P08, due 16 Oct).

</aside>

<aside> ๐Ÿ“

Australia East

default region

</aside>

<aside> ๐Ÿ“ฆ

0.5 CPU / 1 GiB

1โ€“3 replicas

</aside>

<aside> ๐Ÿ˜

D2ds_v5 ยท 128 GiB

private PostgreSQL

</aside>

<aside> ๐Ÿ’พ

14-day backups

๐Ÿ—๏ธ Target architecture

flowchart LR
    User[Browser] -->|"HTTPS + Entra token"| App["Container Apps: React + API"]
    Entra["Microsoft Entra ID"] --> User
    ACR["Azure Container Registry"] --> App
    App -->|"Restricted DB role / TLS"| PG["Private PostgreSQL 16"]
    App -->|"Managed identity"| Blob["Private document container"]
    App -->|"Managed identity"| KV["Key Vault"]
    Job["One-off migration job"] -->|"Separate identity / admin role"| PG
    Job --> KV
    App --> Logs["Log Analytics"]

No zone-redundancy or multi-region commitment in the initial config.

๐Ÿš€ Deploy in 4 steps

Prerequisites

Entra

node scripts/entra-manifest.mjs APPLICATION_CLIENT_ID https://APP_HOST > /tmp/steelman-entra-fields.json

Single-tenant registration ยท access_as_user scope ยท token v2 ยท SPA redirect = app origin ยท 7 app roles ยท assignment required. No client secret in the browser.

Validate

python3 scripts/deploy.py validate --subscription SUB_ID --resource-group RG --client-id CLIENT_ID --location australiaeast

Review ARM validation and what-if before continuing.

Deploy

python3 scripts/deploy.py deploy --subscription SUB_ID --resource-group RG --client-id CLIENT_ID --location australiaeast

Foundation โ†’ image built in ACR โ†’ migration job must succeed โ†’ app deployed. Production starts empty.

โœ… Post-deploy acceptance

โ†ฉ๏ธ Rollback

<aside> ๐Ÿ›‘

The schema is the rollback boundary. The app refuses to start unless schema_migrations matches its bundled migrations exactly.

</aside>