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.