Skip to content

Commit 8ee525d

Browse files
Added changes to reuse the existing log analytics
1 parent b42f0fd commit 8ee525d

File tree

1 file changed

+43
-20
lines changed

1 file changed

+43
-20
lines changed

infra/main.bicep

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ param frontendContainerImageTag string = 'latest_2025-07-22_895'
107107
@description('Optional. Enable/Disable usage telemetry for module.')
108108
param enableTelemetry bool = true
109109

110+
@description('Use this parameter to reuse an existing Log Analytics Workspace')
111+
param existingLogAnalyticsWorkspaceId string = ''
112+
113+
@description('Use this parameter to reuse an existing AI project resource ID')
114+
param existingFoundryProjectResourceId string = ''
115+
110116
// ============== //
111117
// Variables //
112118
// ============== //
@@ -191,11 +197,23 @@ resource avmTelemetry 'Microsoft.Resources/deployments@2024-03-01' = if (enableT
191197
}
192198
}
193199

200+
// Extracts subscription, resource group, and workspace name from the resource ID when using an existing Log Analytics workspace
201+
var useExistingLogAnalytics = !empty(existingLogAnalyticsWorkspaceId)
202+
203+
var existingLawSubscription = useExistingLogAnalytics ? split(existingLogAnalyticsWorkspaceId, '/')[2] : ''
204+
var existingLawResourceGroup = useExistingLogAnalytics ? split(existingLogAnalyticsWorkspaceId, '/')[4] : ''
205+
var existingLawName = useExistingLogAnalytics ? split(existingLogAnalyticsWorkspaceId, '/')[8] : ''
206+
207+
resource existingLogAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-08-01' existing = if (useExistingLogAnalytics) {
208+
name: existingLawName
209+
scope: resourceGroup(existingLawSubscription, existingLawResourceGroup)
210+
}
211+
194212
// ========== Log Analytics Workspace ========== //
195213
// WAF best practices for Log Analytics: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/azure-log-analytics
196214
// WAF PSRules for Log Analytics: https://azure.github.io/PSRule.Rules.Azure/en/rules/resource/#azure-monitor-logs
197215
var logAnalyticsWorkspaceResourceName = 'log-${solutionSuffix}'
198-
module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0.12.0' = if (enableMonitoring) {
216+
module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0.12.0' = if (enableMonitoring && !useExistingLogAnalytics) {
199217
name: take('avm.res.operational-insights.workspace.${logAnalyticsWorkspaceResourceName}', 64)
200218
params: {
201219
name: logAnalyticsWorkspaceResourceName
@@ -253,6 +271,11 @@ module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0
253271
: null
254272
}
255273
}
274+
// Log Analytics Name, workspace ID, customer ID, and shared key (existing or new)
275+
var logAnalyticsWorkspaceName = useExistingLogAnalytics ? existingLogAnalyticsWorkspace!.name : logAnalyticsWorkspace!.outputs.name
276+
var logAnalyticsWorkspaceResourceId = useExistingLogAnalytics ? existingLogAnalyticsWorkspaceId : logAnalyticsWorkspace!.outputs.resourceId
277+
var logAnalyticsPrimarySharedKey = useExistingLogAnalytics? existingLogAnalyticsWorkspace!.listKeys().primarySharedKey : logAnalyticsWorkspace.outputs.primarySharedKey
278+
var logAnalyticsWorkspaceId = useExistingLogAnalytics? existingLogAnalyticsWorkspace!.properties.customerId : logAnalyticsWorkspace!.outputs.logAnalyticsWorkspaceId
256279

257280
// ========== Application Insights ========== //
258281
// WAF best practices for Application Insights: https://learn.microsoft.com/en-us/azure/well-architected/service-guides/application-insights
@@ -270,8 +293,8 @@ module applicationInsights 'br/public:avm/res/insights/component:0.6.0' = if (en
270293
disableIpMasking: false
271294
flowType: 'Bluefield'
272295
// WAF aligned configuration for Monitoring
273-
workspaceResourceId: enableMonitoring ? logAnalyticsWorkspace!.outputs.resourceId : ''
274-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
296+
workspaceResourceId: enableMonitoring ? logAnalyticsWorkspaceResourceId : ''
297+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
275298
}
276299
}
277300

