targetScope = 'subscription' @minLength(1) @maxLength(64) @description('Name of the the environment which is used to generate a short unique hash used in all resources.') param environmentName string @minLength(1) @description('Primary location for all resources') param location string // Optional parameters to override the default azd resource naming conventions. Update the main.parameters.json file to provide values. e.g.,: // "resourceGroupName": { // "value": "myGroupName" // } param resourceGroupName string = '' param webServiceName string = '' param catalogDatabaseName string = 'catalogDatabase' param catalogDatabaseServerName string = '' param identityDatabaseName string = 'identityDatabase' param identityDatabaseServerName string = '' param appServicePlanName string = '' param keyVaultName string = '' @description('Id of the user or app to assign application roles') param principalId string = '' @secure() @description('SQL Server administrator password') param sqlAdminPassword string @secure() @description('Application user password') param appUserPassword string var abbrs = loadJsonContent('./abbreviations.json') var resourceToken = toLower(uniqueString(subscription().id, environmentName, location)) var tags = { 'azd-env-name': environmentName } // Organize resources in a resource group resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = { name: !empty(resourceGroupName) ? resourceGroupName : '${abbrs.resourcesResourceGroups}${environmentName}' location: location tags: tags } // The application frontend module web './core/host/appservice.bicep' = { name: 'web' scope: rg params: { name: !empty(webServiceName) ? webServiceName : '${abbrs.webSitesAppService}web-${resourceToken}' location: location appServicePlanId: appServicePlan.outputs.id keyVaultName: keyVault.outputs.name runtimeName: 'dotnetcore' runtimeVersion: '6.0' tags: union(tags, { 'azd-service-name': 'web' }) appSettings: { AZURE_SQL_CATALOG_CONNECTION_STRING_KEY: 'AZURE-SQL-CATALOG-CONNECTION-STRING' AZURE_SQL_IDENTITY_CONNECTION_STRING_KEY: 'AZURE-SQL-IDENTITY-CONNECTION-STRING' AZURE_KEY_VAULT_ENDPOINT: keyVault.outputs.endpoint } } } module apiKeyVaultAccess './core/security/keyvault-access.bicep' = { name: 'api-keyvault-access' scope: rg params: { keyVaultName: keyVault.outputs.name principalId: web.outputs.identityPrincipalId } } // The application database: Catalog module catalogDb './core/database/sqlserver/sqlserver.bicep' = { name: 'sql-catalog' scope: rg params: { name: !empty(catalogDatabaseServerName) ? catalogDatabaseServerName : '${abbrs.sqlServers}catalog-${resourceToken}' databaseName: catalogDatabaseName location: location tags: tags sqlAdminPassword: sqlAdminPassword appUserPassword: appUserPassword keyVaultName: keyVault.outputs.name connectionStringKey: 'AZURE-SQL-CATALOG-CONNECTION-STRING' } } // The application database: Identity module identityDb './core/database/sqlserver/sqlserver.bicep' = { name: 'sql-identity' scope: rg params: { name: !empty(identityDatabaseServerName) ? identityDatabaseServerName : '${abbrs.sqlServers}identity-${resourceToken}' databaseName: identityDatabaseName location: location tags: tags sqlAdminPassword: sqlAdminPassword appUserPassword: appUserPassword keyVaultName: keyVault.outputs.name connectionStringKey: 'AZURE-SQL-IDENTITY-CONNECTION-STRING' } } // Store secrets in a keyvault module keyVault './core/security/keyvault.bicep' = { name: 'keyvault' scope: rg params: { name: !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' location: location tags: tags principalId: principalId } } // Create an App Service Plan to group applications under the same payment plan and SKU module appServicePlan './core/host/appserviceplan.bicep' = { name: 'appserviceplan' scope: rg params: { name: !empty(appServicePlanName) ? appServicePlanName : '${abbrs.webServerFarms}${resourceToken}' location: location tags: tags sku: { name: 'B1' } } } // Data outputs output AZURE_SQL_CATALOG_CONNECTION_STRING_KEY string = catalogDb.outputs.connectionStringKey output AZURE_SQL_IDENTITY_CONNECTION_STRING_KEY string = identityDb.outputs.connectionStringKey output AZURE_SQL_CATALOG_DATABASE_NAME string = catalogDb.outputs.databaseName output AZURE_SQL_IDENTITY_DATABASE_NAME string = identityDb.outputs.databaseName // App outputs output AZURE_LOCATION string = location output AZURE_TENANT_ID string = tenant().tenantId output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.endpoint output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name