Eliminación y restauración de un contenedor de blobs con Python

En este artículo se muestra cómo eliminar contenedores con la biblioteca cliente de Azure Storage para Python. Si ha habilitado la eliminación temporal de contenedores, puede restaurar los contenedores eliminados.

Para más información sobre cómo eliminar un contenedor de blobs mediante API asincrónicas, consulte Eliminación de un contenedor 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.
  • 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:

Eliminación de un contenedor

Para eliminar un contenedor en Python, use el método siguiente a partir de la clase BlobServiceClient:

También puede eliminar un contenedor mediante el método siguiente a partir de la clase ContainerClient:

Después de eliminar un contenedor, no se puede crear otro con el mismo nombre durante al menos 30 segundos. Un intento de crear un contenedor con el mismo nombre producirá un error con el código de error de HTTP 409 (Conflict). Cualquier otra operación en el contenedor o en los blobs que contiene producirá un error con el código de error HTTP 404 (Not Found).

El siguiente ejemplo utiliz un objeto BlobServiceClient para eliminar el contenedor especificado.

def delete_container(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)
    container_client.delete_container()

En el ejemplo siguiente se muestra cómo eliminar todos los contenedores que comienzan con un prefijo especificado.

def delete_container_prefix(self, blob_service_client: BlobServiceClient):
    container_list = list(blob_service_client.list_containers(name_starts_with="test-"))
    assert len(container_list) >= 1

    for container in container_list:
        # Find containers with the specified prefix and delete
        container_client = blob_service_client.get_container_client(container=container.name)
        container_client.delete_container()

Restauración de un contenedor eliminado

Cuando la eliminación temporal de contenedores está habilitada para una cuenta de almacenamiento, un contenedor y su contenido se pueden recuperar dentro de un período de retención especificado. Para obtener información sobre cómo habilitar la eliminación temporal de contenedores, consulte Habilitación y administración de la eliminación temporal de contenedores. Puede restaurar un contenedor eliminado temporalmente llamando a cualquiera de los métodos siguientes de la clase BlobServiceClient:

En el ejemplo siguiente se busca un contenedor eliminado, se obtiene la versión de ese contenedor eliminado y, a continuación, se pasa la versión al método undelete_container para restaurar el contenedor.

def restore_deleted_container(self, blob_service_client: BlobServiceClient, container_name):
    container_list = list(
        blob_service_client.list_containers(include_deleted=True))
    assert len(container_list) >= 1

    for container in container_list:
        # Find the deleted container and restore it
        if container.deleted and container.name == container_name:
            restored_container_client = blob_service_client.undelete_container(
                deleted_container_name=container.name, deleted_container_version=container.version)

Creación de un contenedor de forma asincrónica

La biblioteca cliente de Azure Blob Storage para Python admite la creación de un contenedor de blobs 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 crear un contenedor 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 contenedor. 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 = ContainerSamples()
    
        # 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_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Agregue código para eliminar el contenedor. 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_container.

    async def delete_container(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
        await container_client.delete_container()
    

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

Recursos

Para más información sobre cómo eliminar un contenedor con la biblioteca cliente de Azure Blob Storage para Python, consulte los recursos siguientes.

Operaciones de API REST

El SDK de Azure para Python contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de Python. Los métodos de la biblioteca cliente para eliminar o restaurar un contenedor usan esta operación de API REST:

Ejemplos de código

Recursos de la biblioteca cliente

Consulte también