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.
- Seven working OneLake shortcuts to the ADLS Gen2 landing-zone containers from Challenge 2:
costs,metadata, three application telemetry sources, and two platform diagnostic sources. - 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,metadata,am-apprequests,am-appdependencies,am-appmetrics,insights-logs-audit, andinsights-metrics-pt1m. - Fabric capacity ID from Challenge 0.
- ADLS Gen2 DFS endpoint from Challenge 2, like
https://<account>.dfs.core.windows.net. - Fabric cloud connection ID for that ADLS Gen2 endpoint, created in Step 1.
- 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 · metadata · am-* · insights-* conversations · interactions
│ │
│ 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. Create the ADLS Gen2 cloud connection
- Grant your organizational account Storage Blob Data Reader on the ADLS Gen2 storage account from Challenge 2.
- Confirm the storage account DFS endpoint and the seven required containers are available:
costs,metadata,am-apprequests,am-appdependencies,am-appmetrics,insights-logs-audit, andinsights-metrics-pt1m. - In Fabric, open Settings > Manage connections and gateways, select New, and create a Cloud connection of type Azure Data Lake Storage Gen2.
- Use the storage account DFS endpoint as the server, select Organizational account authentication, and set the privacy level to Organizational. If prompted for a path, use the storage account root so the connection can reach all seven containers.
- Open the new connection's settings and copy its Connection ID. You will pass this GUID to the setup script.
This is a one-time setup. One cloud connection can authenticate all seven shortcuts because they use the same storage account.
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 the seven OneLake shortcuts under the Lakehouse
Files/area using this contract:Lakehouse shortcut ADLS Gen2 container Files/costscostsFiles/metadatametadataFiles/telemetry/apprequestsam-apprequestsFiles/telemetry/appdependenciesam-appdependenciesFiles/telemetry/appmetricsam-appmetricsFiles/diagnostics/auditinsights-logs-auditFiles/diagnostics/platformmetricsinsights-metrics-pt1mBrowse 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" \
--connection-id "<fabric-cloud-connection-id>" \
--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.
- In Fabric, create an Azure Cosmos DB v2 cloud connection for the Challenge 1 account using Organizational account authentication. Copy its Connection ID from the connection settings.
- 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" \
--connection-id "<fabric-cosmos-connection-id>"
4. Expose the mirrored tables in the Lakehouse
A mirrored database is a separate Fabric item, so Spark notebooks cannot read its Delta tables by
path. Add one OneLake table shortcut per mirrored container into the Lakehouse Tables/dbo area
so the Challenge 4 notebooks can read them:
| Lakehouse shortcut | Mirrored database source |
|---|---|
Tables/dbo/conversations |
CosmosDB-agentsdb → Tables/agentsdb/conversations |
Tables/dbo/interactions |
CosmosDB-agentsdb → Tables/agentsdb/interactions |
In the Fabric UI:
- Open the Lakehouse, hover Tables, then choose New shortcut → Microsoft OneLake.
- Pick the
CosmosDB-agentsdbmirrored database as the data source. - Expand
Tables→agentsdband select bothconversationsandinteractions. - Create the shortcuts and confirm they appear under
Tables/dbowith the same names.
This step is not automated by the setup scripts — create the two shortcuts yourself after Mirroring reports a running status, otherwise the source tables will not exist yet.
5. Prove both paths work
Show your team and coach that Fabric can read from both enterprise connection patterns:
- Shortcut path: browse all seven paths in the shortcut contract and open or query at least one Parquet file and one JSON 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.
- All seven shortcuts in the documented contract exist and browse successfully.
- 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.
-
Tables/dbo/conversationsandTables/dbo/interactionsOneLake shortcuts resolve in the Lakehouse. - 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 organizational account used by the Fabric cloud connection 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 seven shortcuts under
Files/for cost, metadata, application telemetry, and platform diagnostics using the documented path contract. - Import notebooks from
resources/fabric-control-tower/fabric/notebooks/. - Import pipelines from
resources/fabric-control-tower/fabric/pipelines/.
The script waits for asynchronous Fabric item creation to finish before it creates dependent resources.
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