Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo mostra como excluir blobs usando a biblioteca de cliente do Armazenamento do Azure para Python e como restaurar blobs excluídos por software durante o período de retenção.
Para saber mais sobre como excluir um blob usando APIs assíncronas, consulte Excluir um blob de forma assíncrona.
Pré-requisitos
- Subscrição do Azure - crie uma gratuitamente
- Conta de armazenamento do Azure - criar uma conta de armazenamento
- Python 3.8+
Configurar o ambiente
Se você não tiver um projeto existente, esta seção mostra como configurar um projeto para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para Python. Para obter mais detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e Python.
Para trabalhar com os exemplos de código neste artigo, siga estas etapas para configurar seu projeto.
Instalar pacotes
Instale os seguintes pacotes usando pip install:
pip install azure-storage-blob azure-identity
Adicionar instruções de importação
Adicione as seguintes instruções 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 para restaurar um blob excluído suavemente. Para autorização com o Microsoft Entra ID (recomendado), necessita da função Storage Blob Data Contributor do RBAC do Azure ou superior. Para saber mais, consulte as diretrizes de autorização para Excluir Blob (API REST) e Undelete Blob (API REST).
Criar um objeto cliente
Para conectar um aplicativo ao Armazenamento de Blob, crie uma instância de 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 de cliente para contêineres ou blobs específicos, diretamente ou a partir do BlobServiceClient objeto. Para saber mais sobre como criar e gerenciar objetos de cliente, consulte Criar e gerenciar objetos de cliente que interagem com recursos de dados.
Eliminar um blob
Nota
Quando a eliminação suave de blobs está ativada para uma conta de armazenamento, não se pode executar uma eliminação permanente usando métodos da biblioteca de cliente. Usando os métodos neste artigo, um blob, uma versão de blob ou um instantâneo suavemente excluído permanece disponível até que o período de retenção expire, a partir do qual é eliminado permanentemente. Para saber mais sobre a operação subjacente da API REST, consulte Excluir Blob (API REST).
Para excluir um blob, chame o seguinte método:
O exemplo a seguir 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, você pode passar o parâmetro delete_snapshots="only".
Restaurar um blob excluído
A eliminação suave de blobs protege um blob individual e as respetivas versões, instantâneos e metadados contra eliminações ou substituições acidentais, mantendo temporariamente os dados eliminados no sistema durante um período de tempo especificado. Durante o período de retenção, pode restaurar o blob para o estado em que estava no momento da eliminação. Quando o período de retenção expirar, o blob será eliminado permanentemente. Para obter mais informações sobre exclusão suave de blob, consulte Exclusão suave para blobs.
Pode utilizar as bibliotecas de cliente do Armazenamento do Azure para restaurar um blob ou instantâneo removido suavemente.
A forma como tu restauras um blob suavemente excluído depende se a tua conta de armazenamento tem ou não o versionamento de blobs ativado. Para obter mais informações sobre controle de versão de blob, consulte Controle de versão de Blob. Consulte uma das seguintes seções, dependendo do seu cenário:
Restaurar objetos excluídos por software quando o controle de versão estiver desativado
Para restaurar blobs excluídos quando o controle de versão estiver desabilitado, chame o seguinte método:
- BlobClient.undelete_blob (função para recuperar blobs excluídos)
Esse método restaura o conteúdo e os metadados de um blob excluído temporariamente e quaisquer instantâneos excluídos temporariamente associados. Chamar esse método para 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 por software quando o controle de versão estiver habilitado
Se uma conta de armazenamento estiver configurada para habilitar o controle de versão de blob, excluir um blob fará com que a versão atual do blob se torne a versão anterior. Para restaurar um blob excluído suavemente 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 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 forma assíncrona
A biblioteca de cliente do Armazenamento de Blobs do Azure para Python dá suporte à exclusão de um blob de forma assíncrona. Para saber mais sobre os requisitos de configuração do projeto, consulte 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 BlobServiceClientAdicione 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, amain()corrotina cria primeiro o nível superiorBlobServiceClientusandoasync with, e, em seguida, chama o método que elimina o blob. Observe que apenas o cliente de nível superior precisa usarasync with, pois 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 código para eliminar o blob. O código é o mesmo que o exemplo síncrono, exceto que o método é declarado com a
asyncpalavra-chave e aawaitpalavra-chave é usada ao chamar odelete_blobmétodo.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 co-rotinas usando a sintaxe async/await.
Recursos
Para saber mais sobre como excluir blobs e restaurar blobs excluídos por software usando a biblioteca de cliente do Armazenamento de Blobs do Azure para Python, consulte os recursos a seguir.
Amostras 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 que você interaja com operações da API REST por meio de paradigmas Python familiares. Os métodos da biblioteca de cliente para excluir blobs e restaurar blobs excluídos usam as seguintes operações da API REST:
- Excluir Blob (API REST)
- Recuperar Blob (API REST)
Recursos da biblioteca do cliente
Consulte também
Conteúdos relacionados
- Este artigo faz parte do guia do desenvolvedor do Blob Storage para Python. Para saber mais, consulte a lista completa de artigos do guia do desenvolvedor em Build your Python app.