Skip to content

Commit 8c76feb

Browse files
author
Mike Swantek
committed
Swap in Azure AI landing zone submodule and pin to v1.0.1
1 parent 5467ae3 commit 8c76feb

23 files changed

Lines changed: 1461 additions & 254 deletions

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [Unreleased] - 2026-03-06
6+
### Added
7+
- Parameter to override Log Analytics workspace resource ID and output mapping for automation scripts
8+
- Optional `SKIP_PURVIEW_INTEGRATION` guard for Purview automation scripts (used by hooks when Purview is disabled)
9+
- Retry/timeout handling for AI Search public network access toggles in OneLake indexing scripts
10+
11+
### Changed
12+
- Preprovision error output simplified with concise failure reason and optional verbose diagnostics
13+
- Main parameter file reordered into required/optional/defaulted sections with clearer comments
14+
- OneLake indexing scripts prefer outputs, include AAD-only auth, and handle transient 409 run conflicts
15+
16+
### Fixed
17+
- Power BI headers initialization in Log Analytics linkage script to resolve workspace ID lookups
18+
519
## [1.3] - 2025-12-09
620
### Added
721
- Microsoft Fabric integration with automatic capacity creation and management

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ This accelerator extends the [AI Landing Zone](https://github.com/Azure/ai-landi
3939

4040
### Additional Resources
4141

42-
- [AI Landing Zone Documentation](https://github.com/Azure/ai-landing-zone)
42+
- [AI Landing Zone Documentation](https://github.com/Azure/bicep-ptn-aiml-landing-zone)
4343
- [Azure AI Foundry Documentation](https://learn.microsoft.com/en-us/azure/ai-foundry/)
4444
- [Microsoft Fabric Documentation](https://learn.microsoft.com/en-us/fabric/)
4545

@@ -104,7 +104,7 @@ Follow the deployment guide to deploy this solution to your own Azure subscripti
104104
> **GitHub Codespaces and Dev Containers handle this automatically.**
105105
106106
> **Windows shell note**
107-
> <br/>Preprovision uses `shell: sh`. Run `azd` from Git Bash/WSL so `bash` is available, or switch the `preprovision` hook in `azure.yaml` to the provided PowerShell script if you want to stay in PowerShell.
107+
> <br/>Preprovision runs with PowerShell (`pwsh`) by default. Run `azd` from PowerShell 7+ (or any terminal that can invoke `pwsh`).
108108
109109
<br/>
110110

azure.yaml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ hooks:
5555
continueOnError: false
5656

5757
# Stage 5: Purview Collection Creation
58-
- run: ./scripts/automationScripts/FabricPurviewAutomation/create_purview_collection.ps1
58+
- run: "$env:SKIP_PURVIEW_INTEGRATION='true'; ./scripts/automationScripts/FabricPurviewAutomation/create_purview_collection.ps1"
5959
interactive: false
6060
shell: pwsh
6161
continueOnError: false
6262

6363
# Stage 6: Register Fabric as Purview Data Source
64-
- run: ./scripts/automationScripts/FabricWorkspace/CreateWorkspace/register_fabric_datasource.ps1
64+
- run: "$env:SKIP_PURVIEW_INTEGRATION='true'; ./scripts/automationScripts/FabricWorkspace/CreateWorkspace/register_fabric_datasource.ps1"
6565
interactive: false
6666
shell: pwsh
6767
continueOnError: false
@@ -127,14 +127,9 @@ hooks:
127127
continueOnError: false
128128

129129
# Stage 17: Trigger Purview Scan (if Purview enabled)
130-
- run: ./scripts/automationScripts/FabricPurviewAutomation/trigger_purview_scan_for_fabric_workspace.ps1
130+
- run: "$env:SKIP_PURVIEW_INTEGRATION='true'; ./scripts/automationScripts/FabricPurviewAutomation/trigger_purview_scan_for_fabric_workspace.ps1"
131131
interactive: false
132132
shell: pwsh
133133
continueOnError: false
134134

135-
# Stage 18: Connect Log Analytics (placeholder)
136-
- run: ./scripts/automationScripts/FabricPurviewAutomation/connect_log_analytics.ps1
137-
interactive: false
138-
shell: pwsh
139-
continueOnError: false
140135

docs/DeploymentGuide.md

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ To deploy this solution accelerator, ensure you have access to an [Azure subscri
2828
| Git | Latest | [Install Git](https://git-scm.com/downloads) |
2929
| PowerShell | 7.0+ | [Install PowerShell](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) |
3030

31-
> **Windows-specific shell requirement:** Preprovision hooks run with `shell: sh`. Install Git for Windows (includes Git Bash) **or** run `azd` from WSL/Ubuntu so `bash/sh` is on PATH. If you prefer pure PowerShell, update `azure.yaml` to point `preprovision` to the provided `preprovision.ps1`.
31+
> **Windows shell requirement:** Preprovision runs with PowerShell (`pwsh`). Use PowerShell 7+ so `pwsh` is on PATH.
3232
3333
### External Resources
3434

@@ -106,7 +106,7 @@ If you're not using Codespaces or Dev Containers:
106106

107107
4. Continue with [Deployment Steps](#deployment-steps) below
108108

109-
> **Note (Windows):** Run `azd up` from Git Bash or WSL so the `preprovision` hook can execute. If you want to stay in PowerShell, edit `azure.yaml` to use `preprovision.ps1` instead of the `.sh` script.
109+
> **Note (Windows):** Run `azd up` from PowerShell 7+ so the `pwsh` preprovision hook can execute.
110110
111111
</details>
112112

@@ -152,22 +152,23 @@ Edit `infra/main.bicepparam` or set environment variables:
152152
| Parameter | Description | Example |
153153
|-----------|-------------|---------|
154154
| `purviewAccountResourceId` | Resource ID of existing Purview account | `/subscriptions/.../Microsoft.Purview/accounts/...` |
155-
| `aiSearchAdditionalAccessObjectIds` | Array of Entra object IDs to grant Search roles | `["00000000-0000-0000-0000-000000000000"]` |
156-
| `fabricCapacityMode` | Fabric capacity mode: `create`, `byo`, or `none` | `create` |
157-
| `fabricWorkspaceMode` | Fabric workspace mode: `create`, `byo`, or `none` | `create` |
158-
| `fabricCapacitySku` | Fabric capacity SKU (only used when `fabricCapacityMode=create`) | `F8` (default) |
159-
| `fabricCapacityAdmins` | Fabric capacity admin principals (UPN emails or Entra object IDs) (required when `fabricCapacityMode=create`) | `["user@contoso.com"]` |
160-
| `fabricCapacityResourceId` | Existing Fabric capacity ARM resource ID (required when `fabricCapacityMode=byo`) | `/subscriptions/.../providers/Microsoft.Fabric/capacities/...` |
161-
| `fabricWorkspaceId` | Existing Fabric workspace ID (GUID) (required when `fabricWorkspaceMode=byo`) | `00000000-0000-0000-0000-000000000000` |
162-
| `fabricWorkspaceName` | Existing Fabric workspace name (used when `fabricWorkspaceMode=byo`) | `my-existing-workspace` |
155+
| `fabricCapacityPreset` | Fabric capacity preset: `create`, `byo`, or `none` | `create` |
156+
| `fabricWorkspacePreset` | Fabric workspace preset: `create`, `byo`, or `none` | `create` |
157+
| `fabricCapacitySku` | Fabric capacity SKU (only used when `fabricCapacityPreset=create`) | `F8` (default) |
158+
| `fabricCapacityAdmins` | Fabric capacity admin principals (UPN emails or Entra object IDs) (required when `fabricCapacityPreset=create`) | `["user@contoso.com"]` |
159+
| `fabricCapacityResourceId` | Existing Fabric capacity ARM resource ID (required when `fabricCapacityPreset=byo`) | `/subscriptions/.../providers/Microsoft.Fabric/capacities/...` |
160+
| `fabricWorkspaceId` | Existing Fabric workspace ID (GUID) (required when `fabricWorkspacePreset=byo`) | `00000000-0000-0000-0000-000000000000` |
161+
| `fabricWorkspaceName` | Existing Fabric workspace name (used when `fabricWorkspacePreset=byo`) | `my-existing-workspace` |
163162

164163
```bash
165164
# Example: Set Purview account
166-
azd env set purviewAccountResourceId "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Purview/accounts/<account-name>"
165+
# (Edit infra/main.bicepparam)
166+
# param purviewAccountResourceId = "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Purview/accounts/<account-name>"
167167

168168
# Example: Disable all Fabric automation
169-
azd env set fabricCapacityMode none
170-
azd env set fabricWorkspaceMode none
169+
# (Edit infra/main.bicepparam)
170+
# var fabricCapacityPreset = 'none'
171+
# var fabricWorkspacePreset = 'none'
171172
```
172173

173174
</details>
@@ -177,9 +178,10 @@ azd env set fabricWorkspaceMode none
177178

178179
| Parameter | Description | Default |
179180
|-----------|-------------|---------|
180-
| `aiSearchAdditionalAccessObjectIds` | Entra ID object IDs for additional Search access | `[]` |
181-
| `networkIsolationMode` | Network isolation level | `AllowInternetOutbound` |
182-
| `vmAdminUsername` | Jump box VM admin username | `azureuser` |
181+
| `networkIsolation` | Enable network isolation | `false` |
182+
| `useExistingVNet` | Reuse an existing VNet | `false` |
183+
| `existingVnetResourceId` | Existing VNet resource ID (when `useExistingVNet=true`) | `` |
184+
| `vmUserName` | Jump box VM admin username | `` |
183185
| `vmAdminPassword` | Jump box VM admin password | (prompted) |
184186

185187
</details>
@@ -214,8 +216,8 @@ azd up
214216
```
215217

216218
This command will:
217-
1. Run pre-provision hooks (validate environment)
218-
2. Deploy all Azure infrastructure (~30-40 minutes)
219+
1. Run pre-provision hooks (deploy AI Landing Zone submodule)
220+
2. Deploy Fabric capacity and supporting infrastructure (~30-40 minutes)
219221
3. Run post-provision hooks (configure Fabric, Purview, Search RBAC)
220222

221223
> **Note:** The entire deployment typically takes 45-60 minutes.

docs/PARAMETER_GUIDE.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ This guide focuses on configuration concepts for the **AI Landing Zone**.
55
> **Important**: This repository deploys using Bicep parameter files, not `infra/main.parameters.json`.
66
>
77
> - Primary parameters file: `infra/main.bicepparam`
8-
> - AI Landing Zone submodule parameters file (if you deploy it directly): `submodules/ai-landing-zone/bicep/infra/main.bicepparam`
8+
> - AI Landing Zone submodule parameters file (if you deploy it directly): `submodules/ai-landing-zone/main.parameters.json`
99
>
1010
> **Fabric options in this repo** are configured in `infra/main.bicepparam` via:
1111
> - `fabricCapacityPreset` (`create` | `byo` | `none`)
1212
> - `fabricWorkspacePreset` (`create` | `byo` | `none`)
1313
> - BYO inputs: `fabricCapacityResourceId`, `fabricWorkspaceId`, `fabricWorkspaceName`
1414
15+
> **Deployment flow**: This repo deploys the AI Landing Zone submodule from `submodules/ai-landing-zone/main.bicep` during the preprovision hook. The single source of truth for parameters is `infra/main.bicepparam`.
16+
1517
## Table of Contents
1618
1. [Basic Parameters](#basic-parameters)
1719
2. [Deployment Toggles](#deployment-toggles)
@@ -151,6 +153,14 @@ Each toggle controls whether a service is created. Set to `true` to deploy, `fal
151153
- `buildVm: true` - For CI/CD build agents
152154
- `jumpVm: true` - For Windows-based management
153155

156+
### Log Analytics (Optional)
157+
158+
If you are using an existing Log Analytics workspace, set the resource ID in `infra/main.bicepparam`:
159+
160+
```bicep-params
161+
param logAnalyticsWorkspaceResourceId = '/subscriptions/<subId>/resourceGroups/<rg>/providers/Microsoft.OperationalInsights/workspaces/<name>'
162+
```
163+
154164
### Network Security Groups
155165

156166
```json

docs/automation-outputs-mapping.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ The postprovision automation scripts consume deployment outputs via the `AZURE_O
2020

2121
| Bicep Output | Script Variable | Used By | Purpose |
2222
|-------------|-----------------|---------|---------|
23-
| `fabricCapacityModeOut` | `fabricCapacityMode` | Multiple Fabric scripts | Whether capacity is `create`, `byo`, or `none` |
24-
| `fabricWorkspaceModeOut` | `fabricWorkspaceMode` | Multiple Fabric scripts | Whether workspace is `create`, `byo`, or `none` |
23+
| `fabricCapacityModeOut` | `fabricCapacityMode` | Multiple Fabric scripts | Resolved mode from `fabricCapacityPreset` (`create`, `byo`, `none`) |
24+
| `fabricWorkspaceModeOut` | `fabricWorkspaceMode` | Multiple Fabric scripts | Resolved mode from `fabricWorkspacePreset` (`create`, `byo`, `none`) |
2525
| `fabricCapacityId` | `FABRIC_CAPACITY_ID` | `ensure_active_capacity.ps1` | ARM resource ID of Fabric capacity |
2626
| `fabricCapacityResourceIdOut` | `fabricCapacityId` | `create_fabric_workspace.ps1` | Resource ID for capacity assignment |
2727
| `fabricWorkspaceIdOut` | `FABRIC_WORKSPACE_ID` | Multiple Fabric scripts | Existing or created Fabric workspace ID |

docs/post_deployment_steps.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ If no documents appear, check:
106106

107107
## 6. Verify Network Isolation (if enabled)
108108

109-
When `networkIsolationMode` is set to isolate resources:
109+
When `networkIsolation` is set to `true`:
110110

111111
### Check AI Foundry Network Settings
112112

docs/quota_check.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ The final table lists regions with available quota. You can select any of these
7878

7979
## **If using VS Code or Codespaces**
8080
1. Open the terminal in VS Code or Codespaces.
81-
2. If you're using VS Code, click the dropdown on the right side of the terminal window, and select `Git Bash`.
82-
![git_bash](../img/provisioning/git_bash.png)
81+
2. Use a terminal that can run bash. This is only for the quota check script; deployment uses PowerShell.
82+
![git_bash](../img/provisioning/git_bash.png)
8383
3. Navigate to the `scripts` folder where the script files are located and make the script as executable:
8484
```sh
8585
cd scripts

infra/main.bicep

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ param enableAgenticRetrieval bool = false
105105

106106
@description('Existing resource IDs to reuse.')
107107
param aiSearchResourceId string = ''
108+
@description('Optional additional Entra object IDs to grant Search roles.')
109+
param aiSearchAdditionalAccessObjectIds array = []
108110
param aiFoundryStorageAccountResourceId string = ''
109111
param aiFoundryCosmosDBAccountResourceId string = ''
110112
param keyVaultResourceId string = ''
@@ -244,16 +246,14 @@ var effectiveAiSearchResourceId = !empty(aiSearchResourceId)
244246
: resourceId('Microsoft.Search/searchServices', searchServiceName)
245247

246248
var effectiveStorageAccountResourceId = resourceId('Microsoft.Storage/storageAccounts', storageAccountName)
247-
var effectiveLogAnalyticsWorkspaceResourceId = resourceId('Microsoft.OperationalInsights/workspaces', logAnalyticsWorkspaceName)
248249

249250
output virtualNetworkResourceId string = effectiveVnetResourceId
250251
output keyVaultResourceId string = effectiveKeyVaultResourceId
251252
output storageAccountResourceId string = effectiveStorageAccountResourceId
252253
output aiFoundryProjectName string = aiFoundryProjectName
253-
output logAnalyticsWorkspaceResourceId string = effectiveLogAnalyticsWorkspaceResourceId
254254
output aiSearchResourceId string = effectiveAiSearchResourceId
255255
output aiSearchName string = searchServiceName
256-
output aiSearchAdditionalAccessObjectIds array = []
256+
output aiSearchAdditionalAccessObjectIds array = aiSearchAdditionalAccessObjectIds
257257

258258
// Subnet IDs (constructed from VNet ID and subnet names)
259259
output peSubnetResourceId string = '${effectiveVnetResourceId}/subnets/${peSubnetName}'

infra/main.bicepparam

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,43 @@
11
using './main.bicep'
22

33
// ========================================
4-
// AI LANDING ZONE PARAMETERS
4+
// REQUIRED INPUTS
55
// ========================================
66

77
param environmentName = readEnvironmentVariable('AZURE_ENV_NAME', '')
88
param location = readEnvironmentVariable('AZURE_LOCATION', '')
99
param cosmosLocation = readEnvironmentVariable('AZURE_COSMOS_LOCATION', '')
10-
// Set this to your Entra object ID if Graph lookup is blocked.
10+
// Entra object ID of the identity to grant RBAC (user, group, service principal, or UAI). Set this if Graph lookup is blocked.
1111
param principalId = '0d60355b-dcae-4331-b55f-283d80aabde5'
1212
param principalType = 'User'
13-
param deploymentTags = {}
14-
param appConfigLabel = 'ai-lz'
1513

16-
param networkIsolation = true
14+
// ========================================
15+
// OPTIONAL INPUTS (Existing Resources)
16+
// ========================================
17+
// Use these to reuse existing resources instead of creating new ones.
18+
19+
param aiSearchResourceId = ''
20+
param aiFoundryStorageAccountResourceId = ''
21+
param aiFoundryCosmosDBAccountResourceId = ''
22+
param keyVaultResourceId = ''
1723
param useExistingVNet = false
1824
param existingVnetResourceId = readEnvironmentVariable('EXISTING_VNET_RESOURCE_ID', '')
1925

26+
// Optional additional Entra object IDs to grant Search roles.
27+
param aiSearchAdditionalAccessObjectIds = ['0d60355b-dcae-4331-b55f-283d80aabde5']
28+
29+
// ========================================
30+
// OPTIONAL INPUTS (Configuration)
31+
// ========================================
32+
33+
param deploymentTags = {}
34+
param appConfigLabel = 'ai-lz'
35+
param networkIsolation = true
36+
37+
// ========================================
38+
// FEATURE TOGGLES
39+
// ========================================
40+
2041
param deployGroundingWithBing = false
2142
param deployAiFoundry = true
2243
param deployAiFoundrySubnet = true
@@ -35,16 +56,15 @@ param deployVM = true
3556
param deploySubnets = readEnvironmentVariable('DEPLOY_SUBNETS', 'true') == 'true'
3657
param deployNsgs = true
3758
param sideBySideDeploy = readEnvironmentVariable('SIDE_BY_SIDE', 'true') == 'true'
38-
param deploySoftware = true
59+
param deploySoftware = false
3960
param deployApim = false
4061
param deployAfProject = true
4162
param deployAAfAgentSvc = true
4263
param enableAgenticRetrieval = readEnvironmentVariable('ENABLE_AGENTIC_RETRIEVAL', 'false') == 'true'
4364

44-
param aiSearchResourceId = ''
45-
param aiFoundryStorageAccountResourceId = ''
46-
param aiFoundryCosmosDBAccountResourceId = ''
47-
param keyVaultResourceId = ''
65+
// ========================================
66+
// ADVANCED SETTINGS (Defaults)
67+
// ========================================
4868

4969
param useUAI = readEnvironmentVariable('USE_UAI', 'false') == 'true'
5070
param useCAppAPIKey = readEnvironmentVariable('USE_CAPP_API_KEY', 'false') == 'true'

0 commit comments

Comments
 (0)