Creare e gestire uno snapshot BLOB in .NET

Uno snapshot è una versione di sola lettura di un BLOB eseguito in un determinato momento. Questo articolo illustra come creare e gestire gli snapshot BLOB usando la libreria client di Archiviazione di Azure per .NET.

Per altre informazioni sugli snapshot BLOB in Archiviazione di Azure, vedere Snapshot BLOB.

Prerequisiti

  • Questo articolo presuppone che sia già stato configurato un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per .NET. Per informazioni sulla configurazione del progetto, incluse l'installazione del pacchetto, l'aggiunta di direttive using e la creazione di un oggetto client autorizzato, consultare Introduzione ad Archiviazione BLOB di Azure e .NET.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per utilizzare gli snapshot BLOB. Per altre informazioni, vedere le indicazioni per l'autorizzazione per l'operazione API REST seguente:

Creare uno snapshot

Per creare uno snapshot di un BLOB in blocchi, usare uno dei metodi seguenti:

L'esempio di codice seguente mostra come creare uno snapshot. Includere un riferimento alla libreria Azure.Identity per usare le credenziali di Microsoft Entra per autorizzare le richieste al servizio. Per altre informazioni sull'uso della classe DefaultAzureCredential per autorizzare un'identità gestita ad accedere ad Archiviazione di Azure, vedere Libreria client di Identità di Azure per .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;
    }
}

Eliminare gli snapshot

Per eliminare un BLOB, è prima necessario eliminare tutti gli snapshot di tale BLOB. È possibile eliminare uno snapshot singolarmente o specificare di eliminare tutti gli snapshot quando si elimina il BLOB di origine. Se si tenta di eliminare un BLOB per il quale esistono ancora degli snapshot, viene restituito un errore.

Per eliminare un BLOB e i relativi snapshot, usare uno dei metodi seguenti e includere l'enumerazione DeleteSnapshotsOption:

L'esempio seguente illustra come eliminare un BLOB e i relativi snapshot in .NET, dove blobClient è un oggetto di tipo BlobClient:

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

Copiare uno snapshot BLOB nel BLOB di base

È possibile eseguire un'operazione di copia per alzare di livello uno snapshot nel relativo BLOB di base, purché il BLOB di base si trovi in un livello online (ad accesso frequente o sporadico). Lo snapshot viene mantenuto, ma la relativa destinazione viene sovrascritta con una copia che potrà essere letta e scritta.

L'esempio di codice seguente illustra come copiare uno snapshot BLOB nel BLOB di 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;
}

Risorse

Per altre informazioni su come gestire gli snapshot BLOB tramite la libreria client di Archiviazione BLOB di Azure per .NET, vedere le risorse seguenti.

Per esempi di codice correlati che usano SDK .NET della versione 11.x deprecata, vedere Esempi di codice con .NET versione 11.x.

Risorse per la libreria client

Vedi anche