Skip to content

Commit ba01ec0

Browse files
fix: added model deployment module for existing AI services
2 parents 9254d87 + 74af50b commit ba01ec0

File tree

3 files changed

+157
-4
lines changed

3 files changed

+157
-4
lines changed

infra/main.bicep

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,31 @@ module existingAiServicesRoleAssignments 'modules/deploy_foundry_role_assignment
547547
}
548548
}
549549

550+
// ========== Model Deployments for Existing AI Services ========== //
551+
module existingAiServicesModelDeployments 'modules/deploy_ai_model.bicep' = if (useExistingAiFoundryAiProject) {
552+
name: take('module.model-deployments-existing.${aiFoundryAiServicesResourceName}', 64)
553+
scope: resourceGroup(aiFoundryAiServicesSubscriptionId, aiFoundryAiServicesResourceGroupName)
554+
params: {
555+
aiServicesName: aiFoundryAiServicesResourceName
556+
deployments: [
557+
for deployment in aiFoundryAiServicesModelDeployment: {
558+
name: deployment.name
559+
format: deployment.format
560+
model: deployment.model
561+
sku: {
562+
name: deployment.sku.name
563+
capacity: deployment.sku.capacity
564+
}
565+
version: deployment.version
566+
raiPolicyName: deployment.raiPolicyName
567+
}
568+
]
569+
}
570+
dependsOn: [
571+
existingAiServicesRoleAssignments
572+
]
573+
}
574+
550575
// ========== AI Search ========== //
551576
module aiSearch 'br/public:avm/res/search/search-service:0.12.0' = {
552577
name: take('avm.res.search.search-service.${aiSearchName}', 64)

infra/main.json

Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"_generator": {
77
"name": "bicep",
88
"version": "0.41.2.15936",
9-
"templateHash": "14392918201193616164"
9+
"templateHash": "15389484880957971429"
1010
},
1111
"name": "Intelligent Content Generation Accelerator",
1212
"description": "Solution Accelerator for multimodal marketing content generation using Microsoft Agent Framework.\n"
@@ -14242,6 +14242,100 @@
1424214242
"userAssignedIdentity"
1424314243
]
1424414244
},
14245+
"existingAiServicesModelDeployments": {
14246+
"condition": "[variables('useExistingAiFoundryAiProject')]",
14247+
"type": "Microsoft.Resources/deployments",
14248+
"apiVersion": "2025-04-01",
14249+
"name": "[take(format('module.model-deployments-existing.{0}', variables('aiFoundryAiServicesResourceName')), 64)]",
14250+
"subscriptionId": "[variables('aiFoundryAiServicesSubscriptionId')]",
14251+
"resourceGroup": "[variables('aiFoundryAiServicesResourceGroupName')]",
14252+
"properties": {
14253+
"expressionEvaluationOptions": {
14254+
"scope": "inner"
14255+
},
14256+
"mode": "Incremental",
14257+
"parameters": {
14258+
"aiServicesName": {
14259+
"value": "[variables('aiFoundryAiServicesResourceName')]"
14260+
},
14261+
"deployments": {
14262+
"copy": [
14263+
{
14264+
"name": "value",
14265+
"count": "[length(variables('aiFoundryAiServicesModelDeployment'))]",
14266+
"input": "[createObject('name', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].name, 'format', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].format, 'model', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].model, 'sku', createObject('name', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].sku.name, 'capacity', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].sku.capacity), 'version', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].version, 'raiPolicyName', variables('aiFoundryAiServicesModelDeployment')[copyIndex('value')].raiPolicyName)]"
14267+
}
14268+
]
14269+
}
14270+
},
14271+
"template": {
14272+
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
14273+
"contentVersion": "1.0.0.0",
14274+
"metadata": {
14275+
"_generator": {
14276+
"name": "bicep",
14277+
"version": "0.41.2.15936",
14278+
"templateHash": "12449348145632794739"
14279+
}
14280+
},
14281+
"parameters": {
14282+
"aiServicesName": {
14283+
"type": "string",
14284+
"metadata": {
14285+
"description": "Required. Name of the AI Services account."
14286+
}
14287+
},
14288+
"deployments": {
14289+
"type": "array",
14290+
"defaultValue": [],
14291+
"metadata": {
14292+
"description": "Required. Array of model deployments to create."
14293+
}
14294+
}
14295+
},
14296+
"resources": [
14297+
{
14298+
"copy": {
14299+
"name": "modelDeployments",
14300+
"count": "[length(parameters('deployments'))]",
14301+
"mode": "serial",
14302+
"batchSize": 1
14303+
},
14304+
"type": "Microsoft.CognitiveServices/accounts/deployments",
14305+
"apiVersion": "2024-10-01",
14306+
"name": "[format('{0}/{1}', parameters('aiServicesName'), parameters('deployments')[copyIndex()].name)]",
14307+
"properties": {
14308+
"model": {
14309+
"format": "[parameters('deployments')[copyIndex()].format]",
14310+
"name": "[parameters('deployments')[copyIndex()].model]",
14311+
"version": "[parameters('deployments')[copyIndex()].version]"
14312+
},
14313+
"raiPolicyName": "[parameters('deployments')[copyIndex()].raiPolicyName]"
14314+
},
14315+
"sku": {
14316+
"name": "[parameters('deployments')[copyIndex()].sku.name]",
14317+
"capacity": "[parameters('deployments')[copyIndex()].sku.capacity]"
14318+
}
14319+
}
14320+
],
14321+
"outputs": {
14322+
"deployedModelNames": {
14323+
"type": "array",
14324+
"metadata": {
14325+
"description": "The names of the deployed models."
14326+
},
14327+
"copy": {
14328+
"count": "[length(parameters('deployments'))]",
14329+
"input": "[parameters('deployments')[copyIndex()].name]"
14330+
}
14331+
}
14332+
}
14333+
}
14334+
},
14335+
"dependsOn": [
14336+
"existingAiServicesRoleAssignments"
14337+
]
14338+
},
1424514339
"aiSearch": {
1424614340
"type": "Microsoft.Resources/deployments",
1424714341
"apiVersion": "2025-04-01",
@@ -33185,7 +33279,7 @@
3318533279
"_generator": {
3318633280
"name": "bicep",
3318733281
"version": "0.41.2.15936",
33188-
"templateHash": "4952237836308528733"
33282+
"templateHash": "11066122245438821615"
3318933283
}
3319033284
},
3319133285
"parameters": {
@@ -33257,9 +33351,8 @@
3325733351
},
3325833352
"userAssignedIdentityResourceId": {
3325933353
"type": "string",
33260-
"defaultValue": "",
3326133354
"metadata": {
33262-
"description": "Optional. User-assigned managed identity resource ID for ACR pull."
33355+
"description": "Required. User-assigned managed identity resource ID for ACR pull."
3326333356
}
3326433357
}
3326533358
},
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@description('Required. Name of the AI Services account.')
2+
param aiServicesName string
3+
4+
@description('Required. Array of model deployments to create.')
5+
param deployments array = []
6+
7+
// Reference AI Services account (module is scoped to the correct resource group)
8+
resource aiServices 'Microsoft.CognitiveServices/accounts@2025-04-01-preview' existing = {
9+
name: aiServicesName
10+
}
11+
12+
// Deploy models to AI Services account
13+
// Using batchSize(1) to avoid concurrent deployment issues
14+
@batchSize(1)
15+
resource modelDeployments 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = [
16+
for (deployment, index) in deployments: {
17+
parent: aiServices
18+
name: deployment.name
19+
properties: {
20+
model: {
21+
format: deployment.format
22+
name: deployment.model
23+
version: deployment.version
24+
}
25+
raiPolicyName: deployment.raiPolicyName
26+
}
27+
sku: {
28+
name: deployment.sku.name
29+
capacity: deployment.sku.capacity
30+
}
31+
}
32+
]
33+
34+
@description('The names of the deployed models.')
35+
output deployedModelNames array = [for (deployment, i) in deployments: modelDeployments[i].name]

0 commit comments

Comments
 (0)