Compartilhar via


Azure: Desativando Concessão e Removendo Arquivo do Blob Storage

​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.