Artigos
A Wenz Cursos fornece artigos técnicos gratuitos sobre diversas tecnologias do mercado. Acesse aqui e bons estudos para todos!
Microsoft Azure
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.
$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.