Comparteix a través de


Eliminación y restauración de un blob con Python

En este artículo se muestra cómo eliminar blobs con la biblioteca de clientes de Azure Storage de Python. Si ha habilitado la eliminación temporal de blobs, puede restaurar los blobs eliminados durante el período de retención.

Para obtener información sobre cómo eliminar un blob mediante API asincrónicas, consulte Eliminación de un blob de forma asincrónica.

Requisitos previos

  • En este artículo se supone que ya tiene un proyecto configurado para trabajar con la biblioteca cliente de Azure Blob Storage para Python. Para obtener información sobre cómo configurar el proyecto, incluida la instalación de paquetes, la adición de directivas de import y la autorización de un objeto de cliente, consulte Introducción a Azure Storage y Java.
  • Para usar API asincrónicas en el código, consulte los requisitos de la sección Programación asincrónica.
  • El mecanismo de autorización debe tener permisos para eliminar un contenedor de blobs o para restaurar un contenedor eliminado temporalmente. Para obtener más información, consulte la guía de autorización para las siguientes operaciones de la API de REST:

Eliminar un blob

Para eliminar un blob, llame al método siguiente:

En el ejemplo siguiente se elimina un 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()

Si el blob tiene instantáneas asociadas, debe eliminar todas sus instantáneas para eliminar el blob. En el ejemplo siguiente se elimina un blob y sus instantáneas:

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 eliminar solo las instantáneas y no el propio blob, puede pasar el parámetro delete_snapshots="only".

Restauración de un blob eliminado

La eliminación temporal de blobs protege a cada uno de los blobs y sus versiones, instantáneas y metadatos de errores accidentales al borrar o sobrescribir los datos, ya que conserva en el sistema los datos eliminados durante el período de tiempo que se especifique. Durante este período de retención, los blobs pueden restaurarse a su estado original. Una vez vencido el período de retención especificado, el blob se elimina permanentemente. Para más información sobre la eliminación temporal, consulte este artículo sobre la eliminación temporal de blobs.

Puede usar las bibliotecas cliente de Azure Storage para restaurar un blob o una instantánea eliminados temporalmente.

La forma en que restaura un blob eliminado temporalmente depende de si la cuenta de almacenamiento tiene habilitado el control de versiones de blobs. Para más información sobre el control de versiones de blobs, consulte Control de versiones de blobs. Consulte una de las secciones siguientes en función de su escenario:

Restauración de objetos eliminados temporalmente cuando el control de versiones está deshabilitado

Para restaurar los blobs eliminados cuando el control de versiones está desactivado, llame al método siguiente:

Este método restaura el contenido y los metadatos de un blob eliminado temporalmente y las instantáneas asociadas eliminadas temporalmente. La llamada a este método para un blob que no se haya eliminado no tiene ningún efecto.

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()

Restauración de objetos eliminados temporalmente cuando el control de versiones está habilitado

Si una cuenta de almacenamiento está configurada para habilitar el control de versiones de blob, la eliminación de un blob hace que la versión actual del blob se convierta en la versión anterior. Para restaurar un blob eliminado temporalmente cuando el control de versiones está habilitado, copie una versión anterior en el blob base. Puede usar el método siguiente:

El siguiente ejemplo de código obtiene la última versión de un blob eliminado y la restaura copiándola en el 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)

Eliminación de un blob de forma asincrónica

La biblioteca cliente de Azure Blob Storage para Python admite la eliminación de un blob de forma asincrónica. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.

Siga estos pasos para eliminar un blob mediante API asincrónicas:

  1. Agregue las siguientes instrucciones import:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Agregue código para ejecutar el programa mediante asyncio.run. Esta función ejecuta la corrutina pasada, main() en nuestro ejemplo, y administra el bucle de eventos asyncio. Las corrutinas se declaran con la sintaxis async/await. En este ejemplo, la corrutina main() crea primero el nivel superior BlobServiceClient mediante async with y, a continuación, llama al método que elimina el blob. Tenga en cuenta que solo el cliente de nivel superior debe usar async with, ya que otros clientes creados a partir de él comparten el mismo grupo de conexiones.

    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. Agregue código para eliminar el blob. El código es el mismo que el ejemplo sincrónico, salvo que el método se declara con la palabra clave async y la palabra clave await se usa al llamar al método delete_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()
    

Con esta configuración básica, puede implementar otros ejemplos de este artículo como corrutinas mediante la sintaxis async/await.

Recursos

Para obtener más información sobre cómo eliminar blobs y restaurar blobs eliminados usando la biblioteca cliente de Azure Blob Storage para Python, consulte los siguientes recursos.

Operaciones de API REST

El SDK de Azure para Python contiene bibliotecas que se crean a partir de la API de REST de Azure, lo que le permite interactuar con las operaciones de API de REST a través de paradigmas conocidos de Python. Los métodos de la biblioteca cliente para eliminar blobs y restaurar blobs eliminados usan las siguientes operaciones de la API de REST:

Ejemplos de código

Recursos de la biblioteca cliente

Consulta también