Creación y administración de una instantánea de blob con .NET

Una instantánea es una versión de solo lectura de un blob que se ha realizado en un momento dado. En este artículo se muestra cómo crear y administrar instantáneas de blob mediante la biblioteca cliente para .NET de Azure Storage.

Para obtener más información sobre las instantáneas de blob en Azure Storage, consulte Instantáneas de blobs.

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 .NET. Para obtener información sobre cómo configurar el proyecto, incluida la instalación de paquetes, la adición de directivas de using y la autorización de un objeto de cliente, consulte Introducción a Azure Blob Storage y .NET.
  • El mecanismo de autorización debe tener permisos para trabajar con etiquetas de índice de blobs. Para obtener más información, consulte la guía de autorización para la siguiente operación de la API de REST:

Crear una instantánea

Para crear una instantánea de un blob en bloques, use uno de los métodos siguientes:

En el ejemplo de código siguiente se muestra cómo crear una instantánea. Incluya una referencia a la biblioteca Azure.Identity para usar sus credenciales de Microsoft Entra para autorizar solicitudes al servicio. Para obtener más información sobre el uso de la clase DefaultAzureCredential para autorizar a una identidad administrada a acceder a Azure Storage, consulte Biblioteca cliente Azure Identity para .NET.

private static async Task CreateBlockBlobSnapshot(
    string accountName,
    string containerName, 
    string blobName,
    Stream data)
{
    const string blobServiceEndpointSuffix = ".blob.core.windows.net";
    Uri containerUri = 
        new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);

    // Get a container client object and create the container.
    BlobContainerClient containerClient = new BlobContainerClient(containerUri,
        new DefaultAzureCredential());
    await containerClient.CreateIfNotExistsAsync();

    // Get a blob client object.
    BlobClient blobClient = containerClient.GetBlobClient(blobName);

    try
    {
        // Upload text to create a block blob.
        await blobClient.UploadAsync(data);

        // Add blob metadata.
        IDictionary<string, string> metadata = new Dictionary<string, string>
        {
            { "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
            { "FileType", "text" }
        };
        await blobClient.SetMetadataAsync(metadata);

        // Sleep 5 seconds.
        System.Threading.Thread.Sleep(5000);

        // Create a snapshot of the base blob.
        // You can specify metadata at the time that the snapshot is created.
        // If no metadata is specified, then the blob's metadata is copied to the snapshot.
        await blobClient.CreateSnapshotAsync();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Eliminar instantáneas

Para eliminar un blob, primero debe eliminar todas las instantáneas de ese blob. Puede eliminar una instantánea individualmente o especificar que se eliminen todas las instantáneas cuando se elimina el blob de origen. Si intenta eliminar un blob que todavía tiene instantáneas, se producirá un error.

Para eliminar un blob y sus instantáneas, use uno de los siguientes métodos e incluya la enumeración DeleteSnapshotsOption:

En el ejemplo de código siguiente se muestra cómo eliminar un blob y sus instantáneas en. NET, donde blobClient es un objeto del tipo BlobClient:

await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);

Copia de una instantánea de blob sobre el blob base

Puede realizar una operación de copia para promover una instantánea a través de su blob base, siempre que el blob base esté en un nivel en línea (frecuente o esporádico). La instantánea se conserva, pero el destino se sobrescribe con una copia en la que se puede leer y escribir.

En el ejemplo de código siguiente se muestra cómo copiar una instantánea de blob sobre el blob base:

public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
    BlockBlobClient client,
    string snapshotTimestamp)
{
    // Instantiate BlockBlobClient with identical URI and add snapshot timestamp
    BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);

    // Restore the specified snapshot by copying it over the base blob
    await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);

    // Return the client object after the copy operation
    return client;
}

Recursos

Para más información sobre cómo administrar instantáneas de blob con la biblioteca cliente de Azure Blob Storage para .NET, consulte estos recursos.

Para obtener ejemplos de código relacionados con los SDK de .NET versión 11.x en desuso, consulte Ejemplos de código con la versión 11.x de .NET.

Recursos de la biblioteca cliente

Vea también