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. Se você tiver habilitado a exclusão suave para blobs, poderá restaurá-los excluídos 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

  • Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para Python. Para saber mais sobre como configurar seu projeto, incluindo instalação de pacote, adição de import instruções e criação de um objeto de cliente autorizado, consulte Introdução ao Armazenamento de Blob do Azure e Python.
  • Para usar APIs assíncronas em seu código, consulte os requisitos na seção Programação assíncrona.
  • O mecanismo de autorização deve ter permissões para excluir um blob ou para restaurar um blob excluído suavemente. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:

Eliminar um blob

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 usando a biblioteca de cliente do Armazenamento de Blobs do Azure para Python, consulte os recursos a seguir.

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:

Amostras de código

Recursos da biblioteca do cliente

Consulte também