Excluir e restaurar um blob com Python
Este artigo mostra como excluir blobs usando a Biblioteca de clientes do Armazenamento do Azure para Python e como restaurar os blobs de exclusão reversível durante o período de retenção.
Para saber mais sobre como excluir um blob usando APIs assíncronas, confira Excluir um blob de maneira assíncrona.
Pré-requisitos
- Assinatura do Azure - criar uma gratuitamente
- Conta de armazenamento do Azure – criar uma conta de armazenamento
- Python 3.8+
Configure seu ambiente
Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para funcionar com a biblioteca de clientes do Armazenamento de Blobs do Azure para Python. Para obter mais detalhes, confira Introdução ao Armazenamento de Blobs do Azure e ao Python.
Para trabalhar com os exemplos de código neste artigo, siga estas etapas para configurar seu projeto.
Instalar Pacotes
Instale os seguintes pacotes por meio de pip install
:
pip install azure-storage-blob azure-identity
Adicionar instruções de importação
Adicione as seguintes declarações de import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Autorização
O mecanismo de autorização deve ter as permissões necessárias para excluir um blob ou restaurar blob excluído temporariamente. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna de Colaborador de Dados de Blob de Armazenamento ou superior do RBAC do Azure. Para saber mais, consulte as diretrizes de autorização para Excluir blob (API REST) e Desfazer exclusão do blob (API REST).
Criar um objeto cliente
Para conectar um aplicativo ao Armazenamento de Blobs, crie uma instância do BlobServiceClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential
para autorização:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Você também pode criar objetos cliente para contêineres ou blobs específicos, diretamente ou do objeto BlobServiceClient
. Para saber mais sobre como criar e gerenciar objetos clientes, confira Criar e gerenciar objetos clientes que interagem com recursos de dados.
Excluir um blob
Observação
Quando a exclusão temporária de blobs estiver habilitada em uma conta de armazenamento, não será possível executar uma exclusão permanente usando os métodos da biblioteca do cliente. Usando os métodos deste artigo, um blob, uma versão de blob ou um instantâneo com exclusão temporária permanece disponível até que o período de retenção expire, momento este em que é excluído permanentemente. Para saber mais sobre a operação da API REST subjacente, consulte Excluir Blob (API REST).
Para excluir um blob, chame o seguinte método:
O seguinte exemplo exclui um blob:
def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob()
Se o blob tiver instantâneos associados, você deverá excluir todos os seus instantâneos para excluir o blob. O exemplo a seguir exclui um blob e seus instantâneos:
def delete_blob_snapshots(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob(delete_snapshots="include")
Para excluir apenas os instantâneos e não o blob em si, passe o parâmetro delete_snapshots="only"
.
Restaurar um blob excluído
A exclusão reversível de blobs protege um blob individual e suas versões, instantâneos e metadados de exclusões ou substituições acidentais, mantendo os dados excluídos no sistema por um período de tempo especificado. Durante o período de retenção, você pode restaurar o blob para seu estado na exclusão. Depois que o período de retenção expirar, o blob será excluído permanentemente. Para obter mais informações sobre a exclusão reversível de blobs, consulte Exclusão reversível de blobs.
Você pode usar as bibliotecas clientes de armazenamento do Azure para restaurar um blob ou instantâneo excluído de maneira reversível.
A forma como você restaura um blob com exclusão temporária depende de sua conta de armazenamento ter ou não o controle de versão de blob habilitado. Para obter mais informações sobre o controle de versão de blob, consulte Controle de versão de blob. Confira uma das seguintes seções dependendo de seu cenário:
Restaurar objetos excluídos de maneira reversível quando o controle de versão estiver desabilitado
Para restaurar os blobs excluídos quando o controle de versão não estiver habilitado, chame um dos seguintes métodos:
Esse método restaura o conteúdo e os metadados de um blob exlcluído temporariamente e todos os instantâneos excluídos temporariamente associados. Chamar este método em um blob que não foi excluído não tem efeito.
def restore_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.undelete_blob()
Restaurar objetos excluídos temporariamente quando o controle de versão está habilitado
Se uma conta de armazenamento estiver configurada para habilitar o controle de versão do blob, excluir um blob fará com que a versão atual do blob se torne a versão anterior. Para restaurar um blob com exclusão temporária quando o controle de versão estiver habilitado, copie uma versão anterior sobre o blob base. Você pode usar o seguinte método:
O exemplo de código a seguir obtém a versão mais recente de um blob excluído e restaura a versão mais recente copiando-a para o blob de base:
def restore_blob_version(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
container_client = blob_service_client.get_container_client(container=container_name)
# Get a reference to the soft-deleted base blob and list all the blob versions
blob_client = container_client.get_blob_client(blob=blob_name)
blob_list = container_client.list_blobs(name_starts_with=blob_name, include=['deleted','versions'])
blob_versions = []
for blob in blob_list:
blob_versions.append(blob.version_id)
# Get the latest version of the soft-deleted blob
blob_versions.sort(reverse=True)
latest_version = blob_versions[0]
# Build the blob URI and add the version ID as a query string
versioned_blob_url = f"{blob_client.url}?versionId={latest_version}"
# Restore the latest version by copying it to the base blob
blob_client.start_copy_from_url(versioned_blob_url)
Excluir um blob de maneira assíncrona
A biblioteca de clientes do Armazenamento de Blobs do Azure para Python dá suporte à exclusão assíncrona de blobs. Para saber mais sobre os requisitos de instalação do projeto, confira Programação assíncrona.
Siga estas etapas para excluir um blob usando APIs assíncronas:
Adicione as seguintes instruções de importação:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Adicione o código para executar o programa usando
asyncio.run
. Essa função executa a corrotina passada,main()
no nosso exemplo, e gerencia o loop de eventosasyncio
. As corrotinas são declaradas com a sintaxe async/await. Neste exemplo, a corrotinamain()
primeiro cria oBlobServiceClient
de nível superior usandoasync with
e, em seguida, chama o método que exclui o blob. Observe que somente o cliente de nível superior precisa usarasync with
, pois os outros clientes criados a partir dele compartilham o mesmo pool de conexões.async def main(): sample = BlobSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.delete_blob(blob_service_client, "sample-container", "sample-blob.txt") if __name__ == '__main__': asyncio.run(main())
Adicione o código para excluir o blob. O código é igual ao exemplo síncrono, exceto que o método é declarado com a palavra-chave
async
e a palavra-chaveawait
é usada ao chamar o métododelete_blob
.async def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str): blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name) await blob_client.delete_blob()
Com essa configuração básica em vigor, você pode implementar outros exemplos neste artigo como corrotinas usando sintaxe a async/await.
Recursos
Para saber mais sobre como excluir blobs e restaurar blobs excluídos temporariamente usando a biblioteca de clientes do Armazenamento de Blobs do Azure para Python, confira os recursos a seguir.
Exemplos de código
- Exibir exemplos de código síncrono ou assíncrono deste artigo (GitHub)
Operações da API REST
O SDK do Azure para Python contém bibliotecas que se baseiam na API REST do Azure, permitindo a interação com as operações da API REST por meio de paradigmas conhecidos do Python. Os métodos da biblioteca de clientes para exclusão de blobs e restauração de blobs excluídos usam as seguintes operações da API REST:
- Excluir um blob (API REST)
- Reverter a exclusão de um blob (API REST)
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (PyPi)
Confira também
Conteúdo relacionado
- Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para Python. Para saber mais, veja a lista completa de artigos do guia do desenvolvedor em Criar seu aplicativo Python.