Skip to content

Commit 5fdd3e4

Browse files
fix: SFI changes: TLS1.2 Support for SQL and Increased Quota for Azure AI GPT-4o deployment to avoid rate limiting
fix: SFI changes: TLS1.2 Support for SQL and Increased Quota for Azure AI GPT-4o deployment to avoid rate limiting
2 parents 264a141 + 60540e1 commit 5fdd3e4

File tree

3 files changed

+62
-66
lines changed

3 files changed

+62
-66
lines changed

infra/deploy_sql_db.bicep

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,29 @@ param keyVaultName string
77
param managedIdentityObjectId string
88
param managedIdentityName string
99

10-
var serverName = '${ solutionName }-sql-server'
11-
var sqlDBName = '${ solutionName }-sql-db'
10+
var serverName = '${solutionName }-sql-server'
11+
var sqlDBName = '${solutionName }-sql-db'
1212
var location = solutionLocation
1313
var administratorLogin = 'sqladmin'
1414
var administratorLoginPassword = 'TestPassword_1234'
1515

1616
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
1717
name: serverName
1818
location: location
19-
kind:'v12.0'
19+
kind: 'v12.0'
2020
properties: {
21-
publicNetworkAccess: 'Enabled'
22-
version: '12.0'
23-
restrictOutboundNetworkAccess: 'Disabled'
24-
administrators: {
25-
login: managedIdentityName
26-
sid: managedIdentityObjectId
27-
tenantId: subscription().tenantId
28-
administratorType: 'ActiveDirectory'
29-
azureADOnlyAuthentication: true
30-
}
21+
publicNetworkAccess: 'Enabled'
22+
version: '12.0'
23+
restrictOutboundNetworkAccess: 'Disabled'
24+
minimalTlsVersion: '1.2' // Enforce TLS 1.2 to comply with Azure policy
25+
administrators: {
26+
login: managedIdentityName
27+
sid: managedIdentityObjectId
28+
tenantId: subscription().tenantId
29+
administratorType: 'ActiveDirectory'
30+
azureADOnlyAuthentication: true
3131
}
32+
}
3233
}
3334

3435
resource firewallRule 'Microsoft.Sql/servers/firewallRules@2023-08-01-preview' = {
@@ -59,11 +60,11 @@ resource sqlDB 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
5960
family: 'Gen5'
6061
capacity: 2
6162
}
62-
kind:'v12.0,user,vcore,serverless'
63+
kind: 'v12.0,user,vcore,serverless'
6364
properties: {
6465
collation: 'SQL_Latin1_General_CP1_CI_AS'
65-
autoPauseDelay:60
66-
minCapacity:1
66+
autoPauseDelay: 60
67+
minCapacity: 1
6768
readScale: 'Disabled'
6869
zoneRedundant: false
6970
}
@@ -77,7 +78,7 @@ resource sqldbServerEntry 'Microsoft.KeyVault/vaults/secrets@2021-11-01-preview'
7778
parent: keyVault
7879
name: 'SQLDB-SERVER'
7980
properties: {
80-
value: '${serverName}.database.windows.net'
81+
value: '${serverName}${environment().suffixes.sqlServerHostname}'
8182
}
8283
}
8384

infra/main.bicep

Lines changed: 38 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ param environmentName string
88

