Skip to content

Commit 3b72bec

Browse files
committed
adding fixed standard setup template
1 parent 75022e6 commit 3b72bec

7 files changed

Lines changed: 166 additions & 120 deletions

use-cases/agents/setup/standard-setup/main.bicep

Lines changed: 61 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
param location string = resourceGroup().location
55

66
@description('Name for your AI Services resource.')
7-
param ai_services string = 'aiServices'
7+
param aiServices string = 'aiServices'
88

99
@description('Name for your project resource.')
10-
param projectName string = 'project'
10+
param firstProjectName string = 'project'
1111

1212
@description('This project will be a sub-resource of your account')
13-
param project_description string = 'some description'
13+
param projectDescription string = 'some description'
1414

1515
@description('The display name of the project')
16-
param display_name string = 'project_display_name'
16+
param displayName string = 'project'
1717

1818
// Model deployment parameters
1919
@description('The name of the model you want to deploy')
@@ -37,16 +37,17 @@ param azureCosmosDBAccountResourceId string = ''
3737

3838
param projectCapHost string = 'caphostproj'
3939
param accountCapHost string = 'caphostacc'
40+
4041
// Create a short, unique suffix, that will be unique to each resource group
4142
param deploymentTimestamp string = utcNow('yyyyMMddHHmmss')
4243
var uniqueSuffix = substring(uniqueString('${resourceGroup().id}-${deploymentTimestamp}'), 0, 4)
43-
var account_name = toLower('${ai_services}${uniqueSuffix}')
44-
var project_name = toLower('${projectName}${uniqueSuffix}')
44+
var accountName = toLower('${aiServices}${uniqueSuffix}')
45+
var projectName = toLower('${firstProjectName}${uniqueSuffix}')
4546

4647

47-
var cosmosDBName = toLower('${ai_services}${uniqueSuffix}cosmosdb')
48-
var aiSearchName = toLower('${ai_services}${uniqueSuffix}search')
49-
var azureStorageName = toLower('${ai_services}${uniqueSuffix}storage')
48+
var cosmosDBName = toLower('${aiServices}${uniqueSuffix}cosmosdb')
49+
var aiSearchName = toLower('${aiServices}${uniqueSuffix}search')
50+
var azureStorageName = toLower('${aiServices}${uniqueSuffix}storage')
5051

5152
// Check if existing resources have been passed in
5253
var storagePassedIn = azureStorageAccountResourceId != ''
@@ -65,7 +66,11 @@ var storageParts = split(azureStorageAccountResourceId, '/')
6566
var azureStorageSubscriptionId = storagePassedIn ? storageParts[2] : subscription().subscriptionId
6667
var azureStorageResourceGroupName = storagePassedIn ? storageParts[4] : resourceGroup().name
6768

