Créer et gérer un instantané blob avec .NET

Un instantané est une version en lecture seule d'un objet blob capturé à un instant donné. Cet article explique comment créer ou gérer des instantanés blob à l’aide de la bibliothèque de client de Stockage Azure pour .NET.

Pour plus d’informations sur les instantanés d’objet blob dans le Stockage Azure, consultez Instantanés d’objet blob.

Prérequis

  • Cet article suppose que vous disposez déjà d'un projet configuré pour fonctionner avec la bibliothèque client Azure Blob Storage pour .NET. Pour en savoir plus sur la configuration de votre projet, y compris l’installation du package, l’ajout de directives using et la création d’un objet client autorisé, consultez Bien démarrer avec Stockage Blob Azure et .NET.
  • Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour utiliser des instantanés d’objets blob. Pour en savoir plus, consultez les conseils d’autorisation pour l’opération d’API REST suivante :

Créer un instantané

Pour créer un instantané d’un objet blob de blocs, utilisez l’une des méthodes suivantes :

L’exemple de code suivant montre comment créer un instantané. Incluez une référence à la bibliothèque Azure.Identity pour utiliser vos informations d’identification Microsoft Entra pour autoriser les requêtes au service. Pour plus d’informations sur l’utilisation de la classe DefaultAzureCredential pour autoriser une identité managée à accéder au Stockage Azure, consultez Bibliothèque de client d’identité Azure pour .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;
    }
}

Suppression d'instantanés

Pour supprimer un blob, vous devez d’abord supprimer tous les instantanés de ce blob. Vous pouvez supprimer un instantané individuellement, ou spécifier que tous les instantanés doivent être supprimés lors de la suppression de l’objet blob source. Si vous essayez de supprimer un objet blob auquel des instantanés sont encore associés, une erreur se produit.

Pour supprimer un blob et ces instantanés, utilisez l’une des méthodes suivantes et incluez l’énumération DeleteSnapshotsOption :

L’exemple de code suivant montre comment supprimer un objet blob et ses instantanés dans .NET, où blobClient est un objet de type BlobClient :

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

Copier un instantané d’objet blob sur l’objet blob de base

Vous pouvez effectuer une opération de copie pour promouvoir un instantané par rapport son objet blob de base, tant que l’objet blob de base se trouve dans un niveau en ligne (chaud ou froid). L’instantané est conservé, mais sa destination est remplacée par une copie qui peut être lue et par-dessus laquelle on peut écrire.

L’exemple de code suivant montre comment copier un instantané d’objet blob sur l’objet blob de 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;
}

Ressources

Pour en savoir plus sur la gestion des instantanés d’objets blob à l’aide de la bibliothèque de client du Stockage Blob Azure pour .NET, consultez les ressources suivantes.

Pour obtenir des exemples de code associés utilisant des Kits de développement logiciel (SDK) .NET version 11.x dépréciés, consultez l’article Exemples de code utilisant .NET version 11.x.

Ressources de bibliothèque cliente

Voir aussi