Skip to content

Commit 4620f5d

Browse files
Merge pull request #491 from microsoft/dev
fix: merging dev to main branch
2 parents 0bf2ccf + ae28697 commit 4620f5d

File tree

8 files changed

+12383
-15954
lines changed

8 files changed

+12383
-15954
lines changed

infra/main.bicep

Lines changed: 105 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ module avmPrivateDnsZones 'br/public:avm/res/network/private-dns-zone:0.7.1' = [
233233
name: zone
234234
tags: tags
235235
enableTelemetry: enableTelemetry
236-
virtualNetworkLinks: [{ virtualNetworkResourceId: network!.outputs.vnetResourceId }]
236+
virtualNetworkLinks: [{ virtualNetworkResourceId: virtualNetwork!.outputs.resourceId }]
237237
}
238238
}
239239
]
@@ -302,21 +302,107 @@ module logAnalyticsWorkspace 'br/public:avm/res/operational-insights/workspace:0
302302
}
303303
var logAnalyticsWorkspaceResourceId = useExistingLogAnalytics ? existingLogAnalyticsWorkspaceId : logAnalyticsWorkspace!.outputs.resourceId
304304

305-
// ========== Network Module ========== //
306-
module network 'modules/network.bicep' = if (enablePrivateNetworking) {
307-
name: take('network-${solutionSuffix}-deployment', 64)
305+
// Virtual Network with NSGs and Subnets
306+
module virtualNetwork 'modules/virtualNetwork.bicep' = if (enablePrivateNetworking) {
307+
name: take('module.virtualNetwork.${solutionSuffix}', 64)
308308
params: {
309-
resourcesName: solutionSuffix
310-
logAnalyticsWorkSpaceResourceId: logAnalyticsWorkspaceResourceId
311-
vmAdminUsername: vmAdminUsername ?? 'JumpboxAdminUser'
312-
vmAdminPassword: vmAdminPassword ?? 'JumpboxAdminP@ssw0rd1234!'
313-
vmSize: vmSize ?? 'Standard_DS2_v2' // Default VM size
309+
name: 'vnet-${solutionSuffix}'
310+
addressPrefixes: ['10.0.0.0/20'] // 4096 addresses (enough for 8 /23 subnets or 16 /24)
314311
location: solutionLocation
315312
tags: tags
313+
logAnalyticsWorkspaceId: logAnalyticsWorkspaceResourceId
314+
resourceSuffix: solutionSuffix
316315
enableTelemetry: enableTelemetry
317316
}
318317
}
318+
// Azure Bastion Host
319+
var bastionHostName = 'bas-${solutionSuffix}'
320+
module bastionHost 'br/public:avm/res/network/bastion-host:0.6.1' = if (enablePrivateNetworking) {
321+
name: take('avm.res.network.bastion-host.${bastionHostName}', 64)
322+
params: {
323+
name: bastionHostName
324+
skuName: 'Standard'
325+
location: solutionLocation
326+
virtualNetworkResourceId: virtualNetwork!.outputs.resourceId
327+
diagnosticSettings: [
328+
{
329+
name: 'bastionDiagnostics'
330+
workspaceResourceId: logAnalyticsWorkspaceResourceId
331+
logCategoriesAndGroups: [
332+
{
333+
categoryGroup: 'allLogs'
334+
enabled: true
335+
}
336+
]
337+
}
338+
]
339+
tags: tags
340+
enableTelemetry: enableTelemetry
341+
publicIPAddressObject: {
342+
name: 'pip-${bastionHostName}'
343+
zones: []
344+
}
345+
}
346+
}
319347

348+
// Jumpbox Virtual Machine
349+
var jumpboxVmName = take('vm-jumpbox-${solutionSuffix}', 15)
350+
module jumpboxVM 'br/public:avm/res/compute/virtual-machine:0.15.0' = if (enablePrivateNetworking) {
351+
name: take('avm.res.compute.virtual-machine.${jumpboxVmName}', 64)
352+
params: {
353+
name: take(jumpboxVmName, 15) // Shorten VM name to 15 characters to avoid Azure limits
354+
vmSize: vmSize ?? 'Standard_DS2_v2'
355+
location: solutionLocation
356+
adminUsername: vmAdminUsername ?? 'JumpboxAdminUser'
357+
adminPassword: vmAdminPassword ?? 'JumpboxAdminP@ssw0rd1234!'
358+
tags: tags
359+
zone: 0
360+
imageReference: {
361+
offer: 'WindowsServer'
362+
publisher: 'MicrosoftWindowsServer'
363+
sku: '2019-datacenter'
364+
version: 'latest'
365+
}
366+
osType: 'Windows'
367+
osDisk: {
368+
name: 'osdisk-${jumpboxVmName}'
369+
managedDisk: {
370+
storageAccountType: 'Standard_LRS'
371+
}
372+
}
373+
encryptionAtHost: false // Some Azure subscriptions do not support encryption at host
374+
nicConfigurations: [
375+
{
376+
name: 'nic-${jumpboxVmName}'
377+
ipConfigurations: [
378+
{
379+
name: 'ipconfig1'
380+
subnetResourceId: virtualNetwork!.outputs.jumpboxSubnetResourceId
381+
}
382+
]
383+
diagnosticSettings: [
384+
{
385+
name: 'jumpboxDiagnostics'
386+
workspaceResourceId: logAnalyticsWorkspaceResourceId
387+
logCategoriesAndGroups: [
388+
{
389+
categoryGroup: 'allLogs'
390+
enabled: true
391+
}
392+
]
393+
metricCategories: [
394+
{
395+
category: 'AllMetrics'
396+
enabled: true
397+
}
398+
]
399+
}
400+
]
401+
}
402+
]
403+
enableTelemetry: enableTelemetry
404+
}
405+
}
320406
// ========== User Assigned Identity ========== //
321407
// WAF best practices for identity and access management: https://learn.microsoft.com/en-us/azure/well-architected/security/identity-access
322408
var userAssignedIdentityResourceName = 'id-${solutionSuffix}'
@@ -390,7 +476,7 @@ module avmCosmosDB 'br/public:avm/res/document-db/database-account:0.15.0' = {
390476
]
391477
}
392478
service: 'MongoDB'
393-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId // Use the backend subnet
479+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId // Use the private endpoints subnet
394480
}
395481
]
396482
: []
@@ -572,7 +658,7 @@ module avmAppConfigUpdated 'br/public:avm/res/app-configuration/configuration-st
572658
}
573659
]
574660
}
575-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
661+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
576662
}
577663
]
578664
: []
@@ -624,7 +710,7 @@ module avmStorageAccount 'br/public:avm/res/storage/storage-account:0.20.0' = {
624710
}
625711
]
626712
}
627-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
713+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
628714
service: 'blob'
629715
}
630716
{
@@ -637,7 +723,7 @@ module avmStorageAccount 'br/public:avm/res/storage/storage-account:0.20.0' = {
637723
}
638724
]
639725
}
640-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
726+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
641727
service: 'queue'
642728
}
643729
]
@@ -699,7 +785,7 @@ module avmSearchSearchServices 'br/public:avm/res/search/search-service:0.11.1'
699785
{ privateDnsZoneResourceId: avmPrivateDnsZones[dnsZoneIndex.search]!.outputs.resourceId }
700786
]
701787
}
702-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
788+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
703789
}
704790
]
705791
: []
@@ -733,7 +819,7 @@ module avmOpenAi 'br/public:avm/res/cognitive-services/account:0.13.2' = {
733819
? [
734820
{
735821
name: 'pep-openai-${solutionSuffix}'
736-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
822+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
737823
service: 'account'
738824
privateDnsZoneGroup: {
739825
privateDnsZoneGroupConfigs: [
@@ -793,7 +879,7 @@ module documentIntelligence 'br/public:avm/res/cognitive-services/account:0.13.2
793879
? [
794880
{
795881
name: 'pep-docintel-${solutionSuffix}'
796-
subnetResourceId: network!.outputs.subnetPrivateEndpointsResourceId
882+
subnetResourceId: virtualNetwork!.outputs.pepsSubnetResourceId
797883
service: 'account'
798884
privateDnsZoneGroup: {
799885
privateDnsZoneGroupConfigs: [
@@ -852,7 +938,8 @@ module managedCluster 'br/public:avm/res/container-service/managed-cluster:0.10.
852938
enableAutoScaling: true
853939
scaleSetEvictionPolicy: 'Delete'
854940
scaleSetPriority: 'Regular'
855-
vnetSubnetResourceId: enablePrivateNetworking ? network!.outputs.subnetWebResourceId : null
941+
// Use the dedicated AKS subnet to avoid subnet delegation conflicts
942+
vnetSubnetResourceId: enablePrivateNetworking ? virtualNetwork!.outputs.webSubnetResourceId : null
856943
}
857944
]
858945
autoNodeOsUpgradeProfileUpgradeChannel: 'Unmanaged'
@@ -961,7 +1048,7 @@ output AZURE_SEARCH_SERVICE_NAME string = avmSearchSearchServices.outputs.name
9611048
output AZURE_AKS_NAME string = managedCluster.outputs.name
9621049

9631050
@description('Contains Azure AKS Managed Identity ID.')
964-
output AZURE_AKS_MI_ID string = managedCluster.outputs.systemAssignedMIPrincipalId
1051+
output AZURE_AKS_MI_ID string = managedCluster.outputs.systemAssignedMIPrincipalId ?? ''
9651052

9661053
@description('Contains Azure Container Registry Name.')
9671054
output AZURE_CONTAINER_REGISTRY_NAME string = avmContainerRegistry.outputs.name

0 commit comments

Comments
 (0)