44param 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
3838param projectCapHost string = 'caphostproj'
3939param accountCapHost string = 'caphostacc'
40+
4041// Create a short, unique suffix, that will be unique to each resource group
4142param deploymentTimestamp string = utcNow ('yyyyMMddHHmmss' )
4243var 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
5253var storagePassedIn = azureStorageAccountResourceId != ''
@@ -65,7 +66,11 @@ var storageParts = split(azureStorageAccountResourceId, '/')
6566var azureStorageSubscriptionId = storagePassedIn ? storageParts [2 ] : subscription ().subscriptionId
6667var 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+ */
6974module 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
8085module 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+ */
108116module 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+ */
126137module 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+ */
153168module 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
186205module 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-
204222module 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+ }
212231dependsOn : [
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+ // }
0 commit comments