Eliminación y restauración de un blob con .NET

Este artículo muestra cómo eliminar blobs usando la biblioteca cliente de Azure Storage para .NET y cómo restaurar blobs eliminados temporalmente durante el periodo de retención.

Requisitos previos

Configurar el entorno

Si no tiene un proyecto existente, esta sección le muestra cómo configurar un proyecto para que funcione con la biblioteca de clientes Azure Blob Storage para .NET. Los pasos incluyen la instalación del paquete, la adición de directivas using y la creación de un objeto cliente autorizado. Para más información, consulte Introducción a Azure Blob Storage y .NET.

Instalar paquetes

En el directorio del proyecto, instale los paquetes para las bibliotecas cliente de Azure Blob Storage y Azure Identity mediante el comando dotnet add package. El paquete Azure.Identity es necesario para las conexiones sin contraseña a los servicios de Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Agregue directivas using.

Agregue estas directivas using al principio del archivo de código:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Algunos ejemplos de código de este artículo pueden requerir directivas using adicionales.

Creación de un objeto de cliente

Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential para la autorización:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Puede registrar un cliente de servicio para la inserción de dependencias en una aplicación .NET.

También puede crear objetos de cliente para contenedores o blobs específicos. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.

Authorization

El mecanismo de autorización necesario debe tener permisos para eliminar un contenedor de blobs o para restaurar un contenedor eliminado temporalmente. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Eliminar blob (API de REST) y Anular la eliminación de Blob (API de REST).

Eliminar un blob

Nota:

Cuando la eliminación temporal de blobs está habilitada para una cuenta de almacenamiento, no puede realizar una eliminación permanente mediante métodos de biblioteca cliente. Usando los métodos de este artículo, un blob, una versión de blob o una instantánea eliminados de forma temporal permanecen disponibles hasta que expira el periodo de retención, momento en el que se eliminan de forma permanente. Para más información sobre la operación subyacente de la API de REST, consulte Eliminar blob (API de REST).

Para eliminar un blob, llame a cualquiera de los siguientes métodos:

En el ejemplo siguiente se elimina un blob:

public static async Task DeleteBlobAsync(BlobClient blob)
{
    await blob.DeleteAsync();
}

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:

public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
    // Delete a blob and all of its snapshots
    await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);

    // Delete only the blob's snapshots
    //await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}

Para eliminar solo las instantáneas y no el propio blob, puede pasar el parámetro DeleteSnapshotsOption.OnlySnapshots.

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 blobs eliminados cuando el control de versiones no está habilitado, llame a cualquiera de los métodos siguientes:

Estos métodos restauran los blobs eliminados temporalmente y las instantáneas eliminadas asociadas a ellos. Llamar a cualquiera de estos métodos para un blob que no se haya eliminado no surte ningún efecto. En el ejemplo siguiente se restauran todos los blobs eliminados temporalmente y sus instantáneas en un contenedor:

public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
    foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
    {
        await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
    }
}

Para restaurar una instantánea específica que se eliminara de manera temporal, primero llame a la operación Undelete o UndeleteAsync en el blob base y copie la instantánea deseada en el blob base. En el ejemplo siguiente se restaura un blob en bloques a la última instantánea generada:

public static async Task RestoreSnapshotsAsync(
    BlobContainerClient container,
    BlobClient blob)
{
    // Restore the deleted blob
    await blob.UndeleteAsync();

    // List blobs in this container that match prefix
    // Include snapshots in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Snapshots,
        prefix: blob.Name);

    // Get the URI for the most recent snapshot
    BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
    {
        Snapshot = blobItems
            .OrderByDescending(snapshot => snapshot.Snapshot)
            .ElementAtOrDefault(0)?.Snapshot
    };

    // Restore the most recent snapshot by copying it to the blob
    await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}

Restauración de blobs 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 cualquiera de los métodos siguientes:

El siguiente ejemplo de código muestra cómo obtener la última versión de un blob eliminado y restaurarla copiándola en el blob base:

public static void RestoreBlobWithVersioning(
    BlobContainerClient container,
    BlobClient blob)
{
    // List blobs in this container that match prefix
    // Include versions in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Version,
        prefix: blob.Name);

    // Get the URI for the most recent version
    BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
    {
        VersionId = blobItems.
            OrderByDescending(version => version.VersionId).
            ElementAtOrDefault(0)?.VersionId
    };

    // Restore the most recently generated version by copying it to the base blob
    blob.StartCopyFromUri(blobVersionUri.ToUri());
}

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 .NET, consulte los siguientes recursos.

Ejemplos de código

Operaciones de API REST

El SDK de Azure para .NET 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 .NET. Los métodos de la biblioteca cliente para eliminar blobs y restaurar blobs eliminados usan las siguientes operaciones de la API de REST:

Recursos de la biblioteca cliente

Vea también

  • Este artículo forma parte de la guía para desarrolladores de Blob Storage para .NET. Para obtener más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación .NET.