Challenge 3 — Connect Fabric to the Enterprise
Mission log. The Control Tower has signals now — agent conversations in Cosmos DB, telemetry and cost files in ADLS Gen2 — but the customer's enterprise data is still sitting outside the tower walls. Your job is to connect it to Microsoft Fabric without copying piles of data around. This is where OneLake becomes the customer's unifying data estate.
In this challenge you build the Fabric foundation for the rest of the RVAS: a Lakehouse that sees the Challenge 2 landing-zone files through OneLake shortcuts, and a mirrored Cosmos DB source that brings Challenge 1 agent conversations into OneLake Delta tables for near-real-time analytics.
The important distinction: shortcuts are zero-copy pointers to existing files; Mirroring is managed replication into Fabric. You need both.
Objectives
By the end of this challenge you will have:
- A team Fabric workspace assigned to your Fabric capacity.
- An Observability Lakehouse in that workspace.
- Four working OneLake shortcuts to the ADLS Gen2 landing-zone containers from Challenge 2:
costs,metrics,logs, andmetadata. - Cosmos DB Mirroring configured for the agent conversation data from Challenge 1.
- Proof that Fabric can query both a shortcut-backed file and a mirrored Cosmos table.
- A crisp explanation of zero-copy shortcuts vs Mirroring replication.
Prerequisites
- ✅ Challenge 1 complete — the agent workload has written conversation data to Cosmos DB.
- ✅ Challenge 2 complete — the ADLS Gen2 landing zone contains files in
costs,metrics,logs, andmetadata. - Fabric capacity ID from Challenge 0.
- ADLS Gen2 DFS endpoint from Challenge 2, like
https://<account>.dfs.core.windows.net. - Cosmos DB account name and database name from Challenge 1.
- Fabric tenant settings allow service principal / managed identity access and Mirroring.
- The reference setup assets in
resources/fabric-control-tower/.
The foundation
Your architecture now gets its Fabric entry point:
Challenge 2 ADLS Gen2 landing zone Challenge 1 Cosmos DB
costs · metrics · logs · metadata conversations · messages/feedback
│ │
│ OneLake shortcuts (zero copy) │ Fabric Mirroring
▼ ▼
Fabric Lakehouse Files/ Mirrored Delta tables
└───────────────► Challenge 4 Bronze layer ◄───────────────┘
Shortcuts keep the source files where they are. Mirroring continuously lands operational records into OneLake-managed Delta tables. Challenge 4 will use both as Bronze inputs.
Your mission
1. Give Fabric permission to see the landing zone
- Identify the workspace identity / managed identity your Fabric workspace will use for shortcuts.
- Grant it Storage Blob Data Reader on the ADLS Gen2 storage account from Challenge 2.
- Confirm the storage account DFS endpoint and the four expected containers are available:
costs,metrics,logs, andmetadata.
This is the most common failure point. If Fabric cannot read the storage account, shortcuts may create but browsing/querying them will fail.
2. Create the Lakehouse and OneLake shortcuts
- Create or reuse your team Fabric workspace on the Fabric capacity.
- Create a Lakehouse for the Control Tower foundation.
- Add OneLake shortcuts under the Lakehouse
Files/area that point to the four ADLS Gen2 containers. - Browse each shortcut and confirm you are seeing the same files that landed in Challenge 2 — not a copied export.
The provided setup script can automate the workspace, Lakehouse, shortcuts, notebook imports, and pipeline imports:
cd resources/fabric-control-tower
pip install -r src/setup/requirements.txt
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>"
3. Mirror the agent conversation database
- Enable the Cosmos DB prerequisites for Fabric Mirroring, including continuous backup / analytical store as required by your Cosmos DB configuration.
- Create a Fabric mirrored database item for the Cosmos DB database used by the agent workload.
- Select the conversation containers from Challenge 1. The reference assets describe
conversations,messages, andfeedback; the included setup script currently configuresconversationsandinteractions, so verify the actual container names created by your workload. - Start Mirroring and wait for the status to become healthy/running.
Reference command:
cd resources/fabric-control-tower
python src/setup/setup_cosmos_mirroring.py \
--workspace-id "<fabric-workspace-id>" \
--cosmos-account "<cosmos-account-name>" \
--database "observability"
4. Prove both paths work
Show your team and coach that Fabric can read from both enterprise connection patterns:
- Shortcut path: browse
Files/costs,Files/metrics,Files/logs, andFiles/metadatain the Lakehouse and open or query one file. - Mirroring path: open the mirrored database, confirm the expected tables are present, and verify the sync status shows recent activity.
- Latency target: after adding one new agent conversation, look for it in the mirrored table within roughly a minute.
- Query proof: run one simple query against a shortcut-backed file and one simple query against a mirrored table.
Success criteria
- Fabric workspace is assigned to the correct capacity and the team can open it.
- Lakehouse exists for the Control Tower foundation.
- Four shortcuts exist and browse successfully:
costs,metrics,logs,metadata. - Browsed shortcut files match the ADLS Gen2 files from Challenge 2 — no duplicate copy was made.
- Cosmos DB mirrored database exists with the expected conversation tables.
- Mirroring is running/healthy and recent records are syncing.
- Your team can query one shortcut file and one mirrored table.
- Your team can explain zero-copy shortcut vs Mirroring replication to your coach.
🧭 Checkpoint: show your coach the Lakehouse shortcuts, the mirrored Cosmos tables, and one query from each path. Then explain which path copies data and which path does not.
Hints
What does "zero copy" mean here?
A OneLake shortcut is a pointer. The files stay in the ADLS Gen2 storage account from Challenge 2, but
Fabric presents them inside the Lakehouse Files/ tree. You avoid duplicate storage, export jobs, and
extra egress. If the source file changes, Fabric reads the source location.
Granting storage access
Use the storage account from Challenge 2 and grant the Fabric workspace identity / managed identity a data-plane role such as Storage Blob Data Reader at the storage-account scope. RBAC can take a few minutes to propagate before shortcut browsing works.
What the workspace setup script creates
setup_fabric_workspace.py
uses the Fabric REST API to:
- Create or reuse the workspace.
- Create the
ObservabilityLakehouse. - Create shortcuts for
costs,metrics,logs, andmetadataunderFiles/. - Import notebooks from
resources/fabric-control-tower/fabric/notebooks/. - Import pipelines from
resources/fabric-control-tower/fabric/pipelines/.
If the Fabric API returns an async accepted response, wait for the item to finish provisioning and rerun the script if needed.
Checking mirrored tables
Open the mirrored database item in Fabric and look for the selected Cosmos DB containers as tables. If they are empty, generate a few more agent conversations in the Challenge 1 app, then re-check the Mirroring status and sync timestamp.
Quick query ideas
For a shortcut file, use a Fabric notebook to read a Parquet file or folder from Files/costs or
Files/metadata. For a mirrored table, run a simple SELECT TOP 10 in the mirrored database SQL
endpoint or inspect it from Spark. Keep it simple — Challenge 4 will do the heavy transformation.
Resources
resources/fabric-control-tower/README.md— Fabric setup, shortcuts, Mirroring, notebooks, and pipelinesresources/fabric-control-tower/src/setup/setup_fabric_workspace.py— workspace, Lakehouse, shortcuts, importsresources/fabric-control-tower/src/setup/setup_cosmos_mirroring.py— Cosmos DB Mirroring setupdocs/architecture.md— OneLake shortcuts and Mirroring in the end-to-end architecture
⬅️ Previous: Challenge 2 — Build the Telemetry Landing Zone
➡️ Next: Challenge 4 — Refine the Signal