Proposed Pull Request Change

title description ms.custom zone_pivot_groups ms.topic ms.date ms.service author ms.author
Quickstart - Configure vaulted backup for Azure Data Lake Storage using ARM or Bicep template Learn how to configure vaulted backup for Azure Data Lake Storage using ARM or Bicep template. ['ignite-2025', 'devx-track-azurepowershell-azurecli, devx-track-azurecli'] backup-client-template-arm-bicep tutorial 11/18/2025 azure-backup AbhishekMallick-MS v-mallicka
📄 Document Links
GitHub View on GitHub Microsoft Learn View on Microsoft Learn
Content Truncation Detected
The generated rewrite appears to be incomplete.
Original lines: -
Output lines: -
Ratio: -
Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
+0 -0
+0 -0
--- title: Quickstart - Configure vaulted backup for Azure Data Lake Storage using ARM or Bicep template description: Learn how to configure vaulted backup for Azure Data Lake Storage using ARM or Bicep template. ms.custom: - ignite-2025 - devx-track-azurepowershell-azurecli, devx-track-azurecli zone_pivot_groups: backup-client-template-arm-bicep ms.topic: tutorial ms.date: 11/18/2025 ms.service: azure-backup author: AbhishekMallick-MS ms.author: v-mallicka # Customer intent: As an IT administrator, I want to configure backup for Azure Data Lake Storage using the ARM or Bicep template so that I can ensure data protection against accidental or malicious deletions without maintaining on-premises infrastructure. --- # Quickstart: Configure vaulted backup for Azure Data Lake Storage ::: zone pivot="client-template-arm" This quickstart describes how to configure [vaulted backup for Azure Data Lake Storage](azure-data-lake-storage-backup-overview.md) using an Azure Resource Manager (ARM) template. ## Prerequisites Before you back up Azure Data Lake Storage data, review the [supported scenarios](azure-data-lake-storage-backup-support-matrix.md) for Azure Data Lake Storage backup. ## Review the ARM template for Azure Data Lake Storage vaulted backup The following example ARM template allows you to configure vaulted backup for two containers in a storage account with a backup policy. This backup policy runs daily and retains backups for 30 days, as well as weekly, monthly, and yearly backups for longer retention. ```json { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": { "_generator": { "name": "bicep", "version": "0.26.170.59819", "templateHash": "16621072649356248018" } }, "parameters": { "vaultName": { "type": "string", "defaultValue": "[format('vault{0}', uniqueString(resourceGroup().id))]", "metadata": { "description": "Name of the Vault" } }, "vaultStorageRedundancy": { "type": "string", "defaultValue": "GeoRedundant", "allowedValues": [ "LocallyRedundant", "GeoRedundant" ], "metadata": { "description": "Change Vault Storage Type (not allowed if the vault has registered backups)" } }, "backupPolicyName": { "type": "string", "defaultValue": "[format('policy{0}', uniqueString(resourceGroup().id))]", "metadata": { "description": "Name of the Backup Policy" } }, "vaultTierDefaultRetentionInDays": { "type": "int", "defaultValue": 30, "minValue": 7, "maxValue": 3650, "metadata": { "description": "Vault tier default backup retention duration in days" } }, "vaultTierWeeklyRetentionInWeeks": { "type": "int", "defaultValue": 30, "minValue": 4, "maxValue": 521, "metadata": { "description": "Vault tier weekly backup retention duration in weeks" } }, "vaultTierMonthlyRetentionInMonths": { "type": "int", "defaultValue": 30, "minValue": 5, "maxValue": 116, "metadata": { "description": "Vault tier monthly backup retention duration in months" } }, "vaultTierYearlyRetentionInYears": { "type": "int", "defaultValue": 10, "minValue": 1, "maxValue": 10, "metadata": { "description": "Vault tier yearly backup retention duration in years" } }, "vaultTierDailyBackupScheduleTime": { "type": "string", "defaultValue": "06:00", "metadata": { "description": "Vault tier daily backup schedule time" } }, "storageAccountName": { "type": "string", "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]", "metadata": { "description": "Name of the Storage Account" } }, "containerList": { "type": "array", "defaultValue": [ "container1", "container2" ], "metadata": { "description": "List of the containers to be protected" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources" } } }, "variables": { "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')]", "dataSourceType": "Microsoft.Storage/storageAccounts/adlsBlobServices", "resourceType": "Microsoft.Storage/storageAccounts", "vaultTierDefaultRetentionDuration": "[format('P{0}D', parameters('vaultTierDefaultRetentionInDays'))]", "vaultTierWeeklyRetentionDuration": "[format('P{0}W', parameters('vaultTierWeeklyRetentionInWeeks'))]", "vaultTierMonthlyRetentionDuration": "[format('P{0}M', parameters('vaultTierMonthlyRetentionInMonths'))]", "vaultTierYearlyRetentionDuration": "[format('P{0}Y', parameters('vaultTierYearlyRetentionInYears'))]", "repeatingTimeIntervals": "[format('R/2025-10-10T{0}:00+00:00/P1D', parameters('vaultTierDailyBackupScheduleTime'))]" }, "resources": [ { "type": "Microsoft.DataProtection/backupVaults", "apiVersion": "2025-07-01", "name": "[parameters('vaultName')]", "location": "[parameters('location')]", "identity": { "type": "systemAssigned" }, "properties": { "storageSettings": [ { "datastoreType": "VaultStore", "type": "[parameters('vaultStorageRedundancy')]" } ] } }, { "type": "Microsoft.DataProtection/backupVaults/backupPolicies", "apiVersion": "2025-07-01", "name": "[format('{0}/{1}', parameters('vaultName'), parameters('backupPolicyName'))]", "properties": { "policyRules": [ { "name": "Yearly", "objectType": "AzureRetentionRule", "isDefault": false, "lifecycles": [ { "deleteAfter": { "duration": "[variables('vaultTierYearlyRetentionDuration')]", "objectType": "AbsoluteDeleteOption" }, "sourceDataStore": { "dataStoreType": "VaultStore", "objectType": "DataStoreInfoBase" }, "targetDataStoreCopySettings": [] } ] }, { "name": "Monthly", "objectType": "AzureRetentionRule", "isDefault": false, "lifecycles": [ { "deleteAfter": { "duration": "[variables('vaultTierMonthlyRetentionDuration')]", "objectType": "AbsoluteDeleteOption" }, "sourceDataStore": { "dataStoreType": "VaultStore", "objectType": "DataStoreInfoBase" }, "targetDataStoreCopySettings": [] } ] }, { "name": "Weekly", "objectType": "AzureRetentionRule", "isDefault": false, "lifecycles": [ { "deleteAfter": { "duration": "[variables('vaultTierWeeklyRetentionDuration')]", "objectType": "AbsoluteDeleteOption" }, "sourceDataStore": { "dataStoreType": "VaultStore", "objectType": "DataStoreInfoBase" }, "targetDataStoreCopySettings": [] } ] }, { "name": "Default", "objectType": "AzureRetentionRule", "isDefault": true, "lifecycles": [ { "deleteAfter": { "duration": "[variables('vaultTierDefaultRetentionDuration')]", "objectType": "AbsoluteDeleteOption" }, "sourceDataStore": { "dataStoreType": "VaultStore", "objectType": "DataStoreInfoBase" }, "targetDataStoreCopySettings": [] } ] }, { "name": "BackupDaily", "objectType": "AzureBackupRule", "backupParameters": { "backupType": "Discrete", "objectType": "AzureBackupParams" }, "dataStore": { "dataStoreType": "VaultStore", "objectType": "DataStoreInfoBase" }, "trigger": { "schedule": { "timeZone": "UTC", "repeatingTimeIntervals": [ "[variables('repeatingTimeIntervals')]" ] }, "taggingCriteria": [ { "isDefault": false, "taggingPriority": 10, "tagInfo": { "id": "Yearly_", "tagName": "Yearly" }, "criteria": [ { "absoluteCriteria": [ "FirstOfYear" ], "objectType": "ScheduleBasedBackupCriteria" } ] }, { "isDefault": false, "taggingPriority": 15, "tagInfo": { "id": "Monthly_", "tagName": "Monthly" }, "criteria": [ { "absoluteCriteria": [ "FirstOfMonth" ], "objectType": "ScheduleBasedBackupCriteria" } ] }, { "isDefault": false, "taggingPriority": 20, "tagInfo": { "id": "Weekly_", "tagName": "Weekly" }, "criteria": [ { "absoluteCriteria": [ "FirstOfWeek" ], "objectType": "ScheduleBasedBackupCriteria" } ] }, { "isDefault": true, "taggingPriority": 99, "tagInfo": { "id": "Default_", "tagName": "Default" } } ], "objectType": "ScheduleBasedTriggerContext" } } ], "datasourceTypes": [ "[variables('dataSourceType')]" ], "objectType": "BackupPolicy" }, "dependsOn": [ "[resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName'))]" ] }, { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2024-01-01", "name": "[parameters('storageAccountName')]", "location": "[parameters('location')]", "kind": "StorageV2", "sku": { "name": "Standard_RAGRS", "tier": "Standard" }, "properties": { "isHnsEnabled": true } }, { "copy": { "name": "storageContainerList", "count": "[length(parameters('containerList'))]" }, "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2024-01-01", "name": "[format('{0}/default/{1}', parameters('storageAccountName'), parameters('containerList')[copyIndex()])]", "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]" ] }, { "type": "Microsoft.Authorization/roleAssignments", "apiVersion": "2022-04-01", "scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]", "name": "[guid(resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName')), variables('roleDefinitionId'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]", "properties": { "roleDefinitionId": "[variables('roleDefinitionId')]", "principalId": "[reference(resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName')), '2021-01-01', 'Full').identity.principalId]", "principalType": "ServicePrincipal" }, "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "[resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName'))]" ] }, { "type": "Microsoft.DataProtection/backupVaults/backupInstances", "apiVersion": "2025-07-01", "name": "[format('{0}/{1}', parameters('vaultName'), parameters('storageAccountName'))]", "properties": { "objectType": "BackupInstance", "friendlyName": "[parameters('storageAccountName')]", "dataSourceInfo": { "objectType": "Datasource", "resourceID": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "resourceName": "[parameters('storageAccountName')]", "resourceType": "[variables('resourceType')]", "resourceUri": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "resourceLocation": "[parameters('location')]", "datasourceType": "[variables('dataSourceType')]" }, "dataSourceSetInfo": { "objectType": "DatasourceSet", "resourceID": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "resourceName": "[parameters('storageAccountName')]", "resourceType": "[variables('resourceType')]", "resourceUri": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "resourceLocation": "[parameters('location')]", "datasourceType": "[variables('dataSourceType')]" }, "policyInfo": { "policyId": "[resourceId('Microsoft.DataProtection/backupVaults/backupPolicies', parameters('vaultName'), parameters('backupPolicyName'))]", "name": "[parameters('backupPolicyName')]", "policyParameters": { "backupDatasourceParametersList": [ { "objectType": "BlobBackupDatasourceParameters", "containersList": "[parameters('containerList')]" } ] } } }, "dependsOn": [ "[resourceId('Microsoft.DataProtection/backupVaults/backupPolicies', parameters('vaultName'), parameters('backupPolicyName'))]", "[extensionResourceId(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), 'Microsoft.Authorization/roleAssignments', guid(resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName')), variables('roleDefinitionId'), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))))]", "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]", "storageContainerList", "[resourceId('Microsoft.DataProtection/backupVaults', parameters('vaultName'))]" ] } ] } ``` ## Deploy the ARM template for Azure Data Lake Storage vaulted backup After you review the preceding template, deploy the template for Azure Data Lake Storage vaulted backup. To deploy the template, store the template in a GitHub repository, and then run the following PowerShell script on Azure Cloud Shell. ```azurepowershell-interactive $projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names" $location = Read-Host -Prompt "Enter the location (for example, centralus)" $resourceGroupName = "${projectName}rg" $templateUri = "https//templateuri" New-AzResourceGroup -Name $resourceGroupName -Location $location New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName ``` ::: zone-end ::: zone pivot="client-template-bicep" This quickstart describes how to configure [vaulted backup for Azure Data Lake Storage](azure-data-lake-storage-backup-overview.md) using a Bicep template. ## Prerequisites Before you back up Azure Data Lake Storage data, ensure that the following prerequisites are met: - Configure your environment for Bicep development. [Learn how to install Bicep tools](/azure/azure-resource-manager/bicep/install). - Review the [supported scenarios](azure-data-lake-storage-backup-support-matrix.md) for Azure Data Lake Storage backup. ## Review the Bicep template for Azure Data Lake Storage vaulted backup The following example Bicep template allows you to configure vaulted backup for two containers in a storage account with a backup policy. This backup policy runs daily and retains backups for 30 days, as well as weekly, monthly, and yearly backups for longer retention. ```BICEP @description('Name of the Vault') param vaultName string = 'vault${uniqueString(resourceGroup().id)}' @description('Change Vault Storage Type (not allowed if the vault has registered backups)') @allowed([ 'LocallyRedundant' 'GeoRedundant' ]) param vaultStorageRedundancy string = 'GeoRedundant' @description('Name of the Backup Policy') param backupPolicyName string = 'policy${uniqueString(resourceGroup().id)}' @description('Vault tier default backup retention duration in days') @minValue(7) @maxValue(3650) param vaultTierDefaultRetentionInDays int = 30 @description('Vault tier weekly backup retention duration in weeks') @minValue(4) @maxValue(521) param vaultTierWeeklyRetentionInWeeks int = 30 @description('Vault tier monthly backup retention duration in months') @minValue(5) @maxValue(116) param vaultTierMonthlyRetentionInMonths int = 30 @description('Vault tier yearly backup retention duration in years') @minValue(1) @maxValue(10) param vaultTierYearlyRetentionInYears int = 10 @description('Vault tier daily backup schedule time') param vaultTierDailyBackupScheduleTime string = '06:00' @description('Name of the Storage Account') param storageAccountName string = 'store${uniqueString(resourceGroup().id)}' @description('List of the containers to be protected') param containerList array = [ 'container1' 'container2' ] @description('Location for all resources') param location string = resourceGroup().location var roleDefinitionId = subscriptionResourceId( 'Microsoft.Authorization/roleDefinitions', 'e5e2a7ff-d759-4cd2-bb51-3152d37e2eb1' ) var dataSourceType = 'Microsoft.Storage/storageAccounts/adlsBlobServices' var resourceType = 'Microsoft.Storage/storageAccounts' var vaultTierDefaultRetentionDuration = 'P${vaultTierDefaultRetentionInDays}D' var vaultTierWeeklyRetentionDuration = 'P${vaultTierWeeklyRetentionInWeeks}W' var vaultTierMonthlyRetentionDuration = 'P${vaultTierMonthlyRetentionInMonths}M' var vaultTierYearlyRetentionDuration = 'P${vaultTierYearlyRetentionInYears}Y' var repeatingTimeIntervals = 'R/2025-10-10T${vaultTierDailyBackupScheduleTime}:00+00:00/P1D' resource vault 'Microsoft.DataProtection/backupVaults@2025-07-01' = { name: vaultName location: location identity: { type: 'systemAssigned' } properties: { storageSettings: [ { datastoreType: 'VaultStore' type: vaultStorageRedundancy } ] } } resource backupPolicy 'Microsoft.DataProtection/backupVaults/backupPolicies@2025-07-01' = { parent: vault name: backupPolicyName properties: { policyRules: [ { name: 'Yearly' objectType: 'AzureRetentionRule' isDefault: false lifecycles: [ { deleteAfter: { duration: vaultTierYearlyRetentionDuration objectType: 'AbsoluteDeleteOption' } sourceDataStore: { dataStoreType: 'VaultStore' objectType: 'DataStoreInfoBase' } targetDataStoreCopySettings: [] } ] } { name: 'Monthly' objectType: 'AzureRetentionRule' isDefault: false lifecycles: [ { deleteAfter: { duration: vaultTierMonthlyRetentionDuration objectType: 'AbsoluteDeleteOption' } sourceDataStore: { dataStoreType: 'VaultStore' objectType: 'DataStoreInfoBase' } targetDataStoreCopySettings: [] } ] } { name: 'Weekly' objectType: 'AzureRetentionRule' isDefault: false lifecycles: [ { deleteAfter: { duration: vaultTierWeeklyRetentionDuration objectType: 'AbsoluteDeleteOption' } sourceDataStore: { dataStoreType: 'VaultStore' objectType: 'DataStoreInfoBase' } targetDataStoreCopySettings: [] } ] } { name: 'Default' objectType: 'AzureRetentionRule' isDefault: true lifecycles: [ { deleteAfter: { duration: vaultTierDefaultRetentionDuration objectType: 'AbsoluteDeleteOption' } sourceDataStore: { dataStoreType: 'VaultStore' objectType: 'DataStoreInfoBase' } targetDataStoreCopySettings: [] } ] } { name: 'BackupDaily' objectType: 'AzureBackupRule' backupParameters: { backupType: 'Discrete' objectType: 'AzureBackupParams' } dataStore: { dataStoreType: 'VaultStore' objectType: 'DataStoreInfoBase' } trigger: { schedule: { timeZone: 'UTC' repeatingTimeIntervals: [ repeatingTimeIntervals ] } taggingCriteria: [ { isDefault: false taggingPriority: 10 tagInfo: { id: 'Yearly_' tagName: 'Yearly' } criteria: [ { absoluteCriteria: [ 'FirstOfYear' ] objectType: 'ScheduleBasedBackupCriteria' } ] } { isDefault: false taggingPriority: 15 tagInfo: { id: 'Monthly_' tagName: 'Monthly' } criteria: [ { absoluteCriteria: [ 'FirstOfMonth' ] objectType: 'ScheduleBasedBackupCriteria' } ] } { isDefault: false taggingPriority: 20 tagInfo: { id: 'Weekly_' tagName: 'Weekly' } criteria: [ { absoluteCriteria: [ 'FirstOfWeek' ] objectType: 'ScheduleBasedBackupCriteria' } ] } { isDefault: true taggingPriority: 99 tagInfo: { id: 'Default_' tagName: 'Default' } } ] objectType: 'ScheduleBasedTriggerContext' } } ] datasourceTypes: [ dataSourceType ] objectType: 'BackupPolicy' } } resource storageAccount 'Microsoft.Storage/storageAccounts@2024-01-01' = { name: storageAccountName location: location kind: 'StorageV2' sku: { name: 'Standard_RAGRS' tier: 'Standard' } properties: { isHnsEnabled: true } } resource storageContainerList 'Microsoft.Storage/storageAccounts/blobServices/containers@2024-01-01' = [ for item in containerList: { name: '${storageAccountName}/default/${item}' dependsOn: [ storageAccount ] } ] resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { scope: storageAccount name: guid(vault.id, roleDefinitionId, storageAccount.id) properties: { roleDefinitionId: roleDefinitionId principalId: reference(vault.id, '2021-01-01', 'Full').identity.principalId principalType: 'ServicePrincipal' } } resource backupInstance 'Microsoft.DataProtection/backupVaults/backupInstances@2025-07-01' = { parent: vault name: storageAccountName properties: { objectType: 'BackupInstance' friendlyName: storageAccountName dataSourceInfo: { objectType: 'Datasource' resourceID: storageAccount.id resourceName: storageAccountName resourceType: resourceType resourceUri: storageAccount.id resourceLocation: location datasourceType: dataSourceType } dataSourceSetInfo: { objectType: 'DatasourceSet' resourceID: storageAccount.id resourceName: storageAccountName resourceType: resourceType resourceUri: storageAccount.id resourceLocation: location datasourceType: dataSourceType } policyInfo: { policyId: backupPolicy.id name: backupPolicyName policyParameters: { backupDatasourceParametersList: [ { objectType: 'BlobBackupDatasourceParameters' containersList: containerList } ] } } } dependsOn: [ roleAssignment storageContainerList ] } ``` ## Deploy the Bicep template for Azure Data Lake Storage vaulted backup After you review the preceding template, deploy the template for Azure Data Lake Storage vaulted backup. To deploy the template, store the preceding template in a GitHub repository, and then run the following PowerShell script on Azure Cloud Shell. ```azurepowershell-interactive $projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names" $location = Read-Host -Prompt "Enter the location (for example, centralus)" $resourceGroupName = "${projectName}rg" $templateUri = "templateURI" New-AzResourceGroup -Name $resourceGroupName -Location $location New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName $projectName ``` ::: zone-end ## Next steps - [Restore Azure Data Lake Storage using Azure portal](azure-data-lake-storage-restore.md). - [Manage vaulted backup for Azure Data Lake Storage using Azure portal](azure-data-lake-storage-backup-manage.md). - [Troubleshoot Azure Data Lake Storage backup](azure-data-lake-storage-backup-troubleshoot.md).
Success! Branch created successfully. Create Pull Request on GitHub
Error: