Pergunta sobre azure-storage-blobs, azure, blobstore – Como limpar um contêiner de Blob de armazenamento do Azure?

26

Eu só quero limpar (despejo, zap, del.) um contêiner de Blob do Azure. Como eu posso fazer isso?

Nota: O contêiner é usado pelos logs do IIS (executando o Webrole) (wad-iis-logfiles).

Sua resposta

9   a resposta
1

a melhor opção é identificar a lista de itens encontrados no contêiner. em seguida, exclua cada item do contêiner. Essa é a melhor opção. Se você excluir o contêiner, deverá ocorrer um erro de tempo de execução na próxima vez ...

23

ou seja, excluindo todo o contêiner. Como você disse, há um atraso entre a exclusão do contêiner e quando você pode usar esse nome de contêiner novamente.

Sua única outra opção é excluir um de cada vez. Se você puder fazer a exclusão do mesmo centro de dados onde os blobs estão armazenados, será mais rápido do que executar a exclusão localmente. Isso provavelmente significa escrever código (ou você pode RDP em uma de suas instâncias e instalar o Cloud Explorer). Se você está escrevendo código, então você pode acelerar o processo geral, excluindo os itens em paralelo. Algo parecido com isso funcionaria:

<code>Parallel.ForEach(myCloudBlobClient.GetContainerReference(myContainerName).ListBlobs(), x => ((CloudBlob) x).Delete());
</code>
funciona muito bem - obrigado! Uma correção seria retornar arquivos como uma lista simples, caso as pastas fossem usadas:Parallel.ForEach(blobContainer.ListBlobs(useFlatBlobListing: true), x => ((CloudBlob)x).Delete()); Eleasar
Sim, você está certo, isso certamente seria uma opção mais segura. knightpfhor
3

sso a essa conta de armazenamento, poderá usar os comandos do HDFS na linha de comando;

hdfs dfs -rm -r wasbs://[email protected]_name.blob.core.windows.net/path_goes_here

O benefício real é que é improvável que o cluster diminua, e se você tiver tela sendo executada, você não perderá sua sessão enquanto você a exclui.

6

este é o link:http://www.cloudberrylab.com/free-microsoft-azure-explorer.aspx

você pode pesquisar no blob por uma extensão específica. selecione vários blobs e exclua-os

Ferramenta gratuita funciona perfeitamente para isso - muito útil - obrigado Dave Rael
4

o seguinte trecho de código irá ajudá-lo:

<code>for i in `az storage blob list -c "Container-name" --account-name "Storage-account-name" --account-key "Storage-account-access-key" --output table | awk {'print $1'} | sed '1,2d' | sed '/^$/d'`; do az storage blob delete --name $i -c "Container-name" --account-name "Storage-account-name" --account-key "Storage-account-access-key" --output table; done
</code>

Primeiro, ele busca a lista de blobs no contêiner e os exclui um por um.

13

Atualizar: A maneira mais fácil de fazer isso agora (em 2018) é usar a CLI do Azure. VerificaResposta de joanlofe :)

A maneira mais fácil de fazer isso em 2016 é usar o MicrosoftExplorador de armazenamento do Azure OMI

Faça o download do Azure Storage Explorer e instale-oEntre com a conta apropriada da MicrosoftNavegue até o contêiner que você deseja esvaziarClique no botão Selecionar tudoClique no botão Excluir

@pcdev use o CLI :) Vou atualizar minha resposta para adicionar um link para a resposta de joanlofe. gldraphael
Sim, essa é a resposta óbvia, no entanto, seria bom poder abrir uma interface gráfica para fazer uma tarefa como esta que eu provavelmente só faço uma vez a cada 18-24 meses, em vez de ter que procurar a resposta todas as vezes :) pcdev
O HOW é muito importante aqui - você tem que acertar mais até alcançar a última página de blobs e apertar select all. E então delete. Roberto Bonini
O Azure Storage Explorer é incrível, mas a exclusão de arquivos é lenta. Tente limpar um contêiner com mais de 100 mil arquivos - isso levará uma eternidade. absmiths
2

Combine Nuvem para excluir todos os blobs no seu contêiner do Azure.

Obrigado, realmente funciona. Pawan Agrawal
10

<code>az storage blob delete-batch --account-name <storage_account_name> --source <container_name>
</code>

Substituto<storage_account_name> e<container_name> pelos valores apropriados no seu caso.

Você pode ver a ajuda do comando executando:

<code>az storage blob delete-batch -h
</code>
Funcionou muito bem, depois que eu adicionei--account-key Ruud Helderman
Caso você veja este erro: "Esta operação não é permitida porque o blob tem instantâneos. ErrorCode: SnapshotsPresent", você pode querer adicionar esta opção:--delete-snapshots include Ruud Helderman
5

e sugerir que você verifiquehttp://msdn.microsoft.com/pt-br/library/windowsazure/dd179408.aspx para ver se a operação Excluir contêiner (O contêiner e quaisquer blobs contidos nele são excluídos posteriormente durante a coleta de lixo) poderia atender ao requisito.

O problema com essa abordagem é que o Webrole travaria se o contêiner não fosse encontrado antes de criar um novo com o mesmo nome. Néstor Sánchez A.
@knightpfhor é o que estou fazendo com o Azure Storage Explorer (da Neudesic). Mas, apesar de eu poder selecionar um grupo para excluir juntos, é muito lento. Néstor Sánchez A.
Respostas apenas de link são consideradas más respostas. Por favor, limpe isto ou delete. spender
Nesse caso, sua única outra opção é listar todos os itens no contêiner e excluí-los um de cada vez. knightpfhor
Nosso papel web não irá falhar a menos que deixemos uma exceção sem tratamento. Ao fazer qualquer coisa com armazenamento, por favor, coloque-o em um bloco try catch. Então, se algo der errado, podemos elegantemente recuperar nosso aplicativo. Nesse cenário específico, se o contêiner não existir, você pode pegar a exceção e continuar normalmente. Isso não afetará a lógica do seu aplicativo, pois seu objetivo é fazer com que o contêiner não exista. Ming Xu - MSFT

Perguntas relacionadas