diff --git a/azuredeploy.json b/azuredeploy.json index 95728590..123ee8e2 100644 --- a/azuredeploy.json +++ b/azuredeploy.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.1", + "contentVersion": "1.0.0.2", "parameters": { "sqlDatabaseEditionTierDtuCapacity": { "type": "string", @@ -18,7 +18,7 @@ "Standard-S12-3000-250", "Premium-P1-125-500", "Premium-P2-250-500", - "Premium-P4-500-500" , + "Premium-P4-500-500", "Premium-P6-1000-500", "Premium-P11-1750-500-1024", "Premium-P15-4000-1024", @@ -38,19 +38,19 @@ "sqlDatabaseName": { "type": "string", "metadata": { - "description": "The name of the sql databaseName. It has to be unique." + "description": "The name of the sql database. It has to be unique." } }, "sqlAdministratorLogin": { "type": "string", "metadata": { - "description": "The admin user of the SQL Server" + "description": "The admin user of the SQL Server." } }, "sqlAdministratorLoginPassword": { "type": "securestring", "metadata": { - "description": "The password of the admin user of the SQL Server" + "description": "The password of the admin user of the SQL Server." } }, "BlazorWebsiteName": { @@ -75,7 +75,10 @@ "P3", "P4" ], - "defaultValue": "B1" + "defaultValue": "B1", + "metadata": { + "description": "The SKU for the App Service Plan" + } }, "BlazorSKUCapacity": { "type": "int", @@ -101,15 +104,18 @@ "databaseEdition": "[variables('databaseEditionTierDtuCapacity')[0]]", "databaseTier": "[variables('databaseEditionTierDtuCapacity')[1]]", "databaseDtu": "[if(greater(length(variables('databaseEditionTierDtuCapacity')), 2), variables('databaseEditionTierDtuCapacity')[2], '')]", - "databaseMaxSizeGigaBytes":"[if(greater(length(variables('databaseEditionTierDtuCapacity')), 3), variables('databaseEditionTierDtuCapacity')[3], '')]", + "databaseMaxSizeGigaBytes": "[if(greater(length(variables('databaseEditionTierDtuCapacity')), 3), variables('databaseEditionTierDtuCapacity')[3], '')]", "databaseServerlessTiers": [ - "GP_S_Gen5_2" - ] + "GP_S_Gen5_2" + ] }, "resources": [ + // ------------------------------------------------------ + // SQL Server + // ------------------------------------------------------ { "type": "Microsoft.Sql/servers", - "apiVersion": "2021-11-01", + "apiVersion": "2022-05-01-preview", // Updated API version "name": "[parameters('sqlServerName')]", "location": "[parameters('location')]", "tags": { @@ -121,9 +127,12 @@ "version": "12.0" } }, + // ------------------------------------------------------ + // SQL Database (separate resource rather than subresource) + // ------------------------------------------------------ { "type": "Microsoft.Sql/servers/databases", - "apiVersion": "2021-11-01", + "apiVersion": "2022-05-01-preview", // Updated API version "name": "[format('{0}/{1}', parameters('sqlServerName'), parameters('sqlDatabaseName'))]", "location": "[parameters('location')]", "tags": { @@ -132,24 +141,40 @@ "sku": { "name": "[if(equals(variables('databaseEdition'), 'GeneralPurpose'), variables('databaseTier'), variables('databaseEdition'))]", "tier": "[variables('databaseEdition')]", - "capacity": "[if(equals(variables('databaseDtu'), ''), json('null'), int(variables('databaseDtu')))]" + "capacity": "[if(equals(variables('databaseDtu'), ''), json('null'), int(variables('databaseDtu')))]" }, - "kind": "[concat('v12.0,user,vcore',if(contains(variables('databaseServerlessTiers'),variables('databaseTier')),',serverless',''))]", + "kind": "[concat('v12.0,user,vcore', if(contains(variables('databaseServerlessTiers'), variables('databaseTier')), ',serverless', ''))]", "properties": { "edition": "[variables('databaseEdition')]", "collation": "[variables('databaseCollation')]", "maxSizeBytes": "[if(equals(variables('databaseMaxSizeGigaBytes'), ''), json('null'), mul(mul(mul(int(variables('databaseMaxSizeGigaBytes')),1024),1024),1024))]", "requestedServiceObjectiveName": "[variables('databaseTier')]" - }, "dependsOn": [ - "[resourceId('Microsoft.Sql/servers', parameters('sqlserverName'))]" + "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]" ] }, + // ------------------------------------------------------ + // Transparent Data Encryption child resource + // ------------------------------------------------------ + { + "type": "Microsoft.Sql/servers/databases/transparentDataEncryption", + "apiVersion": "2021-02-01-preview", + "name": "[format('{0}/{1}/current', parameters('sqlServerName'), parameters('sqlDatabaseName'))]", + "properties": { + "state": "Enabled" + }, + "dependsOn": [ + "[resourceId('Microsoft.Sql/servers/databases', parameters('sqlServerName'), parameters('sqlDatabaseName'))]" + ] + }, + // ------------------------------------------------------ + // Firewall Rule (renamed to 'AllowAllMicrosoftAzureIps') + // ------------------------------------------------------ { "type": "Microsoft.Sql/servers/firewallRules", - "apiVersion": "2021-11-01", - "name": "[format('{0}/{1}', parameters('sqlServerName'), 'AllowAllWindowsAzureIps')]", + "apiVersion": "2022-05-01-preview", // Updated API version + "name": "[format('{0}/{1}', parameters('sqlServerName'), 'AllowAllMicrosoftAzureIps')]", "properties": { "endIpAddress": "0.0.0.0", "startIpAddress": "0.0.0.0" @@ -158,26 +183,33 @@ "[resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))]" ] }, + // ------------------------------------------------------ + // App Service Plan + // ------------------------------------------------------ { - "name": "[variables('hostingPlanName')]", "type": "Microsoft.Web/serverfarms", - "location": "[resourceGroup().location]", - "apiVersion": "2022-09-01", - "dependsOn": [], + "apiVersion": "2022-03-01", // Updated API version + "name": "[variables('hostingPlanName')]", + "location": "[parameters('location')]", "tags": { "displayName": "Blazor" }, "sku": { "name": "[parameters('BlazorSKU')]", + // If you want to auto-map to certain "tier" strings, you can do so. Here we just set the capacity: "capacity": "[parameters('BlazorSKUCapacity')]" }, "properties": { "name": "[variables('hostingPlanName')]", "numberOfWorkers": 1 - } + }, + "dependsOn": [] }, + // ------------------------------------------------------ + // Web App + // ------------------------------------------------------ { - "apiVersion": "2018-02-01", + "apiVersion": "2022-03-01", // Updated API version "name": "[parameters('BlazorWebsiteName')]", "type": "Microsoft.Web/sites", "location": "[parameters('location')]", @@ -189,27 +221,46 @@ "displayName": "Website" }, "properties": { - "name": "[parameters('BlazorWebsiteName')]", "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]", "siteConfig": { "webSocketsEnabled": true, - "netFrameworkVersion": "v5.0" + // Updated .NET version "v9.0" from second snippet + "netFrameworkVersion": "v9.0" } }, "resources": [ + // -------------------------------------------------- + // Source Control for your Web App + // -------------------------------------------------- { "type": "sourcecontrols", - "apiVersion": "2018-02-01", + "apiVersion": "2022-03-01", "name": "web", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('BlazorWebsiteName'))]" - //"[resourceId('Microsoft.Web/Sites/config', parameters('BlazorWebsiteName'), 'connectionstrings')]" ], "properties": { - "RepoUrl": "https://github.com/oqtane/oqtane.framework.git", + "repoUrl": "https://github.com/oqtane/oqtane.framework.git", "branch": "master", - "IsManualIntegration": true + "isManualIntegration": true + } + }, + // -------------------------------------------------- + // Connection Strings (to use FQDN) + // -------------------------------------------------- + { + "type": "config", + "apiVersion": "2022-03-01", + "name": "connectionstrings", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('BlazorWebsiteName'))]" + ], + "properties": { + "DefaultConnection": { + "value": "[concat('Data Source=tcp:', reference(resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('sqlDatabaseName'), ';User Id=', parameters('sqlAdministratorLogin'), '@', reference(resourceId('Microsoft.Sql/servers', parameters('sqlServerName'))).fullyQualifiedDomainName, ';Password=', parameters('sqlAdministratorLoginPassword'), ';')]", + "type": "SQLAzure" + } } } ]