@@ -34,6 +34,7 @@ param logAnalyticsWorkspaceConfiguration logAnalyticsWorkspaceConfigurationType
3434 sku : 'PerGB2018'
3535 tags : tags
3636 dataRetentionInDays : 365
37+ existingWorkspaceResourceId : ''
3738}
3839
3940@description ('Optional. The configuration to apply for the Multi-Agent Custom Automation Engine Application Insights resource.' )
@@ -255,7 +256,10 @@ resource avmTelemetry 'Microsoft.Resources/deployments@2024-03-01' = if (enableT
255256// Log Analytics configuration defaults
256257var logAnalyticsWorkspaceEnabled = logAnalyticsWorkspaceConfiguration .?enabled ?? true
257258var logAnalyticsWorkspaceResourceName = logAnalyticsWorkspaceConfiguration .?name ?? 'log-${solutionPrefix }'
258- module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0.11.2' = if (logAnalyticsWorkspaceEnabled ) {
259+ var existingWorkspaceResourceId = logAnalyticsWorkspaceConfiguration .?existingWorkspaceResourceId ?? ''
260+ var useExistingWorkspace = existingWorkspaceResourceId != ''
261+
262+ module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0.11.2' = if (logAnalyticsWorkspaceEnabled && !useExistingWorkspace ) {
259263 name : take ('avm.res.operational-insights.workspace.${logAnalyticsWorkspaceResourceName }' , 64 )
260264 params : {
261265 name : logAnalyticsWorkspaceResourceName
@@ -268,6 +272,8 @@ module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0
268272 }
269273}
270274
275+ var logAnalyticsWorkspaceId = useExistingWorkspace ? existingWorkspaceResourceId : logAnalyticsWorkspace .outputs .resourceId
276+
271277// ========== Application Insights ========== //
272278// WAF best practices for Application Insights: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/application-insights
273279// Application Insights configuration defaults
@@ -277,12 +283,12 @@ module applicationInsights 'br/public:avm/res/insights/component:0.6.0' = if (ap
277283 name : take ('avm.res.insights.component.${applicationInsightsResourceName }' , 64 )
278284 params : {
279285 name : applicationInsightsResourceName
280- workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId
286+ workspaceResourceId : logAnalyticsWorkspaceId
281287 location : applicationInsightsConfiguration .?location ?? solutionLocation
282288 enableTelemetry : enableTelemetry
283289 tags : applicationInsightsConfiguration .?tags ?? tags
284290 retentionInDays : applicationInsightsConfiguration .?retentionInDays ?? 365
285- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
291+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
286292 kind : 'web'
287293 disableIpMasking : false
288294 flowType : 'Bluefield'
@@ -315,7 +321,7 @@ module networkSecurityGroupBackend 'br/public:avm/res/network/network-security-g
315321 location : networkSecurityGroupBackendConfiguration .?location ?? solutionLocation
316322 tags : networkSecurityGroupBackendConfiguration .?tags ?? tags
317323 enableTelemetry : enableTelemetry
318- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
324+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
319325 securityRules : networkSecurityGroupBackendConfiguration .?securityRules ?? [
320326 // {
321327 // name: 'DenySshRdpOutbound' //Azure Bastion
@@ -346,7 +352,7 @@ module networkSecurityGroupContainers 'br/public:avm/res/network/network-securit
346352 location : networkSecurityGroupContainersConfiguration .?location ?? solutionLocation
347353 tags : networkSecurityGroupContainersConfiguration .?tags ?? tags
348354 enableTelemetry : enableTelemetry
349- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
355+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
350356 securityRules : networkSecurityGroupContainersConfiguration .?securityRules ?? [
351357 // {
352358 // name: 'DenySshRdpOutbound' //Azure Bastion
@@ -377,7 +383,7 @@ module networkSecurityGroupBastion 'br/public:avm/res/network/network-security-g
377383 location : networkSecurityGroupBastionConfiguration .?location ?? solutionLocation
378384 tags : networkSecurityGroupBastionConfiguration .?tags ?? tags
379385 enableTelemetry : enableTelemetry
380- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
386+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
381387 securityRules : networkSecurityGroupBastionConfiguration .?securityRules ?? [
382388 {
383389 name : 'AllowHttpsInBound'
@@ -534,7 +540,7 @@ module networkSecurityGroupAdministration 'br/public:avm/res/network/network-sec
534540 location : networkSecurityGroupAdministrationConfiguration .?location ?? solutionLocation
535541 tags : networkSecurityGroupAdministrationConfiguration .?tags ?? tags
536542 enableTelemetry : enableTelemetry
537- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
543+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
538544 securityRules : networkSecurityGroupAdministrationConfiguration .?securityRules ?? [
539545 // {
540546 // name: 'DenySshRdpOutbound' //Azure Bastion
@@ -651,12 +657,12 @@ module virtualMachine 'br/public:avm/res/compute/virtual-machine:0.13.0' = if (v
651657 name : 'nic-${virtualMachineResourceName }'
652658 //networkSecurityGroupResourceId: virtualMachineConfiguration.?nicConfigurationConfiguration.networkSecurityGroupResourceId
653659 //nicSuffix: 'nic-${virtualMachineResourceName}'
654- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
660+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
655661 ipConfigurations : [
656662 {
657663 name : '${virtualMachineResourceName }-nic01-ipconfig01'
658664 subnetResourceId : virtualMachineConfiguration .?subnetResourceId ?? virtualNetwork .outputs .subnetResourceIds [1 ]
659- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
665+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
660666 }
661667 ]
662668 }
@@ -730,7 +736,7 @@ var aiFoundryAiServicesModelDeployment = {
730736 sku : {
731737 name : 'GlobalStandard'
732738 //Curently the capacity is set to 140 for opinanal performance.
733- capacity : aiFoundryAiServicesConfiguration .?modelCapcity ?? 140
739+ capacity : aiFoundryAiServicesConfiguration .?modelCapacity ?? 140
734740 }
735741 raiPolicyName : 'Microsoft.Default'
736742}
@@ -742,7 +748,7 @@ module aiFoundryAiServices 'br/public:avm/res/cognitive-services/account:0.10.2'
742748 tags : aiFoundryAiServicesConfiguration .?tags ?? tags
743749 location : aiFoundryAiServicesConfiguration .?location ?? azureOpenAILocation
744750 enableTelemetry : enableTelemetry
745- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
751+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
746752 sku : aiFoundryAiServicesConfiguration .?sku ?? 'S0'
747753 kind : 'AIServices'
748754 disableLocalAuth : false //Should be set to true for WAF aligned configuration
@@ -841,7 +847,7 @@ module aiFoundryStorageAccount 'br/public:avm/res/storage/storage-account:0.18.2
841847 location : aiFoundryStorageAccountConfiguration .?location ?? azureOpenAILocation
842848 tags : aiFoundryStorageAccountConfiguration .?tags ?? tags
843849 enableTelemetry : enableTelemetry
844- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
850+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
845851 skuName : aiFoundryStorageAccountConfiguration .?sku ?? 'Standard_ZRS'
846852 allowSharedKeyAccess : false
847853 networkAcls : {
@@ -852,7 +858,7 @@ module aiFoundryStorageAccount 'br/public:avm/res/storage/storage-account:0.18.2
852858 deleteRetentionPolicyEnabled : false
853859 containerDeleteRetentionPolicyDays : 7
854860 containerDeleteRetentionPolicyEnabled : false
855- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
861+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
856862 }
857863 publicNetworkAccess : virtualNetworkEnabled ? 'Disabled' : 'Enabled'
858864 allowBlobPublicAccess : virtualNetworkEnabled ? false : true
@@ -912,7 +918,7 @@ module aiFoundryAiHub 'modules/ai-hub.bicep' = if (aiFoundryAiHubEnabled) {
912918 aiFoundryAiServicesName : aiFoundryAiServices .outputs .name
913919 applicationInsightsResourceId : applicationInsights .outputs .resourceId
914920 enableTelemetry : enableTelemetry
915- logAnalyticsWorkspaceResourceId : logAnalyticsWorkspace . outputs . resourceId
921+ logAnalyticsWorkspaceResourceId : logAnalyticsWorkspaceId
916922 storageAccountResourceId : aiFoundryStorageAccount .outputs .resourceId
917923 virtualNetworkEnabled : virtualNetworkEnabled
918924 privateEndpoints : virtualNetworkEnabled
@@ -948,7 +954,7 @@ module aiFoundryAiProject 'br/public:avm/res/machine-learning-services/workspace
948954 location : aiFoundryAiProjectConfiguration .?location ?? azureOpenAILocation
949955 tags : aiFoundryAiProjectConfiguration .?tags ?? tags
950956 enableTelemetry : enableTelemetry
951- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
957+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
952958 sku : aiFoundryAiProjectConfiguration .?sku ?? 'Basic'
953959 kind : 'Project'
954960 hubResourceId : aiFoundryAiHub .outputs .resourceId
@@ -991,7 +997,7 @@ module cosmosDb 'br/public:avm/res/document-db/database-account:0.12.0' = if (co
991997 location : cosmosDbAccountConfiguration .?location ?? solutionLocation
992998 tags : cosmosDbAccountConfiguration .?tags ?? tags
993999 enableTelemetry : enableTelemetry
994- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
1000+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
9951001 databaseAccountOfferType : 'Standard'
9961002 enableFreeTier : false
9971003 networkRestrictions : {
@@ -1065,7 +1071,7 @@ module containerAppEnvironment 'modules/container-app-environment.bicep' = if (c
10651071 name : containerAppEnvironmentResourceName
10661072 tags : containerAppEnvironmentConfiguration .?tags ?? tags
10671073 location : containerAppEnvironmentConfiguration .?location ?? solutionLocation
1068- logAnalyticsResourceName : logAnalyticsWorkspace . outputs . name
1074+ logAnalyticsResourceId : logAnalyticsWorkspaceId
10691075 publicNetworkAccess : 'Enabled'
10701076 zoneRedundant : virtualNetworkEnabled ? true : false
10711077 applicationInsightsConnectionString : applicationInsights .outputs .connectionString
@@ -1210,7 +1216,7 @@ module webServerFarm 'br/public:avm/res/web/serverfarm:0.4.1' = if (webServerFar
12101216 skuName : webServerFarmConfiguration .?skuName ?? 'P1v3'
12111217 skuCapacity : webServerFarmConfiguration .?skuCapacity ?? 3
12121218 reserved : true
1213- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
1219+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
12141220 kind : 'linux'
12151221 zoneRedundant : false //TODO: make it zone redundant for waf aligned
12161222 }
@@ -1231,7 +1237,7 @@ module webSite 'br/public:avm/res/web/site:0.15.1' = if (webSiteEnabled) {
12311237 enableTelemetry : enableTelemetry
12321238 serverFarmResourceId : webSiteConfiguration .?environmentResourceId ?? webServerFarm .?outputs .resourceId
12331239 appInsightResourceId : applicationInsights .outputs .resourceId
1234- diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspace . outputs . resourceId }]
1240+ diagnosticSettings : [{ workspaceResourceId : logAnalyticsWorkspaceId }]
12351241 publicNetworkAccess : 'Enabled' //TODO: use Azure Front Door WAF or Application Gateway WAF instead
12361242 siteConfig : {
12371243 linuxFxVersion : 'DOCKER|${webSiteConfiguration .?containerImageRegistryDomain ?? 'biabcontainerreg.azurecr.io' }/${webSiteConfiguration .?containerImageName ?? 'macaefrontend' }:${webSiteConfiguration .?containerImageTag ?? 'latest' }'
@@ -1292,6 +1298,9 @@ type logAnalyticsWorkspaceConfigurationType = {
12921298 @description ('Optional. The number of days to retain the data in the Log Analytics Workspace. If empty, it will be set to 365 days.' )
12931299 @maxValue (730 )
12941300 dataRetentionInDays : int ?
1301+
1302+ @description ('Optional: Existing Log Analytics Workspace Resource ID' )
1303+ existingWorkspaceResourceId : string ?
12951304}
12961305
12971306@export ()
0 commit comments