diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a9f2595f..6b00fcd1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -296,4 +296,4 @@ jobs: curl -X POST "${{ secrets.LOGIC_APP_URL }}" \ -H "Content-Type: application/json" \ - -d "$EMAIL_BODY" || echo "Failed to send notification" \ No newline at end of file + -d "$EMAIL_BODY" || echo "Failed to send notification" diff --git a/infra/abbreviations.json b/infra/abbreviations.json new file mode 100644 index 00000000..d28fd825 --- /dev/null +++ b/infra/abbreviations.json @@ -0,0 +1,227 @@ +{ + "ai": { + "aiSearch": "srch-", + "aiServices": "aisa-", + "aiVideoIndexer": "avi-", + "machineLearningWorkspace": "mlw-", + "openAIService": "oai-", + "botService": "bot-", + "computerVision": "cv-", + "contentModerator": "cm-", + "contentSafety": "cs-", + "customVisionPrediction": "cstv-", + "customVisionTraining": "cstvt-", + "documentIntelligence": "di-", + "faceApi": "face-", + "healthInsights": "hi-", + "immersiveReader": "ir-", + "languageService": "lang-", + "speechService": "spch-", + "translator": "trsl-", + "aiHub": "aih-", + "aiHubProject": "aihp-" + }, + "analytics": { + "analysisServicesServer": "as", + "databricksWorkspace": "dbw-", + "dataExplorerCluster": "dec", + "dataExplorerClusterDatabase": "dedb", + "dataFactory": "adf-", + "digitalTwin": "dt-", + "streamAnalytics": "asa-", + "synapseAnalyticsPrivateLinkHub": "synplh-", + "synapseAnalyticsSQLDedicatedPool": "syndp", + "synapseAnalyticsSparkPool": "synsp", + "synapseAnalyticsWorkspaces": "synw", + "dataLakeStoreAccount": "dls", + "dataLakeAnalyticsAccount": "dla", + "eventHubsNamespace": "evhns-", + "eventHub": "evh-", + "eventGridDomain": "evgd-", + "eventGridSubscriptions": "evgs-", + "eventGridTopic": "evgt-", + "eventGridSystemTopic": "egst-", + "hdInsightHadoopCluster": "hadoop-", + "hdInsightHBaseCluster": "hbase-", + "hdInsightKafkaCluster": "kafka-", + "hdInsightSparkCluster": "spark-", + "hdInsightStormCluster": "storm-", + "hdInsightMLServicesCluster": "mls-", + "iotHub": "iot-", + "provisioningServices": "provs-", + "provisioningServicesCertificate": "pcert-", + "powerBIEmbedded": "pbi-", + "timeSeriesInsightsEnvironment": "tsi-" + }, + "compute": { + "appServiceEnvironment": "ase-", + "appServicePlan": "asp-", + "loadTesting": "lt-", + "availabilitySet": "avail-", + "arcEnabledServer": "arcs-", + "arcEnabledKubernetesCluster": "arck", + "batchAccounts": "ba-", + "cloudService": "cld-", + "communicationServices": "acs-", + "diskEncryptionSet": "des", + "functionApp": "func-", + "gallery": "gal", + "hostingEnvironment": "host-", + "imageTemplate": "it-", + "managedDiskOS": "osdisk", + "managedDiskData": "disk", + "notificationHubs": "ntf-", + "notificationHubsNamespace": "ntfns-", + "proximityPlacementGroup": "ppg-", + "restorePointCollection": "rpc-", + "snapshot": "snap-", + "staticWebApp": "stapp-", + "virtualMachine": "vm", + "virtualMachineScaleSet": "vmss-", + "virtualMachineMaintenanceConfiguration": "mc-", + "virtualMachineStorageAccount": "stvm", + "webApp": "app-" + }, + "containers": { + "aksCluster": "aks-", + "aksSystemNodePool": "npsystem-", + "aksUserNodePool": "np-", + "containerApp": "ca-", + "containerAppsEnvironment": "cae-", + "containerRegistry": "cr", + "containerInstance": "ci", + "serviceFabricCluster": "sf-", + "serviceFabricManagedCluster": "sfmc-" + }, + "databases": { + "cosmosDBDatabase": "cosmos-", + "cosmosDBApacheCassandra": "coscas-", + "cosmosDBMongoDB": "cosmon-", + "cosmosDBNoSQL": "cosno-", + "cosmosDBTable": "costab-", + "cosmosDBGremlin": "cosgrm-", + "cosmosDBPostgreSQL": "cospos-", + "cacheForRedis": "redis-", + "sqlDatabaseServer": "sql-", + "sqlDatabase": "sqldb-", + "sqlElasticJobAgent": "sqlja-", + "sqlElasticPool": "sqlep-", + "mariaDBServer": "maria-", + "mariaDBDatabase": "mariadb-", + "mySQLDatabase": "mysql-", + "postgreSQLDatabase": "psql-", + "sqlServerStretchDatabase": "sqlstrdb-", + "sqlManagedInstance": "sqlmi-" + }, + "developerTools": { + "appConfigurationStore": "appcs-", + "mapsAccount": "map-", + "signalR": "sigr", + "webPubSub": "wps-" + }, + "devOps": { + "managedGrafana": "amg-" + }, + "integration": { + "apiManagementService": "apim-", + "integrationAccount": "ia-", + "logicApp": "logic-", + "serviceBusNamespace": "sbns-", + "serviceBusQueue": "sbq-", + "serviceBusTopic": "sbt-", + "serviceBusTopicSubscription": "sbts-" + }, + "managementGovernance": { + "automationAccount": "aa-", + "applicationInsights": "appi-", + "monitorActionGroup": "ag-", + "monitorDataCollectionRules": "dcr-", + "monitorAlertProcessingRule": "apr-", + "blueprint": "bp-", + "blueprintAssignment": "bpa-", + "dataCollectionEndpoint": "dce-", + "logAnalyticsWorkspace": "log-", + "logAnalyticsQueryPacks": "pack-", + "managementGroup": "mg-", + "purviewInstance": "pview-", + "resourceGroup": "rg-", + "templateSpecsName": "ts-" + }, + "migration": { + "migrateProject": "migr-", + "databaseMigrationService": "dms-", + "recoveryServicesVault": "rsv-" + }, + "networking": { + "applicationGateway": "agw-", + "applicationSecurityGroup": "asg-", + "cdnProfile": "cdnp-", + "cdnEndpoint": "cdne-", + "connections": "con-", + "dnsForwardingRuleset": "dnsfrs-", + "dnsPrivateResolver": "dnspr-", + "dnsPrivateResolverInboundEndpoint": "in-", + "dnsPrivateResolverOutboundEndpoint": "out-", + "firewall": "afw-", + "firewallPolicy": "afwp-", + "expressRouteCircuit": "erc-", + "expressRouteGateway": "ergw-", + "frontDoorProfile": "afd-", + "frontDoorEndpoint": "fde-", + "frontDoorFirewallPolicy": "fdfp-", + "ipGroups": "ipg-", + "loadBalancerInternal": "lbi-", + "loadBalancerExternal": "lbe-", + "loadBalancerRule": "rule-", + "localNetworkGateway": "lgw-", + "natGateway": "ng-", + "networkInterface": "nic-", + "networkSecurityGroup": "nsg-", + "networkSecurityGroupSecurityRules": "nsgsr-", + "networkWatcher": "nw-", + "privateLink": "pl-", + "privateEndpoint": "pep-", + "publicIPAddress": "pip-", + "publicIPAddressPrefix": "ippre-", + "routeFilter": "rf-", + "routeServer": "rtserv-", + "routeTable": "rt-", + "serviceEndpointPolicy": "se-", + "trafficManagerProfile": "traf-", + "userDefinedRoute": "udr-", + "virtualNetwork": "vnet-", + "virtualNetworkGateway": "vgw-", + "virtualNetworkManager": "vnm-", + "virtualNetworkPeering": "peer-", + "virtualNetworkSubnet": "snet-", + "virtualWAN": "vwan-", + "virtualWANHub": "vhub-" + }, + "security": { + "bastion": "bas-", + "keyVault": "kv-", + "keyVaultManagedHSM": "kvmhsm-", + "managedIdentity": "id-", + "sshKey": "sshkey-", + "vpnGateway": "vpng-", + "vpnConnection": "vcn-", + "vpnSite": "vst-", + "webApplicationFirewallPolicy": "waf", + "webApplicationFirewallPolicyRuleGroup": "wafrg" + }, + "storage": { + "storSimple": "ssimp", + "backupVault": "bvault-", + "backupVaultPolicy": "bkpol-", + "fileShare": "share-", + "storageAccount": "st", + "storageSyncService": "sss-" + }, + "virtualDesktop": { + "labServicesPlan": "lp-", + "virtualDesktopHostPool": "vdpool-", + "virtualDesktopApplicationGroup": "vdag-", + "virtualDesktopWorkspace": "vdws-", + "virtualDesktopScalingPlan": "vdscaling-" + } +} \ No newline at end of file diff --git a/infra/deploy_ai_foundry.bicep b/infra/deploy_ai_foundry.bicep index 81ca9ca0..b0376db1 100644 --- a/infra/deploy_ai_foundry.bicep +++ b/infra/deploy_ai_foundry.bicep @@ -9,23 +9,24 @@ param gptDeploymentCapacity int param embeddingModel string param embeddingDeploymentCapacity int param managedIdentityObjectId string +var abbrs = loadJsonContent('./abbreviations.json') -var storageName = 'st${solutionName}hub' +var storageName = '${abbrs.storage.storageAccount}${solutionName}-hub' var storageSkuName = 'Standard_LRS' -var aiServicesName = 'ais-${solutionName}' +var aiServicesName = '${abbrs.ai.aiServices}${solutionName}' // var aiServicesName_m = '${solutionName}-aiservices_m' // var location_m = solutionLocation -var applicationInsightsName = 'appi-${solutionName}' -var containerRegistryName = 'cr-${solutionName}' -var keyvaultName = 'kv-${solutionName}' +var applicationInsightsName = '${abbrs.managementGovernance.applicationInsights}${solutionName}' +var containerRegistryName = '${abbrs.containers.containerRegistry}${solutionName}' +var keyvaultName = '${abbrs.security.keyVault}${solutionName}' var location = solutionLocation //'eastus2' -var aiHubName = 'hub-${solutionName}' +var aiHubName = '${abbrs.ai.aiHub}${solutionName}-hub' var aiHubFriendlyName = aiHubName var aiHubDescription = 'AI Hub' -var aiProjectName = 'proj-${solutionName}' +var aiProjectName = '${abbrs.ai.aiHubProject}${solutionName}' var aiProjectFriendlyName = aiProjectName -var aiSearchName = 'srch-${solutionName}' -var workspaceName = 'log-${solutionName}-hub' +var aiSearchName = '${abbrs.ai.aiSearch}${solutionName}' +var workspaceName = '${abbrs.managementGovernance.logAnalyticsWorkspace}${solutionName}' var aiModelDeployments = [ { name: gptModelName @@ -142,7 +143,7 @@ resource aiServices 'Microsoft.CognitiveServices/accounts@2021-10-01' = { properties: { customSubDomainName: aiServicesName apiProperties: { - statisticsEnabled: false + //statisticsEnabled: false } } } diff --git a/infra/deploy_app_service.bicep b/infra/deploy_app_service.bicep index b92377b1..a04bbd77 100644 --- a/infra/deploy_app_service.bicep +++ b/infra/deploy_app_service.bicep @@ -11,8 +11,9 @@ param solutionName string // param identity string + @description('Name of App Service plan') -param HostingPlanName string = 'asp-${ solutionName }' +param HostingPlanName string @description('The pricing tier for the App Service plan') @allowed( @@ -23,7 +24,7 @@ param HostingPlanName string = 'asp-${ solutionName }' param HostingPlanSku string = 'B1' @description('Name of Web App') -param WebsiteName string = 'app-${ solutionName }' +param WebsiteName string // @description('Name of Application Insights') // param ApplicationInsightsName string = '${ solutionName }-app-insights' diff --git a/infra/deploy_cosmos_db.bicep b/infra/deploy_cosmos_db.bicep index 1d87fcb6..9acbb2cf 100644 --- a/infra/deploy_cosmos_db.bicep +++ b/infra/deploy_cosmos_db.bicep @@ -5,7 +5,8 @@ param solutionName string param solutionLocation string param keyVaultName string -var accountName = 'cosmos-${ solutionName }' +param accountName string + var databaseName = 'db_conversation_history' var collectionName = 'conversations' diff --git a/infra/deploy_keyvault.bicep b/infra/deploy_keyvault.bicep index 88a59e4a..27c0f8f9 100644 --- a/infra/deploy_keyvault.bicep +++ b/infra/deploy_keyvault.bicep @@ -5,7 +5,8 @@ param solutionName string param solutionLocation string param managedIdentityObjectId string -var keyvaultName = 'kv-${solutionName}' + +param keyvaultName string resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' = { name: keyvaultName diff --git a/infra/deploy_managed_identity.bicep b/infra/deploy_managed_identity.bicep index 3452330b..39653dc2 100644 --- a/infra/deploy_managed_identity.bicep +++ b/infra/deploy_managed_identity.bicep @@ -1,6 +1,7 @@ // ========== Managed Identity ========== // targetScope = 'resourceGroup' + @minLength(3) @maxLength(15) @description('Solution Name') @@ -10,7 +11,7 @@ param solutionName string param solutionLocation string @description('Name') -param miName string = 'id-${ solutionName }' +param miName string resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { name: miName diff --git a/infra/deploy_storage_account.bicep b/infra/deploy_storage_account.bicep index 2db349c2..cd170aa6 100644 --- a/infra/deploy_storage_account.bicep +++ b/infra/deploy_storage_account.bicep @@ -10,7 +10,7 @@ param solutionName string param solutionLocation string @description('Name') -param saName string = 'st${ solutionName }' +param saName string param keyVaultName string param managedIdentityObjectId string diff --git a/infra/main.bicep b/infra/main.bicep index 2870d37c..119e4b09 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -48,7 +48,7 @@ param gptDeploymentCapacity int = 30 ]) param embeddingModel string = 'text-embedding-ada-002' - +var abbrs = loadJsonContent('./abbreviations.json') @minValue(10) @description('Capacity of the Embedding Model deployment') param embeddingDeploymentCapacity int = 80 @@ -62,8 +62,8 @@ var resourceGroupLocation = resourceGroup().location var solutionLocation = resourceGroupLocation var baseUrl = 'https://raw.githubusercontent.com/microsoft/document-generation-solution-accelerator/main/' -var ApplicationInsightsName = 'appi-${solutionPrefix}' -var WorkspaceName = 'log-${solutionPrefix}' +var ApplicationInsightsName ='${abbrs.managementGovernance.applicationInsights}${solutionPrefix}' +var WorkspaceName = '${abbrs.managementGovernance.logAnalyticsWorkspace}${solutionPrefix}' // ========== Managed Identity ========== // module managedIdentityModule 'deploy_managed_identity.bicep' = { @@ -71,6 +71,7 @@ module managedIdentityModule 'deploy_managed_identity.bicep' = { params: { solutionName: solutionPrefix solutionLocation: solutionLocation + miName: '${abbrs.security.managedIdentity}${solutionPrefix}' } scope: resourceGroup(resourceGroup().name) } @@ -82,6 +83,7 @@ module kvault 'deploy_keyvault.bicep' = { solutionName: solutionPrefix solutionLocation: resourceGroupLocation managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.objectId + keyvaultName:'${abbrs.security.keyVault}${solutionPrefix}' } scope: resourceGroup(resourceGroup().name) } @@ -112,6 +114,7 @@ module storageAccount 'deploy_storage_account.bicep' = { solutionLocation: solutionLocation keyVaultName: kvault.outputs.keyvaultName managedIdentityObjectId:managedIdentityModule.outputs.managedIdentityOutput.objectId + saName:'${abbrs.storage.storageAccount}${ solutionPrefix}' } scope: resourceGroup(resourceGroup().name) } @@ -383,6 +386,8 @@ module appserviceModule 'deploy_app_service.bicep' = { AZURE_COSMOSDB_CONVERSATIONS_CONTAINER: cosmosDBModule.outputs.cosmosContainerName AZURE_COSMOSDB_DATABASE: cosmosDBModule.outputs.cosmosDatabaseName AZURE_COSMOSDB_ENABLE_FEEDBACK:'True' + HostingPlanName:'${abbrs.compute.appServicePlan}${solutionPrefix}' + WebsiteName:'${abbrs.compute.webApp}${solutionPrefix}' } scope: resourceGroup(resourceGroup().name) // dependsOn:[sqlDBModule] @@ -421,6 +426,7 @@ module cosmosDBModule 'deploy_cosmos_db.bicep' = { solutionName: solutionPrefix solutionLocation: secondaryLocation keyVaultName: kvault.outputs.keyvaultName + accountName: '${abbrs.databases.cosmosDBDatabase}${solutionPrefix}' } scope: resourceGroup(resourceGroup().name) } diff --git a/infra/main.json b/infra/main.json index b62652d7..b0ec42cf 100644 --- a/infra/main.json +++ b/infra/main.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "5606404629771897766" + "templateHash": "9193996033474742848" } }, "parameters": { @@ -88,13 +88,241 @@ } }, "variables": { + "$fxv#0": { + "ai": { + "aiSearch": "srch-", + "aiServices": "aisa-", + "aiVideoIndexer": "avi-", + "machineLearningWorkspace": "mlw-", + "openAIService": "oai-", + "botService": "bot-", + "computerVision": "cv-", + "contentModerator": "cm-", + "contentSafety": "cs-", + "customVisionPrediction": "cstv-", + "customVisionTraining": "cstvt-", + "documentIntelligence": "di-", + "faceApi": "face-", + "healthInsights": "hi-", + "immersiveReader": "ir-", + "languageService": "lang-", + "speechService": "spch-", + "translator": "trsl-", + "aiHub": "aih-", + "aiHubProject": "aihp-" + }, + "analytics": { + "analysisServicesServer": "as", + "databricksWorkspace": "dbw-", + "dataExplorerCluster": "dec", + "dataExplorerClusterDatabase": "dedb", + "dataFactory": "adf-", + "digitalTwin": "dt-", + "streamAnalytics": "asa-", + "synapseAnalyticsPrivateLinkHub": "synplh-", + "synapseAnalyticsSQLDedicatedPool": "syndp", + "synapseAnalyticsSparkPool": "synsp", + "synapseAnalyticsWorkspaces": "synw", + "dataLakeStoreAccount": "dls", + "dataLakeAnalyticsAccount": "dla", + "eventHubsNamespace": "evhns-", + "eventHub": "evh-", + "eventGridDomain": "evgd-", + "eventGridSubscriptions": "evgs-", + "eventGridTopic": "evgt-", + "eventGridSystemTopic": "egst-", + "hdInsightHadoopCluster": "hadoop-", + "hdInsightHBaseCluster": "hbase-", + "hdInsightKafkaCluster": "kafka-", + "hdInsightSparkCluster": "spark-", + "hdInsightStormCluster": "storm-", + "hdInsightMLServicesCluster": "mls-", + "iotHub": "iot-", + "provisioningServices": "provs-", + "provisioningServicesCertificate": "pcert-", + "powerBIEmbedded": "pbi-", + "timeSeriesInsightsEnvironment": "tsi-" + }, + "compute": { + "appServiceEnvironment": "ase-", + "appServicePlan": "asp-", + "loadTesting": "lt-", + "availabilitySet": "avail-", + "arcEnabledServer": "arcs-", + "arcEnabledKubernetesCluster": "arck", + "batchAccounts": "ba-", + "cloudService": "cld-", + "communicationServices": "acs-", + "diskEncryptionSet": "des", + "functionApp": "func-", + "gallery": "gal", + "hostingEnvironment": "host-", + "imageTemplate": "it-", + "managedDiskOS": "osdisk", + "managedDiskData": "disk", + "notificationHubs": "ntf-", + "notificationHubsNamespace": "ntfns-", + "proximityPlacementGroup": "ppg-", + "restorePointCollection": "rpc-", + "snapshot": "snap-", + "staticWebApp": "stapp-", + "virtualMachine": "vm", + "virtualMachineScaleSet": "vmss-", + "virtualMachineMaintenanceConfiguration": "mc-", + "virtualMachineStorageAccount": "stvm", + "webApp": "app-" + }, + "containers": { + "aksCluster": "aks-", + "aksSystemNodePool": "npsystem-", + "aksUserNodePool": "np-", + "containerApp": "ca-", + "containerAppsEnvironment": "cae-", + "containerRegistry": "cr", + "containerInstance": "ci", + "serviceFabricCluster": "sf-", + "serviceFabricManagedCluster": "sfmc-" + }, + "databases": { + "cosmosDBDatabase": "cosmos-", + "cosmosDBApacheCassandra": "coscas-", + "cosmosDBMongoDB": "cosmon-", + "cosmosDBNoSQL": "cosno-", + "cosmosDBTable": "costab-", + "cosmosDBGremlin": "cosgrm-", + "cosmosDBPostgreSQL": "cospos-", + "cacheForRedis": "redis-", + "sqlDatabaseServer": "sql-", + "sqlDatabase": "sqldb-", + "sqlElasticJobAgent": "sqlja-", + "sqlElasticPool": "sqlep-", + "mariaDBServer": "maria-", + "mariaDBDatabase": "mariadb-", + "mySQLDatabase": "mysql-", + "postgreSQLDatabase": "psql-", + "sqlServerStretchDatabase": "sqlstrdb-", + "sqlManagedInstance": "sqlmi-" + }, + "developerTools": { + "appConfigurationStore": "appcs-", + "mapsAccount": "map-", + "signalR": "sigr", + "webPubSub": "wps-" + }, + "devOps": { + "managedGrafana": "amg-" + }, + "integration": { + "apiManagementService": "apim-", + "integrationAccount": "ia-", + "logicApp": "logic-", + "serviceBusNamespace": "sbns-", + "serviceBusQueue": "sbq-", + "serviceBusTopic": "sbt-", + "serviceBusTopicSubscription": "sbts-" + }, + "managementGovernance": { + "automationAccount": "aa-", + "applicationInsights": "appi-", + "monitorActionGroup": "ag-", + "monitorDataCollectionRules": "dcr-", + "monitorAlertProcessingRule": "apr-", + "blueprint": "bp-", + "blueprintAssignment": "bpa-", + "dataCollectionEndpoint": "dce-", + "logAnalyticsWorkspace": "log-", + "logAnalyticsQueryPacks": "pack-", + "managementGroup": "mg-", + "purviewInstance": "pview-", + "resourceGroup": "rg-", + "templateSpecsName": "ts-" + }, + "migration": { + "migrateProject": "migr-", + "databaseMigrationService": "dms-", + "recoveryServicesVault": "rsv-" + }, + "networking": { + "applicationGateway": "agw-", + "applicationSecurityGroup": "asg-", + "cdnProfile": "cdnp-", + "cdnEndpoint": "cdne-", + "connections": "con-", + "dnsForwardingRuleset": "dnsfrs-", + "dnsPrivateResolver": "dnspr-", + "dnsPrivateResolverInboundEndpoint": "in-", + "dnsPrivateResolverOutboundEndpoint": "out-", + "firewall": "afw-", + "firewallPolicy": "afwp-", + "expressRouteCircuit": "erc-", + "expressRouteGateway": "ergw-", + "frontDoorProfile": "afd-", + "frontDoorEndpoint": "fde-", + "frontDoorFirewallPolicy": "fdfp-", + "ipGroups": "ipg-", + "loadBalancerInternal": "lbi-", + "loadBalancerExternal": "lbe-", + "loadBalancerRule": "rule-", + "localNetworkGateway": "lgw-", + "natGateway": "ng-", + "networkInterface": "nic-", + "networkSecurityGroup": "nsg-", + "networkSecurityGroupSecurityRules": "nsgsr-", + "networkWatcher": "nw-", + "privateLink": "pl-", + "privateEndpoint": "pep-", + "publicIPAddress": "pip-", + "publicIPAddressPrefix": "ippre-", + "routeFilter": "rf-", + "routeServer": "rtserv-", + "routeTable": "rt-", + "serviceEndpointPolicy": "se-", + "trafficManagerProfile": "traf-", + "userDefinedRoute": "udr-", + "virtualNetwork": "vnet-", + "virtualNetworkGateway": "vgw-", + "virtualNetworkManager": "vnm-", + "virtualNetworkPeering": "peer-", + "virtualNetworkSubnet": "snet-", + "virtualWAN": "vwan-", + "virtualWANHub": "vhub-" + }, + "security": { + "bastion": "bas-", + "keyVault": "kv-", + "keyVaultManagedHSM": "kvmhsm-", + "managedIdentity": "id-", + "sshKey": "sshkey-", + "vpnGateway": "vpng-", + "vpnConnection": "vcn-", + "vpnSite": "vst-", + "webApplicationFirewallPolicy": "waf", + "webApplicationFirewallPolicyRuleGroup": "wafrg" + }, + "storage": { + "storSimple": "ssimp", + "backupVault": "bvault-", + "backupVaultPolicy": "bkpol-", + "fileShare": "share-", + "storageAccount": "st", + "storageSyncService": "sss-" + }, + "virtualDesktop": { + "labServicesPlan": "lp-", + "virtualDesktopHostPool": "vdpool-", + "virtualDesktopApplicationGroup": "vdag-", + "virtualDesktopWorkspace": "vdws-", + "virtualDesktopScalingPlan": "vdscaling-" + } + }, + "abbrs": "[variables('$fxv#0')]", "uniqueId": "[toLower(uniqueString(parameters('environmentName'), subscription().id, resourceGroup().location))]", "solutionPrefix": "[format('dg{0}', padLeft(take(variables('uniqueId'), 12), 12, '0'))]", "resourceGroupLocation": "[resourceGroup().location]", "solutionLocation": "[variables('resourceGroupLocation')]", "baseUrl": "https://raw.githubusercontent.com/microsoft/document-generation-solution-accelerator/main/", - "ApplicationInsightsName": "[format('appi-{0}', variables('solutionPrefix'))]", - "WorkspaceName": "[format('log-{0}', variables('solutionPrefix'))]" + "ApplicationInsightsName": "[format('{0}{1}', variables('abbrs').managementGovernance.applicationInsights, variables('solutionPrefix'))]", + "WorkspaceName": "[format('{0}{1}', variables('abbrs').managementGovernance.logAnalyticsWorkspace, variables('solutionPrefix'))]" }, "resources": [ { @@ -142,6 +370,9 @@ }, "solutionLocation": { "value": "[variables('solutionLocation')]" + }, + "miName": { + "value": "[format('{0}{1}', variables('abbrs').security.managedIdentity, variables('solutionPrefix'))]" } }, "template": { @@ -151,7 +382,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "5719315788994459005" + "templateHash": "611206203144819710" } }, "parameters": { @@ -171,7 +402,6 @@ }, "miName": { "type": "string", - "defaultValue": "[format('id-{0}', parameters('solutionName'))]", "metadata": { "description": "Name" } @@ -235,6 +465,9 @@ }, "managedIdentityObjectId": { "value": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_managed_identity'), '2022-09-01').outputs.managedIdentityOutput.value.objectId]" + }, + "keyvaultName": { + "value": "[format('{0}{1}', variables('abbrs').security.keyVault, variables('solutionPrefix'))]" } }, "template": { @@ -244,7 +477,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "1844247210915234323" + "templateHash": "3632224099881800620" } }, "parameters": { @@ -261,16 +494,16 @@ }, "managedIdentityObjectId": { "type": "string" + }, + "keyvaultName": { + "type": "string" } }, - "variables": { - "keyvaultName": "[format('kv-{0}', parameters('solutionName'))]" - }, "resources": [ { "type": "Microsoft.KeyVault/vaults", "apiVersion": "2022-07-01", - "name": "[variables('keyvaultName')]", + "name": "[parameters('keyvaultName')]", "location": "[parameters('solutionLocation')]", "properties": { "createMode": "default", @@ -321,11 +554,11 @@ "outputs": { "keyvaultName": { "type": "string", - "value": "[variables('keyvaultName')]" + "value": "[parameters('keyvaultName')]" }, "keyvaultId": { "type": "string", - "value": "[resourceId('Microsoft.KeyVault/vaults', variables('keyvaultName'))]" + "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyvaultName'))]" } } } @@ -383,7 +616,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "13608586170973078247" + "templateHash": "5677298996620527677" } }, "parameters": { @@ -419,20 +652,248 @@ } }, "variables": { - "storageName": "[format('st{0}hub', parameters('solutionName'))]", + "$fxv#0": { + "ai": { + "aiSearch": "srch-", + "aiServices": "aisa-", + "aiVideoIndexer": "avi-", + "machineLearningWorkspace": "mlw-", + "openAIService": "oai-", + "botService": "bot-", + "computerVision": "cv-", + "contentModerator": "cm-", + "contentSafety": "cs-", + "customVisionPrediction": "cstv-", + "customVisionTraining": "cstvt-", + "documentIntelligence": "di-", + "faceApi": "face-", + "healthInsights": "hi-", + "immersiveReader": "ir-", + "languageService": "lang-", + "speechService": "spch-", + "translator": "trsl-", + "aiHub": "aih-", + "aiHubProject": "aihp-" + }, + "analytics": { + "analysisServicesServer": "as", + "databricksWorkspace": "dbw-", + "dataExplorerCluster": "dec", + "dataExplorerClusterDatabase": "dedb", + "dataFactory": "adf-", + "digitalTwin": "dt-", + "streamAnalytics": "asa-", + "synapseAnalyticsPrivateLinkHub": "synplh-", + "synapseAnalyticsSQLDedicatedPool": "syndp", + "synapseAnalyticsSparkPool": "synsp", + "synapseAnalyticsWorkspaces": "synw", + "dataLakeStoreAccount": "dls", + "dataLakeAnalyticsAccount": "dla", + "eventHubsNamespace": "evhns-", + "eventHub": "evh-", + "eventGridDomain": "evgd-", + "eventGridSubscriptions": "evgs-", + "eventGridTopic": "evgt-", + "eventGridSystemTopic": "egst-", + "hdInsightHadoopCluster": "hadoop-", + "hdInsightHBaseCluster": "hbase-", + "hdInsightKafkaCluster": "kafka-", + "hdInsightSparkCluster": "spark-", + "hdInsightStormCluster": "storm-", + "hdInsightMLServicesCluster": "mls-", + "iotHub": "iot-", + "provisioningServices": "provs-", + "provisioningServicesCertificate": "pcert-", + "powerBIEmbedded": "pbi-", + "timeSeriesInsightsEnvironment": "tsi-" + }, + "compute": { + "appServiceEnvironment": "ase-", + "appServicePlan": "asp-", + "loadTesting": "lt-", + "availabilitySet": "avail-", + "arcEnabledServer": "arcs-", + "arcEnabledKubernetesCluster": "arck", + "batchAccounts": "ba-", + "cloudService": "cld-", + "communicationServices": "acs-", + "diskEncryptionSet": "des", + "functionApp": "func-", + "gallery": "gal", + "hostingEnvironment": "host-", + "imageTemplate": "it-", + "managedDiskOS": "osdisk", + "managedDiskData": "disk", + "notificationHubs": "ntf-", + "notificationHubsNamespace": "ntfns-", + "proximityPlacementGroup": "ppg-", + "restorePointCollection": "rpc-", + "snapshot": "snap-", + "staticWebApp": "stapp-", + "virtualMachine": "vm", + "virtualMachineScaleSet": "vmss-", + "virtualMachineMaintenanceConfiguration": "mc-", + "virtualMachineStorageAccount": "stvm", + "webApp": "app-" + }, + "containers": { + "aksCluster": "aks-", + "aksSystemNodePool": "npsystem-", + "aksUserNodePool": "np-", + "containerApp": "ca-", + "containerAppsEnvironment": "cae-", + "containerRegistry": "cr", + "containerInstance": "ci", + "serviceFabricCluster": "sf-", + "serviceFabricManagedCluster": "sfmc-" + }, + "databases": { + "cosmosDBDatabase": "cosmos-", + "cosmosDBApacheCassandra": "coscas-", + "cosmosDBMongoDB": "cosmon-", + "cosmosDBNoSQL": "cosno-", + "cosmosDBTable": "costab-", + "cosmosDBGremlin": "cosgrm-", + "cosmosDBPostgreSQL": "cospos-", + "cacheForRedis": "redis-", + "sqlDatabaseServer": "sql-", + "sqlDatabase": "sqldb-", + "sqlElasticJobAgent": "sqlja-", + "sqlElasticPool": "sqlep-", + "mariaDBServer": "maria-", + "mariaDBDatabase": "mariadb-", + "mySQLDatabase": "mysql-", + "postgreSQLDatabase": "psql-", + "sqlServerStretchDatabase": "sqlstrdb-", + "sqlManagedInstance": "sqlmi-" + }, + "developerTools": { + "appConfigurationStore": "appcs-", + "mapsAccount": "map-", + "signalR": "sigr", + "webPubSub": "wps-" + }, + "devOps": { + "managedGrafana": "amg-" + }, + "integration": { + "apiManagementService": "apim-", + "integrationAccount": "ia-", + "logicApp": "logic-", + "serviceBusNamespace": "sbns-", + "serviceBusQueue": "sbq-", + "serviceBusTopic": "sbt-", + "serviceBusTopicSubscription": "sbts-" + }, + "managementGovernance": { + "automationAccount": "aa-", + "applicationInsights": "appi-", + "monitorActionGroup": "ag-", + "monitorDataCollectionRules": "dcr-", + "monitorAlertProcessingRule": "apr-", + "blueprint": "bp-", + "blueprintAssignment": "bpa-", + "dataCollectionEndpoint": "dce-", + "logAnalyticsWorkspace": "log-", + "logAnalyticsQueryPacks": "pack-", + "managementGroup": "mg-", + "purviewInstance": "pview-", + "resourceGroup": "rg-", + "templateSpecsName": "ts-" + }, + "migration": { + "migrateProject": "migr-", + "databaseMigrationService": "dms-", + "recoveryServicesVault": "rsv-" + }, + "networking": { + "applicationGateway": "agw-", + "applicationSecurityGroup": "asg-", + "cdnProfile": "cdnp-", + "cdnEndpoint": "cdne-", + "connections": "con-", + "dnsForwardingRuleset": "dnsfrs-", + "dnsPrivateResolver": "dnspr-", + "dnsPrivateResolverInboundEndpoint": "in-", + "dnsPrivateResolverOutboundEndpoint": "out-", + "firewall": "afw-", + "firewallPolicy": "afwp-", + "expressRouteCircuit": "erc-", + "expressRouteGateway": "ergw-", + "frontDoorProfile": "afd-", + "frontDoorEndpoint": "fde-", + "frontDoorFirewallPolicy": "fdfp-", + "ipGroups": "ipg-", + "loadBalancerInternal": "lbi-", + "loadBalancerExternal": "lbe-", + "loadBalancerRule": "rule-", + "localNetworkGateway": "lgw-", + "natGateway": "ng-", + "networkInterface": "nic-", + "networkSecurityGroup": "nsg-", + "networkSecurityGroupSecurityRules": "nsgsr-", + "networkWatcher": "nw-", + "privateLink": "pl-", + "privateEndpoint": "pep-", + "publicIPAddress": "pip-", + "publicIPAddressPrefix": "ippre-", + "routeFilter": "rf-", + "routeServer": "rtserv-", + "routeTable": "rt-", + "serviceEndpointPolicy": "se-", + "trafficManagerProfile": "traf-", + "userDefinedRoute": "udr-", + "virtualNetwork": "vnet-", + "virtualNetworkGateway": "vgw-", + "virtualNetworkManager": "vnm-", + "virtualNetworkPeering": "peer-", + "virtualNetworkSubnet": "snet-", + "virtualWAN": "vwan-", + "virtualWANHub": "vhub-" + }, + "security": { + "bastion": "bas-", + "keyVault": "kv-", + "keyVaultManagedHSM": "kvmhsm-", + "managedIdentity": "id-", + "sshKey": "sshkey-", + "vpnGateway": "vpng-", + "vpnConnection": "vcn-", + "vpnSite": "vst-", + "webApplicationFirewallPolicy": "waf", + "webApplicationFirewallPolicyRuleGroup": "wafrg" + }, + "storage": { + "storSimple": "ssimp", + "backupVault": "bvault-", + "backupVaultPolicy": "bkpol-", + "fileShare": "share-", + "storageAccount": "st", + "storageSyncService": "sss-" + }, + "virtualDesktop": { + "labServicesPlan": "lp-", + "virtualDesktopHostPool": "vdpool-", + "virtualDesktopApplicationGroup": "vdag-", + "virtualDesktopWorkspace": "vdws-", + "virtualDesktopScalingPlan": "vdscaling-" + } + }, + "abbrs": "[variables('$fxv#0')]", + "storageName": "[format('{0}{1}-hub', variables('abbrs').storage.storageAccount, parameters('solutionName'))]", "storageSkuName": "Standard_LRS", - "aiServicesName": "[format('ais-{0}', parameters('solutionName'))]", - "applicationInsightsName": "[format('appi-{0}', parameters('solutionName'))]", - "containerRegistryName": "[format('cr-{0}', parameters('solutionName'))]", - "keyvaultName": "[format('kv-{0}', parameters('solutionName'))]", + "aiServicesName": "[format('{0}{1}', variables('abbrs').ai.aiServices, parameters('solutionName'))]", + "applicationInsightsName": "[format('{0}{1}', variables('abbrs').managementGovernance.applicationInsights, parameters('solutionName'))]", + "containerRegistryName": "[format('{0}{1}', variables('abbrs').containers.containerRegistry, parameters('solutionName'))]", + "keyvaultName": "[format('{0}{1}', variables('abbrs').security.keyVault, parameters('solutionName'))]", "location": "[parameters('solutionLocation')]", - "aiHubName": "[format('hub-{0}', parameters('solutionName'))]", + "aiHubName": "[format('{0}{1}-hub', variables('abbrs').ai.aiHub, parameters('solutionName'))]", "aiHubFriendlyName": "[variables('aiHubName')]", "aiHubDescription": "AI Hub", - "aiProjectName": "[format('proj-{0}', parameters('solutionName'))]", + "aiProjectName": "[format('{0}{1}', variables('abbrs').ai.aiHubProject, parameters('solutionName'))]", "aiProjectFriendlyName": "[variables('aiProjectName')]", - "aiSearchName": "[format('srch-{0}', parameters('solutionName'))]", - "workspaceName": "[format('log-{0}-hub', parameters('solutionName'))]", + "aiSearchName": "[format('{0}{1}', variables('abbrs').ai.aiSearch, parameters('solutionName'))]", + "workspaceName": "[format('{0}{1}', variables('abbrs').managementGovernance.logAnalyticsWorkspace, parameters('solutionName'))]", "aiModelDeployments": [ { "name": "[parameters('gptModelName')]", @@ -578,9 +1039,7 @@ "kind": "AIServices", "properties": { "customSubDomainName": "[variables('aiServicesName')]", - "apiProperties": { - "statisticsEnabled": false - } + "apiProperties": {} } }, { @@ -972,6 +1431,9 @@ }, "managedIdentityObjectId": { "value": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_managed_identity'), '2022-09-01').outputs.managedIdentityOutput.value.objectId]" + }, + "saName": { + "value": "[format('{0}{1}', variables('abbrs').storage.storageAccount, variables('solutionPrefix'))]" } }, "template": { @@ -981,7 +1443,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "12863612675732383951" + "templateHash": "13045600307649215289" } }, "parameters": { @@ -1001,7 +1463,6 @@ }, "saName": { "type": "string", - "defaultValue": "[format('st{0}', parameters('solutionName'))]", "metadata": { "description": "Name" } @@ -1201,6 +1662,12 @@ }, "AZURE_COSMOSDB_ENABLE_FEEDBACK": { "value": "True" + }, + "HostingPlanName": { + "value": "[format('{0}{1}', variables('abbrs').compute.appServicePlan, variables('solutionPrefix'))]" + }, + "WebsiteName": { + "value": "[format('{0}{1}', variables('abbrs').compute.webApp, variables('solutionPrefix'))]" } }, "template": { @@ -1210,7 +1677,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "6455788440385967919" + "templateHash": "7381410699255969358" } }, "parameters": { @@ -1224,7 +1691,6 @@ }, "HostingPlanName": { "type": "string", - "defaultValue": "[format('asp-{0}', parameters('solutionName'))]", "metadata": { "description": "Name of App Service plan" } @@ -1253,7 +1719,6 @@ }, "WebsiteName": { "type": "string", - "defaultValue": "[format('app-{0}', parameters('solutionName'))]", "metadata": { "description": "Name of Web App" } @@ -1687,6 +2152,9 @@ }, "keyVaultName": { "value": "[reference(extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', subscription().subscriptionId, resourceGroup().name), 'Microsoft.Resources/deployments', 'deploy_keyvault'), '2022-09-01').outputs.keyvaultName.value]" + }, + "accountName": { + "value": "[format('{0}{1}', variables('abbrs').databases.cosmosDBDatabase, variables('solutionPrefix'))]" } }, "template": { @@ -1696,7 +2164,7 @@ "_generator": { "name": "bicep", "version": "0.33.93.31351", - "templateHash": "16935405490916431865" + "templateHash": "9207539553523638326" } }, "parameters": { @@ -1714,6 +2182,9 @@ "keyVaultName": { "type": "string" }, + "accountName": { + "type": "string" + }, "kind": { "type": "string", "defaultValue": "GlobalDocumentDB", @@ -1729,7 +2200,6 @@ } }, "variables": { - "accountName": "[format('cosmos-{0}', parameters('solutionName'))]", "databaseName": "db_conversation_history", "collectionName": "conversations", "containers": [ @@ -1748,7 +2218,7 @@ }, "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers", "apiVersion": "2022-05-15", - "name": "[format('{0}/{1}/{2}', variables('accountName'), variables('databaseName'), variables('containers')[copyIndex()].name)]", + "name": "[format('{0}/{1}/{2}', parameters('accountName'), variables('databaseName'), variables('containers')[copyIndex()].name)]", "properties": { "resource": { "id": "[variables('containers')[copyIndex()].id]", @@ -1761,13 +2231,13 @@ "options": {} }, "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('accountName'), variables('databaseName'))]" + "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('accountName'), variables('databaseName'))]" ] }, { "type": "Microsoft.DocumentDB/databaseAccounts", "apiVersion": "2022-08-15", - "name": "[variables('accountName')]", + "name": "[parameters('accountName')]", "kind": "[parameters('kind')]", "location": "[parameters('solutionLocation')]", "tags": "[parameters('tags')]", @@ -1797,14 +2267,14 @@ { "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases", "apiVersion": "2022-05-15", - "name": "[format('{0}/{1}', variables('accountName'), variables('databaseName'))]", + "name": "[format('{0}/{1}', parameters('accountName'), variables('databaseName'))]", "properties": { "resource": { "id": "[variables('databaseName')]" } }, "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName'))]" + "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]" ] }, { @@ -1812,10 +2282,10 @@ "apiVersion": "2021-11-01-preview", "name": "[format('{0}/{1}', parameters('keyVaultName'), 'AZURE-COSMOSDB-ACCOUNT')]", "properties": { - "value": "[variables('accountName')]" + "value": "[parameters('accountName')]" }, "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName'))]" + "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]" ] }, { @@ -1823,10 +2293,10 @@ "apiVersion": "2021-11-01-preview", "name": "[format('{0}/{1}', parameters('keyVaultName'), 'AZURE-COSMOSDB-ACCOUNT-KEY')]", "properties": { - "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName')), '2022-08-15').primaryMasterKey]" + "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName')), '2022-08-15').primaryMasterKey]" }, "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName'))]" + "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]" ] }, { @@ -1857,7 +2327,7 @@ "outputs": { "cosmosAccountName": { "type": "string", - "value": "[variables('accountName')]" + "value": "[parameters('accountName')]" }, "cosmosDatabaseName": { "type": "string",