Search code examples
azureazure-web-app-serviceazure-resource-manager

Enabling backups on Azure WebApp from Azure Resource Manager


I'm using ARM templates to deploy our infrastructure which includes Azure Web Apps. As part of the deployment I would like to make sure backups are enabled for them instead of having to do this manually post deployment. Is this possible? If not, what would be a good alternative instead of manually enabling the backups?


Solution

  • I can't find any docs or samples about config azure app service backups in ARM templates, but you can use Azure PowerShell to create your app service and config backup for it automatically.

    Try the powershell below :

    $name = '<name of your solution>'
    $location = '<location of your solution>'
    
    $ResourceGroupName = $name 
    $sites_appwithbackup_name = $name
    $serverfarms_webappwithbackup_name = $name 
    $components_appwithbackup_name = $name 
    $storageAccounts_webappbk_name = $name
    
    
    try {
        New-AzResourceGroup -Name $ResourceGroupName -Location $location
        Start-Sleep -Seconds 5
        New-AzResourceGroupDeployment  -ResourceGroupName $ResourceGroupName -TemplateFile "<path of template file>" -sites_appwithbackup_name  $sites_appwithbackup_name -serverfarms_webappwithbackup_name $serverfarms_webappwithbackup_name -components_appwithbackup_name $components_appwithbackup_name -storageAccounts_webappbk_name $storageAccounts_webappbk_name -location $location
    
        $webapp = Get-AzWebApp -Name $sites_appwithbackup_name -ResourceGroupName $ResourceGroupName
        $storage = Get-AzStorageAccount -Name $storageAccounts_webappbk_name  -ResourceGroupName $ResourceGroupName
    
        $storageContainerSAS = New-AzStorageContainerSASToken  -Context $storage.Context -Name "backup" -Permission "rwdl" -ExpiryTime (Get-Date -Year 2300)
    
        $storageContainerURL = $storage.Context.BlobEndPoint + "backup" + $storageContainerSAS
    
        Edit-AzWebAppBackupConfiguration -FrequencyInterval 30 -FrequencyUnit Day  -RetentionPeriodInDays 30 -WebApp $webapp -StorageAccountUrl $storageContainerURL
    }
    catch {
        Remove-AzResourceGroup -Name $ResourceGroupName 
    }
    

    This is my template in this case :

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "sites_appwithbackup_name": {
    
                "type": "String"
            },
            "serverfarms_webappwithbackup_name": {
    
                "type": "String"
            },
            "components_appwithbackup_name": {
    
                "type": "String"
            },
            "storageAccounts_webappbk_name": {
    
                "type": "String"
            },
            "location": {
    
                "type": "String"
            }
        },
        "variables": {},
        "resources": [
            {
                "type": "microsoft.insights/components",
                "apiVersion": "2015-05-01",
                "name": "[parameters('components_appwithbackup_name')]",
                "location": "[parameters('location')]",
                "kind": "web",
                "properties": {
                    "Application_Type": "web",
                    "Request_Source": "IbizaWebAppExtensionCreate"
                }
            },
            {
                "type": "Microsoft.Storage/storageAccounts",
                "apiVersion": "2019-04-01",
                "name": "[parameters('storageAccounts_webappbk_name')]",
                "location": "[parameters('location')]",
                "sku": {
                    "name": "Standard_RAGRS",
                    "tier": "Standard"
                },
                "kind": "StorageV2",
                "properties": {
                    "networkAcls": {
                        "bypass": "AzureServices",
                        "virtualNetworkRules": [],
                        "ipRules": [],
                        "defaultAction": "Allow"
                    },
                    "supportsHttpsTrafficOnly": true,
                    "encryption": {
                        "services": {
                            "file": {
                                "enabled": true
                            },
                            "blob": {
                                "enabled": true
                            }
                        },
                        "keySource": "Microsoft.Storage"
                    },
                    "accessTier": "Hot"
                }
            },
            {
                "type": "Microsoft.Web/serverfarms",
                "apiVersion": "2016-09-01",
                "name": "[parameters('serverfarms_webappwithbackup_name')]",
                "location": "[parameters('location')]",
                "sku": {
                    "name": "S1",
                    "tier": "Standard",
                    "size": "S1",
                    "family": "S",
                    "capacity": 1
                },
                "kind": "app",
                "properties": {
                    "name": "[parameters('serverfarms_webappwithbackup_name')]",
                    "perSiteScaling": false,
                    "reserved": false,
                    "targetWorkerCount": 0,
                    "targetWorkerSizeId": 0
                }
            },
            {
                "type": "Microsoft.Storage/storageAccounts/blobServices",
                "apiVersion": "2019-04-01",
                "name": "[concat(parameters('storageAccounts_webappbk_name'), '/default')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccounts_webappbk_name'))]"
                ],
                "properties": {
                    "cors": {
                        "corsRules": []
                    },
                    "deleteRetentionPolicy": {
                        "enabled": false
                    }
                }
            },
            {
                "type": "Microsoft.Web/sites",
                "apiVersion": "2016-08-01",
                "name": "[parameters('sites_appwithbackup_name')]",
                "location": "[parameters('location')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_webappwithbackup_name'))]"
                ],
                "kind": "app",
                "properties": {
                    "enabled": true,
                    "hostNameSslStates": [
                        {
                            "name": "[concat(parameters('sites_appwithbackup_name'), '.azurewebsites.net')]",
                            "sslState": "Disabled",
                            "hostType": "Standard"
                        },
                        {
                            "name": "[concat(parameters('sites_appwithbackup_name'), '.scm.azurewebsites.net')]",
                            "sslState": "Disabled",
                            "hostType": "Repository"
                        }
                    ],
                    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_webappwithbackup_name'))]",
                    "reserved": false,
                    "scmSiteAlsoStopped": false,
                    "clientAffinityEnabled": true,
                    "clientCertEnabled": false,
                    "hostNamesDisabled": false,
                    "containerSize": 0,
                    "dailyMemoryTimeQuota": 0,
                    "httpsOnly": false
                }
            },
            {
                "type": "Microsoft.Web/sites/config",
                "apiVersion": "2016-08-01",
                "name": "[concat(parameters('sites_appwithbackup_name'), '/web')]",
                "location": "[parameters('location')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/sites', parameters('sites_appwithbackup_name'))]"
                ],
                "properties": {
                    "numberOfWorkers": 1,
                    "defaultDocuments": [
                        "Default.htm",
                        "Default.html",
                        "Default.asp",
                        "index.htm",
                        "index.html",
                        "iisstart.htm",
                        "default.aspx",
                        "index.php",
                        "hostingstart.html"
                    ],
                    "netFrameworkVersion": "v4.0",
                    "phpVersion": "5.6",
                    "pythonVersion": "",
                    "nodeVersion": "",
                    "linuxFxVersion": "",
                    "requestTracingEnabled": false,
                    "remoteDebuggingEnabled": false,
                    "httpLoggingEnabled": false,
                    "logsDirectorySizeLimit": 35,
                    "detailedErrorLoggingEnabled": false,
                    "publishingUsername": "$appwithbackup",
                    "scmType": "None",
                    "use32BitWorkerProcess": true,
                    "webSocketsEnabled": false,
                    "alwaysOn": true,
                    "appCommandLine": "",
                    "managedPipelineMode": "Integrated",
                    "virtualApplications": [
                        {
                            "virtualPath": "/",
                            "physicalPath": "site\\wwwroot",
                            "preloadEnabled": true,
                            "virtualDirectories": null
                        }
                    ],
                    "winAuthAdminState": 0,
                    "winAuthTenantState": 0,
                    "customAppPoolIdentityAdminState": false,
                    "customAppPoolIdentityTenantState": false,
                    "loadBalancing": "LeastRequests",
                    "routingRules": [],
                    "experiments": {
                        "rampUpRules": []
                    },
                    "autoHealEnabled": false,
                    "vnetName": "",
                    "siteAuthEnabled": false,
                    "siteAuthSettings": {
                        "enabled": null,
                        "unauthenticatedClientAction": null,
                        "tokenStoreEnabled": null,
                        "allowedExternalRedirectUrls": null,
                        "defaultProvider": null,
                        "clientId": null,
                        "clientSecret": null,
                        "clientSecretCertificateThumbprint": null,
                        "issuer": null,
                        "allowedAudiences": null,
                        "additionalLoginParams": null,
                        "isAadAutoProvisioned": false,
                        "googleClientId": null,
                        "googleClientSecret": null,
                        "googleOAuthScopes": null,
                        "facebookAppId": null,
                        "facebookAppSecret": null,
                        "facebookOAuthScopes": null,
                        "twitterConsumerKey": null,
                        "twitterConsumerSecret": null,
                        "microsoftAccountClientId": null,
                        "microsoftAccountClientSecret": null,
                        "microsoftAccountOAuthScopes": null
                    },
                    "localMySqlEnabled": false,
                    "http20Enabled": false,
                    "minTlsVersion": "1.2",
                    "ftpsState": "AllAllowed",
                    "reservedInstanceCount": 0,
                    "fileChangeAuditEnabled": false
                }
            },
            {
                "type": "Microsoft.Web/sites/hostNameBindings",
                "apiVersion": "2016-08-01",
                "name": "[concat(parameters('sites_appwithbackup_name'), '/', parameters('sites_appwithbackup_name'), '.azurewebsites.net')]",
                "location": "[parameters('location')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/sites', parameters('sites_appwithbackup_name'))]"
                ],
                "properties": {
                    "siteName": "appwithbackup",
                    "hostNameType": "Verified"
                }
            },
            {
                "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
                "apiVersion": "2019-04-01",
                "name": "[concat(parameters('storageAccounts_webappbk_name'), '/default/backup')]",
                "dependsOn": [
                    "[resourceId('Microsoft.Storage/storageAccounts/blobServices', parameters('storageAccounts_webappbk_name'), 'default')]",
                    "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccounts_webappbk_name'))]"
                ],
                "properties": {
                    "publicAccess": "None"
                }
            }
        ]
    }
    

    Result on my side : enter image description here As you can see all required resources has been created and backup has been configed. Hope it helps .