Search code examples
azure-powershellazure-backup-vaultazure-site-recovery

Azure Backup. Wait Only Until Snapshot Is Taken, Not Until It's Transferred to Vault


I'm writing a PowerShell script for starting MySQL Server process, initiating backups from Azure Recovery Services, then starting MySQL Server process again.

For my purposes Wait-AzRecoveryServicesBackupJob cmdlet is not suitable, as Azure Backup always takes 10 minutes to take a snapshot and takes 3-24 hours to transfer that snapshot to Vault. How can I wait only until snapshot is taken? enter image description here


Solution

  • You will need to set up your own polling loop, but unfortunately the Get-AzRecoveryServicesBackupJob doesn't have the properties you need. There are two options available to you in Powershell-- the REST API or the CLI.

    Once you've gotten the job info, you can find the individual tasks under properties.extendedInfo.tasksList

    Implementing this under the CLI would look something like this:

    $resourceGroup = "resourceGroup"
    $vaultName = "vaultName"
    
    $jobs = az backup job list --resource-group $resourceGroup --vault-name $vaultName --start-date 28-8-2020 | convertfrom-json
    $jobName = $jobs[0].name
    
    $jobStatus = az backup job show --name $jobName --resource-group $resourceGroup --vault-name $vaultName
    $taskStatus = $jobStatus.properties.extendedInfo.tasksList | Where-Object { $_.taskId -eq "Take Snapshot"}
    While ( $taskStatus.status -ne Completed ) {
         Write-Host -Object "Waiting for completion..."
         Start-Sleep -minutes 1
         $jobStatus = az backup job show --name $jobName --resource-group $resourceGroup --vault-name $vaultName
         $taskStatus = $jobStatus.properties.extendedInfo.tasksList | Where-Object { $_.taskId -eq "Take Snapshot"}
    }
    Write-Host -Object "Done!"