Partilhar via


Excluir e restaurar um blob com Python

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

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), você precisa da função interna do RBAC do Azure RBAC Storage Blob Data Contributor 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 exclusão suave de blob está habilitada para uma conta de armazenamento, você não pode executar uma exclusão permanente usando métodos de biblioteca de cliente. Usando os métodos neste artigo, um blob, uma versão de blob ou instantâneo excluído suavemente permanece disponível até que o período de retenção expire, momento em que é excluído 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 recuperável de blobs protege um blob individual e as respetivas versões, instantâneos e metadados contra eliminações ou substituições acidentais, mantendo 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.

Você pode usar as bibliotecas de cliente do Armazenamento do Azure para restaurar um blob ou instantâneo excluído por software.

A forma como você restaura um blob excluído depende se sua conta de armazenamento tem ou não o controle de versão de blob habilitado. 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:

Esse método restaura o conteúdo e os metadados de um blob excluído suavemente e quaisquer instantâneos excluídos por software 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:

  1. Adicione as seguintes instruções de importação:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Adicione código para executar o programa usando asyncio.runo . Essa função executa a co-rotina passada, main() em nosso exemplo, e gerencia o loop de asyncio eventos. As co-rotinas são declaradas com a sintaxe async/await. Neste exemplo, a main() co-rotina primeiro cria o nível BlobServiceClient superior usando async withe, em seguida, chama o método que exclui o blob. Observe que apenas o cliente de nível superior precisa usar async witho , 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())
    
  3. Adicione código para excluir o blob. O código é o mesmo que o exemplo síncrono, exceto que o método é declarado com a async palavra-chave e a await palavra-chave é usada ao chamar o delete_blob mé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

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:

Recursos da biblioteca do cliente

Consulte também

  • 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.