68-
// Checks if existing resources have been passed in
69+
/*
70+
Validate existing resources
71+
This module will check if the AI Search Service, Storage Account, and Cosmos DB Account already exist.
72+
If they do, it will set the corresponding output to true. If they do not exist, it will set the output to false.
73+
*/
6974
module validateExistingResources 'modules-standard/validate-existing-resources.bicep' = {
7075
name: 'validate-existing-resources-${uniqueSuffix}-deployment'
7176
params: {
@@ -78,7 +83,7 @@ module validateExistingResources 'modules-standard/validate-existing-resources.b
7883
// This module will create new agent dependent resources
7984
// A Cosmos DB account, an AI Search Service, and a Storage Account are created if they do not already exist
8085
module aiDependencies 'modules-standard/standard-dependent-resources.bicep' = {
81-
name: 'dependencies-${account_name}-${uniqueSuffix}-deployment'
86+
name: 'dependencies-${accountName}-${uniqueSuffix}-deployment'
8287
params: {
8388
location: location
8489
azureStorageName: azureStorageName
@@ -105,11 +110,14 @@ module aiDependencies 'modules-standard/standard-dependent-resources.bicep' = {
105110
}
106111
}
107112

113+
/*
114+
Create the AI Services account and gpt-4o model deployment
115+
*/
108116
module aiAccount 'modules-standard/ai-account-identity.bicep' = {
109-
name: 'ai-${account_name}-${uniqueSuffix}-deployment'
117+
name: 'ai-${accountName}-${uniqueSuffix}-deployment'
110118
params: {
111119
// workspace organization
112-
account_name: account_name
120+
accountName: accountName
113121
location: location
114122

115123
modelName: modelName
@@ -123,13 +131,16 @@ module aiAccount 'modules-standard/ai-account-identity.bicep' = {
123131
]
124132
}
125133

134+
/*
135+
Creates a new project (sub-resource of the AI Services account)
136+
*/
126137
module aiProject 'modules-standard/ai-project-identity.bicep' = {
127-
name: 'ai-${project_name}-${uniqueSuffix}-deployment'
138+
name: 'ai-${projectName}-${uniqueSuffix}-deployment'
128139
params: {
129140
// workspace organization
130-
project_name: project_name
131-
projectDescription: project_description
132-
display_name: display_name
141+
projectName: projectName
142+
projectDescription: projectDescription
143+
displayName: displayName
133144
location: location
134145

135146
aiSearchName: aiDependencies.outputs.aiSearchName
@@ -144,22 +155,24 @@ module aiProject 'modules-standard/ai-project-identity.bicep' = {
144155
azureStorageSubscriptionId: aiDependencies.outputs.azureStorageSubscriptionId
145156
azureStorageResourceGroupName: aiDependencies.outputs.azureStorageResourceGroupName
146157
// dependent resources
147-
account_name: aiAccount.outputs.account_name
158+
accountName: aiAccount.outputs.accountName
148159
}
149160
}
150161

151-
var projectFullName = '${aiAccount.outputs.account_name}/${aiProject.outputs.projectName}'
152-
// The Storage Blob Data Contributor role must be assigned before the caphost is created
162+
// var projectFullName = '${aiAccount.outputs.accountName}/${aiProject.outputs.projectName}'
163+
164+
165+
/*
166+
Assigns the project SMI the storage blob data contributor role on the storage account
167+
*/
153168
module storageAccountRoleAssignment 'modules-standard/azure-storage-account-role-assignment.bicep' = {
154169
name: 'storage-${azureStorageName}-${uniqueSuffix}-deployment'
155170
scope: resourceGroup(azureStorageSubscriptionId, azureStorageResourceGroupName)
156171
params: {
157172
accountPrincipalId: aiAccount.outputs.accountPrincipalId
158173
azureStorageName: aiDependencies.outputs.azureStorageName
174+
projectPrincipalId: aiProject.outputs.projectPrincipalId
159175
}
160-
dependsOn: [
161-
aiProject
162-
]
163176
}
164177

165178
// The Comos DB Operator role must be assigned before the caphost is created
@@ -170,6 +183,9 @@ module cosmosAccountRoleAssignments 'modules-standard/cosmosdb-account-role-assi
170183
cosmosDBName: aiDependencies.outputs.cosmosDBName
171184
projectPrincipalId: aiProject.outputs.projectPrincipalId
172185
}
186+
dependsOn: [
187+
storageAccountRoleAssignment
188+
]
173189

174190
}
175191

@@ -181,13 +197,16 @@ module aiSearchRoleAssignments 'modules-standard/ai-search-role-assignments.bice
181197
aiSearchName: aiDependencies.outputs.aiSearchName
182198
projectPrincipalId: aiProject.outputs.projectPrincipalId
183199
}
200+
dependsOn:[
201+
cosmosAccountRoleAssignments, storageAccountRoleAssignment
202+
]
184203
}
185204

186205
module addProjectCapabilityHost 'modules-standard/add-project-capability-host.bicep' = {
187206
name: 'capabilityHost-configuration-${projectName}-${uniqueSuffix}-deployment'
188207
params: {
189-
accountName: aiAccount.outputs.account_name
190-
projectFullName: projectFullName
208+
accountName: aiAccount.outputs.accountName
209+
projectName: aiProject.outputs.projectName
191210
cosmosDBConnection: aiProject.outputs.cosmosDBConnection
192211
azureStorageConnection: aiProject.outputs.azureStorageConnection
193212
aiSearchConnection: aiProject.outputs.aiSearchConnection
@@ -200,29 +219,30 @@ module addProjectCapabilityHost 'modules-standard/add-project-capability-host.bi
200219
]
201220
}
202221

203-
204222
module cosmosContainerRoleAssignments 'modules-standard/cosmos-container-role-assignments.bicep' = {
205-
name: 'cosmos-container-role-assignments-${projectName}-${uniqueSuffix}-deployment'
223+
name: 'cosmos-role-assignments-${uniqueSuffix}-deployment'
206224
scope: resourceGroup(cosmosDBSubscriptionId, cosmosDBResourceGroupName)
207225
params: {
208226
cosmosAccountName: aiDependencies.outputs.cosmosDBName
227+
projectWorkspaceId: aiProject.outputs.projectWorkspaceId
209228
projectPrincipalId: aiProject.outputs.projectPrincipalId
210-
projectId: aiProject.outputs.projectId
211-
}
229+
230+
}
212231
dependsOn: [
213232
addProjectCapabilityHost
214233
]
215234
}
216235