@@ -299,7 +322,7 @@ module networkSecurityGroupBackend 'br/public:avm/res/network/network-security-g
299322
location: location
300323
tags: tags
301324
enableTelemetry: enableTelemetry
302-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
325+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
303326
securityRules: [
304327
{
305328
name: 'deny-hop-outbound'
@@ -329,7 +352,7 @@ module networkSecurityGroupBastion 'br/public:avm/res/network/network-security-g
329352
location: location
330353
tags: tags
331354
enableTelemetry: enableTelemetry
332-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
355+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
333356
securityRules: [
334357
{
335358
name: 'AllowHttpsInBound'
@@ -485,7 +508,7 @@ module networkSecurityGroupAdministration 'br/public:avm/res/network/network-sec
485508
location: location
486509
tags: tags
487510
enableTelemetry: enableTelemetry
488-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
511+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
489512
securityRules: [
490513
{
491514
name: 'deny-hop-outbound'
@@ -515,7 +538,7 @@ module networkSecurityGroupContainers 'br/public:avm/res/network/network-securit
515538
location: location
516539
tags: tags
517540
enableTelemetry: enableTelemetry
518-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
541+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
519542
securityRules: [
520543
{
521544
name: 'deny-hop-outbound'
@@ -545,7 +568,7 @@ module networkSecurityGroupWebsite 'br/public:avm/res/network/network-security-g
545568
location: location
546569
tags: tags
547570
enableTelemetry: enableTelemetry
548-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
571+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
549572
securityRules: [
550573
{
551574
name: 'deny-hop-outbound'
@@ -639,15 +662,15 @@ module bastionHost 'br/public:avm/res/network/bastion-host:0.7.0' = if (enablePr
639662
virtualNetworkResourceId: virtualNetwork!.?outputs.?resourceId
640663
publicIPAddressObject: {
641664
name: 'pip-bas${solutionSuffix}'
642-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
665+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
643666
tags: tags
644667
}
645668
disableCopyPaste: true
646669
enableFileCopy: false
647670
enableIpConnect: false
648671
enableShareableLink: false
649672
scaleUnits: 4
650-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
673+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
651674
}
652675
}
653676

@@ -762,7 +785,7 @@ module windowsVmDataCollectionRules 'br/public:avm/res/insights/data-collection-
762785
destinations: {
763786
logAnalytics: [
764787
{
765-
workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId
788+
workspaceResourceId: logAnalyticsWorkspaceResourceId
766789
name: 'la--1264800308'
767790
}
768791
]
@@ -840,14 +863,14 @@ module virtualMachine 'br/public:avm/res/compute/virtual-machine:0.17.0' = if (e
840863
tags: tags
841864
deleteOption: 'Delete'
842865
diagnosticSettings: enableMonitoring //WAF aligned configuration for Monitoring
843-
? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }]
866+
? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }]
844867
: null
845868
ipConfigurations: [
846869
{
847870
name: '${virtualMachineResourceName}-nic01-ipconfig01'
848871
subnetResourceId: virtualNetwork!.outputs.subnetResourceIds[1]
849872
diagnosticSettings: enableMonitoring //WAF aligned configuration for Monitoring
850-
? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }]
873+
? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }]
851874
: null
852875
}
853876
]
@@ -879,7 +902,7 @@ module virtualMachine 'br/public:avm/res/compute/virtual-machine:0.17.0' = if (e
879902
dataCollectionRuleAssociations: [
880903
{
881904
dataCollectionRuleResourceId: windowsVmDataCollectionRules!.outputs.resourceId
882-
name: 'send-${logAnalyticsWorkspace!.outputs.name}'
905+
name: 'send-${logAnalyticsWorkspaceName}'
883906
}
884907
]
885908
enabled: true
@@ -989,7 +1012,7 @@ module aiFoundryAiServices 'modules/ai-services.bicep' = if (aiFoundryAIservices
9891012
}
9901013
]
9911014
// WAF aligned configuration for Monitoring
992-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
1015+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
9931016
publicNetworkAccess: enablePrivateNetworking ? 'Disabled' : 'Enabled'
9941017
privateEndpoints: enablePrivateNetworking
9951018
? ([
@@ -1115,7 +1138,7 @@ module cosmosDb 'br/public:avm/res/document-db/database-account:0.15.0' = {
11151138
}
11161139
]
11171140
// WAF aligned configuration for Monitoring
1118-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
1141+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
11191142
// WAF aligned configuration for Private Networking
11201143
networkRestrictions: {
11211144
networkAclBypass: 'None'
@@ -1180,8 +1203,8 @@ module containerAppEnvironment 'br/public:avm/res/app/managed-environment:0.11.2
11801203
? {
11811204
destination: 'log-analytics'
11821205
logAnalyticsConfiguration: {
1183-
customerId: logAnalyticsWorkspace!.outputs.logAnalyticsWorkspaceId
1184-
sharedKey: logAnalyticsWorkspace.outputs.primarySharedKey
1206+
customerId: logAnalyticsWorkspaceId
1207+
sharedKey: logAnalyticsPrimarySharedKey
11851208
}
11861209
}
11871210
: null
@@ -1389,7 +1412,7 @@ module webServerFarm 'br/public:avm/res/web/serverfarm:0.5.0' = {
13891412
reserved: true
13901413
kind: 'linux'
13911414
// WAF aligned configuration for Monitoring
1392-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
1415+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
13931416
// WAF aligned configuration for Scalability
13941417
skuName: enableScalability || enableRedundancy ? 'P1v3' : 'B3'
13951418
skuCapacity: enableScalability ? 3 : 1
@@ -1431,7 +1454,7 @@ module webSite 'modules/web-sites.bicep' = {
14311454
applicationInsightResourceId: enableMonitoring ? applicationInsights!.outputs.resourceId : null
14321455
}
14331456
]
1434-
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspace!.outputs.resourceId }] : null
1457+
diagnosticSettings: enableMonitoring ? [{ workspaceResourceId: logAnalyticsWorkspaceResourceId }] : null
14351458
// WAF aligned configuration for Private Networking
14361459
vnetRouteAllEnabled: enablePrivateNetworking ? true : false
14371460
vnetImagePullEnabled: enablePrivateNetworking ? true : false

0 commit comments

Comments
 (0)