Compartir vía


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

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 debe tener los permisos necesarios para trabajar con instantáneas de blob. 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 más información, vea la guía de autorización para Blob de instantáneas.

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