99
@minLength(1)
1010
@description('Location for the Content Understanding service deployment:')
11-
@allowed(['swedencentral'
12-
'australiaeast'
13-
])
14-
11+
@allowed(['swedencentral', 'australiaeast'])
1512
@metadata({
1613
azd: {
1714
type: 'location'
@@ -58,7 +55,6 @@ param gptDeploymentCapacity int = 30
5855
])
5956
param embeddingModel string = 'text-embedding-ada-002'
6057

61-
6258
@minValue(10)
6359
@description('Capacity of the Embedding Model deployment')
6460
param embeddingDeploymentCapacity int = 80
@@ -73,7 +69,6 @@ var resourceGroupLocation = resourceGroup().location
7369
var solutionLocation = resourceGroupLocation
7470
var baseUrl = 'https://raw.githubusercontent.com/microsoft/Conversation-Knowledge-Mining-Solution-Accelerator/main/'
7571

76-
7772
// ========== Managed Identity ========== //
7873
module managedIdentityModule 'deploy_managed_identity.bicep' = {
7974
name: 'deploy_managed_identity'
@@ -90,7 +85,7 @@ module kvault 'deploy_keyvault.bicep' = {
9085
params: {
9186
solutionName: solutionPrefix
9287
solutionLocation: resourceGroupLocation
93-
managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.objectId
88+
managedIdentityObjectId: managedIdentityModule.outputs.managedIdentityOutput.objectId
9489
}
9590
scope: resourceGroup(resourceGroup().name)
9691
}
@@ -109,7 +104,7 @@ module aifoundry 'deploy_ai_foundry.bicep' = {
109104
gptDeploymentCapacity: gptDeploymentCapacity
110105
embeddingModel: embeddingModel
111106
embeddingDeploymentCapacity: embeddingDeploymentCapacity
112-
managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.objectId
107+
managedIdentityObjectId: managedIdentityModule.outputs.managedIdentityOutput.objectId
113108
}
114109
scope: resourceGroup(resourceGroup().name)
115110
}
@@ -121,7 +116,7 @@ module storageAccount 'deploy_storage_account.bicep' = {
121116
solutionName: solutionPrefix
122117
solutionLocation: solutionLocation
123118
keyVaultName: kvault.outputs.keyvaultName
124-
managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.objectId
119+
managedIdentityObjectId: managedIdentityModule.outputs.managedIdentityOutput.objectId
125120
}
126121
scope: resourceGroup(resourceGroup().name)
127122
}
@@ -158,23 +153,23 @@ resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = {
158153

159154
//========== Deployment script to upload sample data ========== //
160155
module uploadFiles 'deploy_post_deployment_scripts.bicep' = {
161-
name : 'deploy_post_deployment_scripts'
162-
params:{
156+
name: 'deploy_post_deployment_scripts'
157+
params: {
163158
solutionName: solutionPrefix
164159
solutionLocation: secondaryLocation
165160
baseUrl: baseUrl
166161
storageAccountName: storageAccount.outputs.storageName
167162
containerName: storageAccount.outputs.storageContainer
168-
managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.id
169-
managedIdentityClientId:managedIdentityModule.outputs.managedIdentityOutput.clientId
170-
keyVaultName:aifoundry.outputs.keyvaultName
163+
managedIdentityObjectId: managedIdentityModule.outputs.managedIdentityOutput.id
164+
managedIdentityClientId: managedIdentityModule.outputs.managedIdentityOutput.clientId
165+
keyVaultName: aifoundry.outputs.keyvaultName
171166
logAnalyticsWorkspaceResourceName: aifoundry.outputs.logAnalyticsWorkspaceResourceName
172167
sqlServerName: sqlDBModule.outputs.sqlServerName
173168
sqlDbName: sqlDBModule.outputs.sqlDbName
174169
sqlUsers: [
175170
{
176-
principalId: managedIdentityModule.outputs.managedIdentityBackendAppOutput.clientId // Replace with actual Principal ID
177-
principalName: managedIdentityModule.outputs.managedIdentityBackendAppOutput.name // Replace with actual user email or name
171+
principalId: managedIdentityModule.outputs.managedIdentityBackendAppOutput.clientId // Replace with actual Principal ID
172+
principalName: managedIdentityModule.outputs.managedIdentityBackendAppOutput.name // Replace with actual user email or name
178173
databaseRoles: ['db_datareader', 'db_datawriter']
179174
}
180175
]
@@ -188,52 +183,52 @@ module hostingplan 'deploy_app_service_plan.bicep' = {
188183
}
189184
}
190185

191-
module backend_docker 'deploy_backend_docker.bicep'= {
186+
module backend_docker 'deploy_backend_docker.bicep' = {
192187
name: 'deploy_backend_docker'
193188
params: {
194189
imageTag: imageTag
195190
appServicePlanId: hostingplan.outputs.name
196191
applicationInsightsId: aifoundry.outputs.applicationInsightsId
197-
azureOpenAIKey:keyVault.getSecret('AZURE-OPENAI-KEY')
198-
azureAiProjectConnString:keyVault.getSecret('AZURE-AI-PROJECT-CONN-STRING')
199-
azureSearchAdminKey:keyVault.getSecret('AZURE-SEARCH-KEY')
192+
azureOpenAIKey: keyVault.getSecret('AZURE-OPENAI-KEY')
193+
azureAiProjectConnString: keyVault.getSecret('AZURE-AI-PROJECT-CONN-STRING')
194+
azureSearchAdminKey: keyVault.getSecret('AZURE-SEARCH-KEY')
200195
solutionName: solutionPrefix
201196
userassignedIdentityId: managedIdentityModule.outputs.managedIdentityBackendAppOutput.id
202197
aiProjectName: aifoundry.outputs.aiProjectName
203-
appSettings:{
204-
AZURE_OPEN_AI_DEPLOYMENT_MODEL:gptModelName
205-
AZURE_OPEN_AI_ENDPOINT:aifoundry.outputs.aiServicesTarget
206-
AZURE_OPENAI_API_VERSION: azureOpenAIApiVersion
207-
AZURE_OPENAI_RESOURCE:aifoundry.outputs.aiServicesName
208-
USE_CHAT_HISTORY_ENABLED:'True'
209-
AZURE_COSMOSDB_ACCOUNT: cosmosDBModule.outputs.cosmosAccountName
210-
AZURE_COSMOSDB_CONVERSATIONS_CONTAINER: cosmosDBModule.outputs.cosmosContainerName
211-
AZURE_COSMOSDB_DATABASE: cosmosDBModule.outputs.cosmosDatabaseName
212-
AZURE_COSMOSDB_ENABLE_FEEDBACK:'True'
213-
SQLDB_DATABASE:sqlDBModule.outputs.sqlDbName
214-
SQLDB_SERVER: sqlDBModule.outputs.sqlServerName
215-
SQLDB_USERNAME: sqlDBModule.outputs.sqlDbUser
216-
SQLDB_USER_MID: managedIdentityModule.outputs.managedIdentityBackendAppOutput.clientId
198+
appSettings: {
199+
AZURE_OPEN_AI_DEPLOYMENT_MODEL: gptModelName
200+
AZURE_OPEN_AI_ENDPOINT: aifoundry.outputs.aiServicesTarget
201+
AZURE_OPENAI_API_VERSION: azureOpenAIApiVersion
202+
AZURE_OPENAI_RESOURCE: aifoundry.outputs.aiServicesName
203+
USE_CHAT_HISTORY_ENABLED: 'True'
204+
AZURE_COSMOSDB_ACCOUNT: cosmosDBModule.outputs.cosmosAccountName
205+
AZURE_COSMOSDB_CONVERSATIONS_CONTAINER: cosmosDBModule.outputs.cosmosContainerName
206+
AZURE_COSMOSDB_DATABASE: cosmosDBModule.outputs.cosmosDatabaseName
207+
AZURE_COSMOSDB_ENABLE_FEEDBACK: 'True'
208+
SQLDB_DATABASE: sqlDBModule.outputs.sqlDbName
209+
SQLDB_SERVER: sqlDBModule.outputs.sqlServerName
210+
SQLDB_USERNAME: sqlDBModule.outputs.sqlDbUser
211+
SQLDB_USER_MID: managedIdentityModule.outputs.managedIdentityBackendAppOutput.clientId
217212

218-
OPENAI_API_VERSION: azureOpenAIApiVersion
219-
AZURE_AI_SEARCH_ENDPOINT: aifoundry.outputs.aiSearchTarget
220-
AZURE_AI_SEARCH_INDEX: 'call_transcripts_index'
221-
USE_AI_PROJECT_CLIENT:'False'
222-
DISPLAY_CHART_DEFAULT:'False'
223-
}
213+
OPENAI_API_VERSION: azureOpenAIApiVersion
214+
AZURE_AI_SEARCH_ENDPOINT: aifoundry.outputs.aiSearchTarget
215+
AZURE_AI_SEARCH_INDEX: 'call_transcripts_index'
216+
USE_AI_PROJECT_CLIENT: 'False'
217+
DISPLAY_CHART_DEFAULT: 'False'
218+
}
224219
}
225220
scope: resourceGroup(resourceGroup().name)
226221
}
227222

228-
module frontend_docker 'deploy_frontend_docker.bicep'= {
223+
module frontend_docker 'deploy_frontend_docker.bicep' = {
229224
name: 'deploy_frontend_docker'
230225
params: {
231226
imageTag: imageTag
232227
appServicePlanId: hostingplan.outputs.name
233228
applicationInsightsId: aifoundry.outputs.applicationInsightsId
234229
solutionName: solutionPrefix
235-
appSettings:{
236-
APP_API_BASE_URL:backend_docker.outputs.appUrl
230+
appSettings: {
231+
APP_API_BASE_URL: backend_docker.outputs.appUrl
237232
}
238233
}
239234
scope: resourceGroup(resourceGroup().name)
@@ -276,4 +271,3 @@ output DISPLAY_CHART_DEFAULT string = 'False'
276271

277272
output API_APP_URL string = backend_docker.outputs.appUrl
278273
output WEB_APP_URL string = frontend_docker.outputs.appUrl
279-

infra/main.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"_generator": {
66
"name": "bicep",
77
"version": "0.35.1.17967",
8-
"templateHash": "531222519582602266"
8+
"templateHash": "4422559797427921508"
99
}
1010
},
1111
"parameters": {
@@ -1481,7 +1481,7 @@
14811481
"_generator": {
14821482
"name": "bicep",
14831483
"version": "0.35.1.17967",
1484-
"templateHash": "16772146797302961765"
1484+
"templateHash": "1810228841691441178"
14851485
}
14861486
},
14871487
"parameters": {
@@ -1524,6 +1524,7 @@
15241524
"publicNetworkAccess": "Enabled",
15251525
"version": "12.0",
15261526
"restrictOutboundNetworkAccess": "Disabled",
1527+
"minimalTlsVersion": "1.2",
15271528
"administrators": {
15281529
"login": "[parameters('managedIdentityName')]",
15291530
"sid": "[parameters('managedIdentityObjectId')]",
@@ -1585,7 +1586,7 @@
15851586
"apiVersion": "2021-11-01-preview",
15861587
"name": "[format('{0}/{1}', parameters('keyVaultName'), 'SQLDB-SERVER')]",
15871588
"properties": {
1588-
"value": "[format('{0}.database.windows.net', variables('serverName'))]"
1589+
"value": "[format('{0}{1}', variables('serverName'), environment().suffixes.sqlServerHostname)]"
15891590
}
15901591
},
15911592
{
@@ -2026,7 +2027,7 @@
20262027
"_generator": {
20272028
"name": "bicep",
20282029
"version": "0.35.1.17967",
2029-
"templateHash": "13726599232772586761"
2030+
"templateHash": "3979043666234492120"
20302031
}
20312032
},
20322033
"parameters": {
@@ -2065,7 +2066,7 @@
20652066
"variables": {
20662067
"imageName": "[format('DOCKER|kmcontainerreg.azurecr.io/km-api:{0}', parameters('imageTag'))]",
20672068
"name": "[format('{0}-api', parameters('solutionName'))]",
2068-
"reactAppLayoutConfig": "{\r\n \"appConfig\": {\r\n \"THREE_COLUMN\": {\r\n \"DASHBOARD\": 50,\r\n \"CHAT\": 33,\r\n \"CHATHISTORY\": 17\r\n },\r\n \"TWO_COLUMN\": {\r\n \"DASHBOARD_CHAT\": {\r\n \"DASHBOARD\": 65,\r\n \"CHAT\": 35\r\n },\r\n \"CHAT_CHATHISTORY\": {\r\n \"CHAT\": 80,\r\n \"CHATHISTORY\": 20\r\n }\r\n }\r\n },\r\n \"charts\": [\r\n {\r\n \"id\": \"SATISFIED\",\r\n \"name\": \"Satisfied\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 1, \"height\": 11 }\r\n },\r\n {\r\n \"id\": \"TOTAL_CALLS\",\r\n \"name\": \"Total Calls\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 2, \"span\": 1 }\r\n },\r\n {\r\n \"id\": \"AVG_HANDLING_TIME\",\r\n \"name\": \"Average Handling Time\",\r\n \"type\": \"card\",\r\n \"layout\": { \"row\": 1, \"column\": 3, \"span\": 1 }\r\n },\r\n {\r\n \"id\": \"SENTIMENT\",\r\n \"name\": \"Topics Overview\",\r\n \"type\": \"donutchart\",\r\n \"layout\": { \"row\": 2, \"column\": 1, \"width\": 40, \"height\": 44.5 }\r\n },\r\n {\r\n \"id\": \"AVG_HANDLING_TIME_BY_TOPIC\",\r\n \"name\": \"Average Handling Time By Topic\",\r\n \"type\": \"bar\",\r\n \"layout\": { \"row\": 2, \"column\": 2, \"row-span\": 2, \"width\": 60 }\r\n },\r\n {\r\n \"id\": \"TOPICS\",\r\n \"name\": \"Trending Topics\",\r\n \"type\": \"table\",\r\n \"layout\": { \"row\": 3, \"column\": 1, \"span\": 2 }\r\n },\r\n {\r\n \"id\": \"KEY_PHRASES\",\r\n \"name\": \"Key Phrases\",\r\n \"type\": \"wordcloud\",\r\n \"layout\": { \"row\": 3, \"column\": 2, \"height\": 44.5 }\r\n }\r\n ]\r\n}"
2069+
"reactAppLayoutConfig": "{\n \"appConfig\": {\n \"THREE_COLUMN\": {\n \"DASHBOARD\": 50,\n \"CHAT\": 33,\n \"CHATHISTORY\": 17\n },\n \"TWO_COLUMN\": {\n \"DASHBOARD_CHAT\": {\n \"DASHBOARD\": 65,\n \"CHAT\": 35\n },\n \"CHAT_CHATHISTORY\": {\n \"CHAT\": 80,\n \"CHATHISTORY\": 20\n }\n }\n },\n \"charts\": [\n {\n \"id\": \"SATISFIED\",\n \"name\": \"Satisfied\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 1, \"height\": 11 }\n },\n {\n \"id\": \"TOTAL_CALLS\",\n \"name\": \"Total Calls\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 2, \"span\": 1 }\n },\n {\n \"id\": \"AVG_HANDLING_TIME\",\n \"name\": \"Average Handling Time\",\n \"type\": \"card\",\n \"layout\": { \"row\": 1, \"column\": 3, \"span\": 1 }\n },\n {\n \"id\": \"SENTIMENT\",\n \"name\": \"Topics Overview\",\n \"type\": \"donutchart\",\n \"layout\": { \"row\": 2, \"column\": 1, \"width\": 40, \"height\": 44.5 }\n },\n {\n \"id\": \"AVG_HANDLING_TIME_BY_TOPIC\",\n \"name\": \"Average Handling Time By Topic\",\n \"type\": \"bar\",\n \"layout\": { \"row\": 2, \"column\": 2, \"row-span\": 2, \"width\": 60 }\n },\n {\n \"id\": \"TOPICS\",\n \"name\": \"Trending Topics\",\n \"type\": \"table\",\n \"layout\": { \"row\": 3, \"column\": 1, \"span\": 2 }\n },\n {\n \"id\": \"KEY_PHRASES\",\n \"name\": \"Key Phrases\",\n \"type\": \"wordcloud\",\n \"layout\": { \"row\": 3, \"column\": 2, \"height\": 44.5 }\n }\n ]\n}"
20692070
},
20702071
"resources": [
20712072
{

0 commit comments

Comments
 (0)