Skip to content

Commit 45b4c52

Browse files
refactor: added separate module to enable managed identity for search service to reduce deployment time (#2091)
1 parent 4754c28 commit 45b4c52

2 files changed

Lines changed: 37 additions & 15 deletions

File tree

infra/main.bicep

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,8 +1101,17 @@ module speechService 'modules/core/ai/cognitiveservices.bicep' = {
11011101
dependsOn: enablePrivateNetworking ? avmPrivateDnsZones : []
11021102
}
11031103

1104-
module search 'br/public:avm/res/search/search-service:0.11.1' = if (databaseType == 'CosmosDB') {
1105-
name: take('avm.res.search.search-service.${azureAISearchName}', 64)
1104+
resource search 'Microsoft.Search/searchServices@2024-06-01-preview' = {
1105+
name: azureAISearchName
1106+
location: location
1107+
sku: {
1108+
name: azureSearchSku
1109+
}
1110+
}
1111+
1112+
// Separate module for Search Service to enable managed identity and update other properties, as this reduces deployment time for the search service
1113+
module searchUpdate 'br/public:avm/res/search/search-service:0.11.1' = if (databaseType == 'CosmosDB') {
1114+
name: take('avm.res.search.update.${azureAISearchName}', 64)
11061115
params: {
11071116
// Required parameters
11081117
name: azureAISearchName
@@ -1187,6 +1196,9 @@ module search 'br/public:avm/res/search/search-service:0.11.1' = if (databaseTyp
11871196
: []
11881197
)
11891198
}
1199+
dependsOn: [
1200+
search
1201+
]
11901202
}
11911203

11921204
// AVM WAF - Server Farm + Web Site conversions
@@ -1739,7 +1751,7 @@ module workbook 'modules/app/workbook.bicep' = if (enableMonitoring) {
17391751
eventGridSystemTopicName: avmEventGridSystemTopic!.outputs.name
17401752
logAnalyticsResourceId: monitoring!.outputs.logAnalyticsWorkspaceId
17411753
azureOpenAIResourceName: openai.outputs.name
1742-
azureAISearchName: databaseType == 'CosmosDB' ? search!.outputs.name : ''
1754+
azureAISearchName: databaseType == 'CosmosDB' ? search.name : ''
17431755
storageAccountName: storage.outputs.name
17441756
}
17451757
}
@@ -1801,21 +1813,21 @@ var systemAssignedRoleAssignments = union(
18011813
databaseType == 'CosmosDB'
18021814
? [
18031815
{
1804-
principalId: search.outputs.systemAssignedMIPrincipalId
1816+
principalId: searchUpdate.?outputs.systemAssignedMIPrincipalId
18051817
resourceId: storage.outputs.resourceId
18061818
roleName: 'Storage Blob Data Contributor'
18071819
roleDefinitionId: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe'
18081820
principalType: 'ServicePrincipal'
18091821
}
18101822
{
1811-
principalId: search.outputs.systemAssignedMIPrincipalId
1823+
principalId: searchUpdate.?outputs.systemAssignedMIPrincipalId
18121824
resourceId: openai.outputs.resourceId
18131825
roleName: 'Cognitive Services User'
18141826
roleDefinitionId: 'a97b65f3-24c7-4388-baec-2e87135dc908'
18151827
principalType: 'ServicePrincipal'
18161828
}
18171829
{
1818-
principalId: search.outputs.systemAssignedMIPrincipalId
1830+
principalId: searchUpdate.?outputs.systemAssignedMIPrincipalId
18191831
resourceId: openai.outputs.resourceId
18201832
roleName: 'Cognitive Services OpenAI User'
18211833
roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd'
@@ -1915,7 +1927,7 @@ var azureSpeechServiceInfo = string({
19151927
var azureSearchServiceInfo = databaseType == 'CosmosDB'
19161928
? string({
19171929
service_name: azureAISearchName
1918-
service: search!.outputs.endpoint
1930+
service: searchUpdate!.outputs.endpoint
19191931
use_semantic_search: azureSearchUseSemanticSearch
19201932
semantic_search_config: azureSearchSemanticSearchConfig
19211933
index_is_prechunked: azureSearchIndexIsPrechunked

infra/main.json

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "0.40.2.10011",
9-
"templateHash": "1885503893633635123"
9+
"templateHash": "18393040601938992677"
1010
}
1111
},
1212
"parameters": {
@@ -724,6 +724,15 @@
724724
}
725725
}
726726
},
727+
"search": {
728+
"type": "Microsoft.Search/searchServices",
729+
"apiVersion": "2024-06-01-preview",
730+
"name": "[variables('azureAISearchName')]",
731+
"location": "[parameters('location')]",
732+
"sku": {
733+
"name": "[parameters('azureSearchSku')]"
734+
}
735+
},
727736
"virtualNetwork": {
728737
"condition": "[parameters('enablePrivateNetworking')]",
729738
"type": "Microsoft.Resources/deployments",
@@ -30741,11 +30750,11 @@
3074130750
"virtualNetwork"
3074230751
]
3074330752
},
30744-
"search": {
30753+
"searchUpdate": {
3074530754
"condition": "[equals(parameters('databaseType'), 'CosmosDB')]",
3074630755
"type": "Microsoft.Resources/deployments",
3074730756
"apiVersion": "2025-04-01",
30748-
"name": "[take(format('avm.res.search.search-service.{0}', variables('azureAISearchName')), 64)]",
30757+
"name": "[take(format('avm.res.search.update.{0}', variables('azureAISearchName')), 64)]",
3074930758
"properties": {
3075030759
"expressionEvaluationOptions": {
3075130760
"scope": "inner"
@@ -33100,6 +33109,7 @@
3310033109
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').searchService)]",
3310133110
"managedIdentityModule",
3310233111
"monitoring",
33112+
"search",
3310333113
"virtualNetwork"
3310433114
]
3310533115
},
@@ -55141,9 +55151,9 @@
5514155151
}
5514255152
},
5514355153
"dependsOn": [
55144-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageQueue)]",
5514555154
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]",
5514655155
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageFile)]",
55156+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageQueue)]",
5514755157
"managedIdentityModule",
5514855158
"virtualNetwork"
5514955159
]
@@ -55186,7 +55196,7 @@
5518655196
"azureOpenAIResourceName": {
5518755197
"value": "[reference('openai').outputs.name.value]"
5518855198
},
55189-
"azureAISearchName": "[if(equals(parameters('databaseType'), 'CosmosDB'), createObject('value', reference('search').outputs.name.value), createObject('value', ''))]",
55199+
"azureAISearchName": "[if(equals(parameters('databaseType'), 'CosmosDB'), createObject('value', variables('azureAISearchName')), createObject('value', ''))]",
5519055200
"storageAccountName": {
5519155201
"value": "[reference('storage').outputs.name.value]"
5519255202
}
@@ -56630,7 +56640,7 @@
5663056640
"mode": "Incremental",
5663156641
"parameters": {
5663256642
"roleAssignments": {
56633-
"value": "[union(if(equals(parameters('databaseType'), 'CosmosDB'), createArray(createObject('principalId', reference('search').outputs.systemAssignedMIPrincipalId.value, 'resourceId', reference('storage').outputs.resourceId.value, 'roleName', 'Storage Blob Data Contributor', 'roleDefinitionId', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe', 'principalType', 'ServicePrincipal'), createObject('principalId', reference('search').outputs.systemAssignedMIPrincipalId.value, 'resourceId', reference('openai').outputs.resourceId.value, 'roleName', 'Cognitive Services User', 'roleDefinitionId', 'a97b65f3-24c7-4388-baec-2e87135dc908', 'principalType', 'ServicePrincipal'), createObject('principalId', reference('search').outputs.systemAssignedMIPrincipalId.value, 'resourceId', reference('openai').outputs.resourceId.value, 'roleName', 'Cognitive Services OpenAI User', 'roleDefinitionId', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd', 'principalType', 'ServicePrincipal')), createArray()), createArray(createObject('principalId', reference('formrecognizer').outputs.systemAssignedMIPrincipalId.value, 'resourceId', reference('storage').outputs.resourceId.value, 'roleName', 'Storage Blob Data Contributor', 'roleDefinitionId', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe', 'principalType', 'ServicePrincipal')))]"
56643+
"value": "[union(if(equals(parameters('databaseType'), 'CosmosDB'), createArray(createObject('principalId', tryGet(if(equals(parameters('databaseType'), 'CosmosDB'), reference('searchUpdate'), null()), 'outputs', 'systemAssignedMIPrincipalId', 'value'), 'resourceId', reference('storage').outputs.resourceId.value, 'roleName', 'Storage Blob Data Contributor', 'roleDefinitionId', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe', 'principalType', 'ServicePrincipal'), createObject('principalId', tryGet(if(equals(parameters('databaseType'), 'CosmosDB'), reference('searchUpdate'), null()), 'outputs', 'systemAssignedMIPrincipalId', 'value'), 'resourceId', reference('openai').outputs.resourceId.value, 'roleName', 'Cognitive Services User', 'roleDefinitionId', 'a97b65f3-24c7-4388-baec-2e87135dc908', 'principalType', 'ServicePrincipal'), createObject('principalId', tryGet(if(equals(parameters('databaseType'), 'CosmosDB'), reference('searchUpdate'), null()), 'outputs', 'systemAssignedMIPrincipalId', 'value'), 'resourceId', reference('openai').outputs.resourceId.value, 'roleName', 'Cognitive Services OpenAI User', 'roleDefinitionId', '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd', 'principalType', 'ServicePrincipal')), createArray()), createArray(createObject('principalId', reference('formrecognizer').outputs.systemAssignedMIPrincipalId.value, 'resourceId', reference('storage').outputs.resourceId.value, 'roleName', 'Storage Blob Data Contributor', 'roleDefinitionId', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe', 'principalType', 'ServicePrincipal')))]"
5663456644
}
5663556645
},
5663656646
"template": {
@@ -56912,7 +56922,7 @@
5691256922
"dependsOn": [
5691356923
"formrecognizer",
5691456924
"openai",
56915-
"search",
56925+
"searchUpdate",
5691656926
"storage"
5691756927
],
5691856928
"metadata": {
@@ -57609,7 +57619,7 @@
5760957619
"metadata": {
5761057620
"description": "Azure Cognitive Search service information (if deployed)."
5761157621
},
57612-
"value": "[if(equals(parameters('databaseType'), 'CosmosDB'), string(createObject('service_name', variables('azureAISearchName'), 'service', reference('search').outputs.endpoint.value, 'use_semantic_search', parameters('azureSearchUseSemanticSearch'), 'semantic_search_config', parameters('azureSearchSemanticSearchConfig'), 'index_is_prechunked', parameters('azureSearchIndexIsPrechunked'), 'top_k', parameters('azureSearchTopK'), 'enable_in_domain', parameters('azureSearchEnableInDomain'), 'content_column', parameters('azureSearchContentColumn'), 'content_vector_column', parameters('azureSearchVectorColumn'), 'filename_column', parameters('azureSearchFilenameColumn'), 'filter', parameters('azureSearchFilter'), 'title_column', parameters('azureSearchTitleColumn'), 'fields_metadata', parameters('azureSearchFieldsMetadata'), 'source_column', parameters('azureSearchSourceColumn'), 'text_column', parameters('azureSearchTextColumn'), 'layout_column', parameters('azureSearchLayoutTextColumn'), 'url_column', parameters('azureSearchUrlColumn'), 'use_integrated_vectorization', parameters('azureSearchUseIntegratedVectorization'), 'index', variables('azureSearchIndex'), 'indexer_name', variables('azureSearchIndexer'), 'datasource_name', variables('azureSearchDatasource'))), '')]"
57622+
"value": "[if(equals(parameters('databaseType'), 'CosmosDB'), string(createObject('service_name', variables('azureAISearchName'), 'service', reference('searchUpdate').outputs.endpoint.value, 'use_semantic_search', parameters('azureSearchUseSemanticSearch'), 'semantic_search_config', parameters('azureSearchSemanticSearchConfig'), 'index_is_prechunked', parameters('azureSearchIndexIsPrechunked'), 'top_k', parameters('azureSearchTopK'), 'enable_in_domain', parameters('azureSearchEnableInDomain'), 'content_column', parameters('azureSearchContentColumn'), 'content_vector_column', parameters('azureSearchVectorColumn'), 'filename_column', parameters('azureSearchFilenameColumn'), 'filter', parameters('azureSearchFilter'), 'title_column', parameters('azureSearchTitleColumn'), 'fields_metadata', parameters('azureSearchFieldsMetadata'), 'source_column', parameters('azureSearchSourceColumn'), 'text_column', parameters('azureSearchTextColumn'), 'layout_column', parameters('azureSearchLayoutTextColumn'), 'url_column', parameters('azureSearchUrlColumn'), 'use_integrated_vectorization', parameters('azureSearchUseIntegratedVectorization'), 'index', variables('azureSearchIndex'), 'indexer_name', variables('azureSearchIndexer'), 'datasource_name', variables('azureSearchDatasource'))), '')]"
5761357623
},
5761457624
"AZURE_SPEECH_SERVICE_INFO": {
5761557625
"type": "string",

0 commit comments

Comments
 (0)