217-
// The Storage Blob Data Contributor role must be assigned before the caphost is created
218-
module storageContainersRoleAssignment 'modules-standard/blob-storage-container-role-assignments.bicep' = {
219-
name: 'storage-containers-role-assignment-${azureStorageName}-${uniqueSuffix}-deployment'
220-
scope: resourceGroup(azureStorageSubscriptionId, azureStorageResourceGroupName)
221-
params: {
222-
projectPrincipalId: aiProject.outputs.projectPrincipalId
223-
azureStorageName: aiDependencies.outputs.azureStorageName
224-
}
225-
dependsOn: [
226-
addProjectCapabilityHost
227-
]
228-
}
236+
// // The Storage Blob Data Owner role must be assigned before the caphost is created
237+
// module storageContainersRoleAssignment 'modules-standard/blob-storage-container-role-assignments.bicep' = {
238+
// name: 'storage-containers-${uniqueSuffix}-deployment'
239+
// scope: resourceGroup(azureStorageSubscriptionId, azureStorageResourceGroupName)
240+
// params: {
241+
// projectPrincipalId: aiProject.outputs.projectPrincipalId
242+
// azureStorageName: aiDependencies.outputs.azureStorageName
243+
// projectWorkspaceId: aiProject.outputs.projectWorkspaceId
244+
// }
245+
// dependsOn: [
246+
// addProjectCapabilityHost
247+
// ]
248+
// }

use-cases/agents/setup/standard-setup/modules-standard/add-project-capability-host.bicep

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
param cosmosDBConnection string
22
param azureStorageConnection string
33
param aiSearchConnection string
4-
param projectFullName string
4+
param projectName string
55
param accountName string
66
param projectCapHost string
77
param accountCapHost string
@@ -14,8 +14,13 @@ var vectorStoreConnections = ['${aiSearchConnection}']
1414
#disable-next-line BCP081
1515
resource account 'Microsoft.CognitiveServices/accounts@2025-04-01-preview' existing = {
1616
name: accountName
17-
scope: resourceGroup()
1817
}
18+
#disable-next-line BCP081
19+
resource project 'Microsoft.CognitiveServices/accounts/projects@2025-04-01-preview' existing = {
20+
name: projectName
21+
parent: account
22+
}
23+
1924

2025
#disable-next-line BCP081
2126
resource accountCapabilityHost 'Microsoft.CognitiveServices/accounts/capabilityHosts@2025-04-01-preview' = {
@@ -25,16 +30,8 @@ resource account 'Microsoft.CognitiveServices/accounts@2025-04-01-preview' exist
2530
capabilityHostKind: 'Agents'
2631

2732
}
28-
dependsOn: [
29-
account
30-
]
3133
}
3234

33-
#disable-next-line BCP081
34-
resource project 'Microsoft.CognitiveServices/accounts/projects@2025-04-01-preview' existing = {
35-
name: projectFullName
36-
scope: resourceGroup()
37-
}
3835

3936
#disable-next-line BCP081
4037
resource projectCapabilityHost 'Microsoft.CognitiveServices/accounts/projects/capabilityHosts@2025-04-01-preview' = {
@@ -47,6 +44,6 @@ resource projectCapabilityHost 'Microsoft.CognitiveServices/accounts/projects/ca
4744
threadStorageConnections: threadConnections
4845
}
4946
dependsOn: [
50-
accountCapabilityHost, project
47+
accountCapabilityHost
5148
]
5249
}

use-cases/agents/setup/standard-setup/modules-standard/ai-account-identity.bicep

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
param account_name string
2+
param accountName string
33
param location string
44
param modelName string
55
param modelFormat string
@@ -8,8 +8,8 @@ param modelSkuName string
88
param modelCapacity int
99

1010
#disable-next-line BCP081
11-
resource account_name_resource 'Microsoft.CognitiveServices/accounts@2025-04-01-preview' = {
12-
name: account_name
11+
resource account 'Microsoft.CognitiveServices/accounts@2025-04-01-preview' = {
12+
name: accountName
1313
location: location
1414
sku: {
1515
name: 'S0'
@@ -20,7 +20,7 @@ resource account_name_resource 'Microsoft.CognitiveServices/accounts@2025-04-01-
2020
}
2121
properties: {
2222
allowProjectManagement: true
23-
customSubDomainName: account_name
23+
customSubDomainName: accountName
2424
networkAcls: {
2525
defaultAction: 'Allow'
2626
virtualNetworkRules: []
@@ -35,7 +35,7 @@ resource account_name_resource 'Microsoft.CognitiveServices/accounts@2025-04-01-
3535

3636
#disable-next-line BCP081
3737
resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2025-04-01-preview'= {
38-
parent: account_name_resource
38+
parent: account
3939
name: modelName
4040
sku : {
4141
capacity: modelCapacity
@@ -50,7 +50,8 @@ resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2025-
5050
}
5151
}
5252

53-
output account_name string = account_name_resource.name
54-
output account_name_id string = account_name_resource.id
55-
output aiServicesTarget string = account_name_resource.properties.endpoint
56-
output accountPrincipalId string = account_name_resource.identity.principalId
53+
output accountName string = account.name
54+
output accountID string = account.id
55+
output accountTarget string = account.properties.endpoint
56+
output accountPrincipalId string = account.identity.principalId
57+

0 commit comments

Comments
 (0)