​Nesse artigo vamos mostrar como desativar a concessão criada em arquivos dentro do Blob Storage, para liberar o acesso a remoção. Em nosso exemplo, utilizamos o Blob Storage para Backups semanais de banco de dados SQL Server. Com isso, a Lease Blob cria e gerencia um bloqueio para operações de gravação e exclusão. A duração do bloqueio pode ser de 15 a 60 segundos ou pode ser infinita. Em nosso exemplo o bloqueio está sendo infinito, portanto, não conseguimos excluir os arquivos para gerenciamento do Blob e precisamos com urgência, revisar as tarefas de backup e sua integridade. 

Importante: Caso isso ocorra em seu ambiente de Backup no Blob do Microsoft Azure, revise sua tarefa de agendamento e faça um teste de restore, pois o Backup pode não estar finalizando corretamente.


Vamos ver agora, como desativamos a concessão e removemos os arquivos do Blob.

No momento da tentativa de exclusão, recebemos a seguinte mensagem:



Entre em sua "Storage Account" onde você possui os arquivos que deseja excluir ou gerenciar:



Vá até "Gerenciador de armazenamento" e expanda o "Containers Blob":



Veja que na imagem abaixo, diversos arquivos estão com concessões ativas e mostram um ícone com um "cadeado". Quando o arquivo apresenta esse ícone, não é possível removê-lo ou alterá-lo:



Para desativar a concessão, clique com o botão direito no arquivo que deseja excluir e clique em "Interromper Concessão":



Insira o nome completo do arquivo para confirma a desativação da concessão:



Observe na imagem abaixo que após a desativação , o "Cadeado" foi removido e a concessão foi desativada. Com isso, agora podemos excluir o arquivo desejado e diminuir o consumo do nosso Storage Blob.
 


Se você possuir milhares de Blobs e arquivos em ambiente Azure, o método manual pode ser muito trabalhoso, portanto, utilize o script Powershell para desativar a concessão dos arquivos em massa.

  • Antes de aplicar esse script em seu ambiente, altere os parâmetros conforme o nome dos seus arquivos e contas de armazenamento

$storageAccount = "<myStorageAccount>"
$storageKey = "<myStorageKey>"
$blobContainer = "<myBlobContainer>"
$storageAssemblyPathName = "<myStorageAssemblyPathName>"
   
# well known Restore Lease ID 
$restoreLeaseId = "BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2" 
   
# load the storage assembly without locking the file for the duration of the PowerShell session 
$bytes = [System.IO.File]::ReadAllBytes($storageAssemblyPath) 
[System.Reflection.Assembly]::Load($bytes) 
   
$cred = New-Object 'Microsoft.WindowsAzure.Storage.Auth.StorageCredentials' $storageAccount, $storageKey 
$client = New-Object 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient' "https://$storageAccount.blob.core.windows.net", $cred 
$container = $client.GetContainerReference($blobContainer) 
   
# list all the blobs 
$blobs = $container.ListBlobs($null,$true)
   
# filter blobs that are have Lease Status as "locked"
$lockedBlobs = @() 
foreach($blob in $blobs) 
    $blobProperties = $blob.Properties
    if($blobProperties.LeaseStatus -eq "Locked"
    
        $lockedBlobs += $blob 
    
 
if($lockedBlobs.Count -gt 0) 
    Write-Host "Breaking leases..."
    foreach($blob in $lockedBlobs )
    
        try 
        
            $blob.AcquireLease($null, $restoreLeaseId, $null, $null, $null
            Write-Host "The lease on $($blob.Uri) is a restore lease." 
        
        catch [Microsoft.WindowsAzure.Storage.StorageException] 
        
            if($_.Exception.RequestInformation.HttpStatusCode -eq 409) 
            
                Write-Host "The lease on $($blob.Uri) is not a restore lease." 
            
        
   
        Write-Host "Breaking lease on $($blob.Uri)." 
        $blob.BreakLease($(New-TimeSpan), $null, $null, $null) | Out-Null 
    
} else { Write-Host " There are no blobs with locked lease status." }

Esperamos que essa pequena dica ajude todos os administradores que utilizam os serviços online da Microsoft, para melhorias no gerenciamento dos serviços e diminuição de custos para sua organização.