Repository navigation
Azure Migration Strategy
Daniel Truong edited this page Oct 8, 2026
·
9 revisions
Explanation page: what moves to Azure, in what order, and why rproxy is the instrument each time. Mechanics of the pieces already on Azure: Azure Hosting (eagle-public bundle, eagle-admin), Eagle Search (search backend), Eagle DEMI (DEMI).
- eagle-public is served from Azure Front Door behind rproxy. Done.
- Search is served from Azure AI Search through demi-api in both test and prod. Done.
-
DEMI is the central data store for EPIC and replaces
eagle-apiendpoint by endpoint. DEMI has a test estate (c4b0a8-test-rg) and a prod estate (rg-demi-prod, subscriptionc4b0a8-prod). Resource tables: Eagle DEMI. - eagle-api stays on OpenShift until DEMI has absorbed its surface. Porting Express + MongoDB to Azure is work that gets deleted later.
-
eagle-admin is served from an Azure storage static website behind Front Door on test and
prod. Dev has no admin app, and the OpenShift hosting is retired. eagle-admin calls
eagle-api, which stays on OpenShift. Mechanics: Front Door Per-App Split.
- eagle-public hosting. Done.
- Search read path. Done.
- API surface to DEMI, read paths first. Each path is one rproxy upstream switch, revertible on its own. eagle-api pushes to DEMI. The only writer into Eagle is DEMI's sync-out worker, and it goes through eagle-api's API; nothing writes Eagle Mongo directly.
- rproxy last. It only disappears once nothing behind it runs on OpenShift, at which point Front Door rules take over its routing.
The public hostname never moves. projects.eao.gov.bc.ca resolves to the OpenShift router and
route/prod-external terminates TLS. Each cutover is one upstream value in the rproxy Helm
values, reverted by one oc set env or one helm upgrade: no DNS TTL, no certificate re-issue.
-
Cosmos NoSQL is not MongoDB. Eagle's read model leans on aggregation pipelines
(
addProjectLookupAggrsineagle-api/api/helpers/aggregators.jsruns$lookup/$unwindagainst theListcollection to populateObjectIdreferences such asapplicableRegulation). There is nothing to port; the shape is redesigned around Cosmos access patterns or denormalised at write time. -
Write paths need a home first. ENGAGE pushes comment periods to DEMI
(
PUT /engage/engagements/:engagementId), and DEMI's sync-out writes them intoeagle-api(/api/commentperiod).eagle-apicannot retire until the Eagle consumer of sync-out is removed. See ENGAGE–EAGLE Integration.
- Azure has no dev. Test (staging) and prod only. Each Azure repo has a staging workflow and a tag-driven prod workflow (see Deployment Pipeline).
-
Azure Static Web Apps is ruled out. The Resource-Locations policy on
bcgov-managed-lz-livehas no region in common with thestaticSitesregion list. Storage$webbehind Front Door is the pattern. - Detection is built, not inherited. rproxy stays healthy when an Azure upstream fails, so OpenShift notices nothing. Each Azure path needs an outside-in check on the public hostname that matches content, not status. eagle-public has one (alerting off); see Azure Hosting.
-
CI cannot hold a broad built-in role. An ABAC condition on the
c4b0a8management group deniesroleAssignments/writefor Owner, Contributor and User Access Administrator. Edge Bicep deploys fromeagle-edgeCI under a custom role,eagle-edge-deployer-<env>.
Eagle Documentation
Operations
- Deployment Pipeline
- Helm Charts
- Reverse Proxy
- Rollback Procedures
- Eagle Public Release Lines
- Eagle Search Archive
- Azure Migration Strategy
- Azure Hosting
- Front Door Per-App Split
- Front Door Ban Ladder
- Error Logging
- Secrets Management
Architecture
- Architecture Overview
- API Architecture
- Analytics Architecture
- Angular Patterns
- Eagle Public Page Layout
- Eagle Public Adding A Page
- Extended Project Pages
- ENGAGE–EAGLE Integration
- BCGW Project Export
- Eagle Search
- Document Content Search
- Eagle DEMI
- Eagle DEMI Push Sweep
- Eagle DEMI Re-Push and Backfill
- Eagle Notify
- Project Data Models
- Async Jobs API
- Bulk Document Download
Configuration
Help
Repositories
Environments