Introduction
The purpose of this document is to describe the process to take automated on-demand snapshots for Azure File Share.
Snapshot for Azure File Share is now in General Availability. Previously, Azure File Share did not have any backup option. In case of the File Share getting deleted, there was no mechanism to recover the File Share and the data was lost. The File Share Snapshot helps organizations take on-demand snapshot backups of the existing File Share for restoring it later as and when required. This document describes automating this process.
Pre-requisites
- Subscription contributor
- Implementation Steps
Step 1. Search for Automation Account in the Resource Blade and open the Automation Account Service.
Step 2. Click on + Create to create a new Automation Account.
Step 3. Fill in the below details and click on Next.
Step 4. Select the System Assigned checkbox which will assign a System-assigned Managed Identity to this Automation account. Click on Next.
Step 5. Select Private Access which will enable us to create a Private Endpoint to this NFS Storage.
Step 6. Provide the Tags and click Review + Create to validate and create the Automation Account.
Step 7. Once the resource has been created, go to the resource, click on Runbooks à + Create a Runbook. This runbook is for creating new snapshots.
Step 8. Provide the Runbook Name, Type, Version, and Description, and click on Review + Create to create the Runbook.
Step 9. Following the above steps, create a new Runbook for deleting old snapshots and copy the below code. The below code will check for older snapshots and delete them.
Connect-AzAccount -Identity
$resourceGroupName = "snapshottest"
$accountName = "snapshotnfstest"
$shareName = "testfileshare"
#$snapshotLifetimeInDays = "15"
$snapshotLifetimeInMinutes = "5"
$whatIf = $false
$CurrentDateTime = (Get-Date).ToUniversalTime()
#$DateTimeThreshold = $CurrentDateTime.AddDays(-$snapshotLifetimeInDays)
$DateTimeThreshold = $CurrentDateTime.AddMinutes(-$snapshotLifetimeInMinutes)
Write-Host "Querying all snapshots for share '$shareName'"
$snapshotList = (Get-AzRmStorageShare -ResourceGroupName $resourcegroupname -StorageAccountName $accountName -IncludeSnapshot) | Where-Object { $_.Name -eq $shareName -and $_.snapshotTime -ne $null }
Write-Output $snapshotList
Write-Output "Current date/time is $CurrentDateTime. Removing share snapshots older than '$DateTimeThreshold'"
foreach ($snapshot in $snapshotList) {
if ($snapshot.SnapshotTime -lt $DateTimeThreshold) {
Write-Output "Removing snapshot '$($snapshot.snapshotTime)' of share '$($snapshot.Name)'"
if ($whatIf -ne $true) {
Remove-AzRmStorageShare -ResourceGroupName $resourcegroupname -StorageAccountName $accountName -Name $snapshot.Name -snapshotTime $snapshot.snapshotTime -Force
}
else {
Write-Output "Retaining recent snapshot '$($snapshot.snapshotTime)' of share '$($snapshot.Name)'"
}
}
}
Step 10. Click on Schedule click on + Add a schedule.
Step 11. Click on Schedule as shown in the snapshot below.
Step 12. Click on + Add a Schedule.
Step 13. Provide the schedule for the Automation account to execute the Runbook and click on Create to create a schedule.