Coach Guide — Challenge 3: Connect Fabric to the Enterprise
Attendee challenge:
challenges/challenge-03-onelake-foundation.md
Snapshot
| Est. time | 2 h |
| Difficulty | ⭐⭐⭐ (300) |
| They build | Fabric Lakehouse with OneLake shortcuts plus Cosmos DB Mirroring |
| Key services | Fabric Lakehouse, OneLake shortcuts, Cosmos DB Mirroring, workspace identity |
Coaching objectives
This is the Fabric foundation aha moment: enterprise data does not need another copy job before it can become useful. Teams should leave understanding two distinct patterns:
- OneLake shortcuts expose ADLS Gen2 files in Fabric with zero duplication.
- Cosmos DB Mirroring continuously replicates operational data into OneLake Delta tables without a hand-built connector pipeline.
What good looks like: the team opens a Lakehouse, browses four shortcuts, opens a mirrored Cosmos database with recent rows, runs one query against each path, and explains why this feeds Bronze in Challenge 4.
The reference path
Run from the repo root unless noted.
Install setup dependencies
cd resources/fabric-control-tower pip install -r src/setup/requirements.txtConfirm storage RBAC
- The Fabric workspace identity / managed identity needs Storage Blob Data Reader on the ADLS Gen2 account created in Challenge 2.
- The setup script uses ADLS Gen2 shortcuts with the storage DFS endpoint, so the URL should look
like
https://<account>.dfs.core.windows.net. - Containers expected by the script:
costs,metrics,logs,metadata.
Create workspace, Lakehouse, shortcuts, notebooks, and pipelines
python src/setup/setup_fabric_workspace.py \ --workspace-name "Observability-Analytics" \ --storage-account-url "https://<account>.dfs.core.windows.net" \ --capacity-id "<fabric-capacity-id>"The script creates/reuses the Fabric workspace, creates the
ObservabilityLakehouse, adds shortcuts underFiles/, imports notebooks fromfabric/notebooks/, and imports pipeline JSON fromfabric/pipelines/. It prints the workspace and Lakehouse IDs; have the team capture them.Configure Cosmos DB Mirroring
python src/setup/setup_cosmos_mirroring.py \ --workspace-id "<workspace-id>" \ --cosmos-account "<cosmos-account-name>" \ --database "observability"Real flags are
--workspace-id,--cosmos-account, and--database. The current script mirrorsconversationsandinteractions; the README narrative referencesconversations,messages, andfeedback. Coach teams to verify the actual containers created in Challenge 1 and adjust selection in Fabric UI or the script if their deployment differs.Handle async Fabric API creation
setup_fabric_workspace.pyandsetup_cosmos_mirroring.pyboth tolerate existing items.- If item creation returns
202 Accepted, wait for provisioning to finish and rerun the script.
Checkpoint verification
Ask the team to show:
- Workspace + Lakehouse — workspace assigned to the intended capacity;
ObservabilityLakehouse exists. - Shortcuts —
Files/costs,Files/metrics,Files/logs,Files/metadatabrowse successfully. - Zero-copy proof — a file visible through a shortcut matches the ADLS Gen2 landing-zone path from Challenge 2.
- Mirroring — mirrored database item exists; selected tables are present; status is running or healthy.
- Freshness — after a new agent conversation, the row appears in Fabric with target latency under roughly one minute.
- Queries — one shortcut-backed file query and one mirrored-table query run successfully.
- Explanation — team can state: shortcuts are pointers; Mirroring replicates to Delta.
✅ Pass when all four shortcuts work, mirrored tables are syncing, and the team can explain both data movement patterns without prompting.
Common pitfalls & fixes
| Pitfall | Fix |
|---|---|
| Shortcut creation or browsing returns 403 | Grant the workspace identity / managed identity Storage Blob Data Reader on the Challenge 2 storage account; wait for RBAC propagation |
| Fabric Mirroring tenant setting disabled | Fabric admin must enable Mirroring and service principal / managed identity access in tenant settings |
| Cosmos continuous backup / analytical store not enabled → mirrored tables empty | Enable the required Cosmos DB Mirroring prerequisites for the source account/database, then restart Mirroring |
| Wrong capacity ID | Use the Fabric capacity GUID from Challenge 0, not the display name; confirm the workspace is assigned to that capacity |
| Cross-tenant identity issues | Keep Azure subscription, Cosmos DB, storage, and Fabric workspace in the same tenant for the RVAS path |
| Fabric API returns 202 Accepted and item ID is missing | Creation is asynchronous; wait in Fabric until the item appears, then rerun the idempotent script |
metadata vs resource-metadata naming confusion |
The script creates shortcut metadata; the README's notebook section may call the domain resource-metadata. Verify the actual Challenge 2 container name and keep the path consistent before Challenge 4 |
| Mirrored table names differ from the guide | Check Cosmos DB containers from Challenge 1. Current setup script uses conversations and interactions; select messages/feedback only if those containers exist |
Talking points (mini-briefing)
- OneLake is the unifier. The customer sees one Fabric data estate even when source data still lives in Azure storage or operational databases.
- Shortcuts eliminate waste. No duplicate storage bill, no egress-heavy copy, no stale export job. Fabric reads the ADLS Gen2 files already landed in Challenge 2.
- Mirroring is near-real-time without connector glue. Cosmos DB conversations flow into OneLake Delta tables so data engineers can query them like lake data.
- This is the Bronze feed. Challenge 4 will refine shortcut files and mirrored tables into Bronze, Silver, and Gold products for reliability, cost, and performance.
- Identity is the enterprise control plane. If RBAC is right, the pattern scales; if identity is wrong, every shortcut and mirror becomes a support ticket.
If they finish early
- Explore OneLake file explorer and compare shortcut paths to the source ADLS Gen2 account.
- Inspect the mirrored Delta tables and note schema differences between Cosmos JSON and lake tables.
- Generate a new agent conversation and measure observed Mirroring latency.
- Open the imported notebooks and identify where each shortcut/mirrored table will feed Challenge 4.
- Sketch the Bronze table names they expect to create from each source.
Reference assets
resources/fabric-control-tower/README.md— setup narrative, shortcuts, Mirroring, notebooks, pipelinesresources/fabric-control-tower/src/setup/setup_fabric_workspace.py— workspace, Lakehouse, shortcuts, notebook/pipeline importresources/fabric-control-tower/src/setup/setup_cosmos_mirroring.py— mirrored database setup and status pollingresources/fabric-control-tower/infra/main.bicep— storage, Key Vault, managed identity reference infrastructuredocs/architecture.md— OneLake shortcuts + Mirroring in the overall Control Tower flow