Een blobmomentopname maken en beheren met .NET

Een momentopname is een alleen-lezen versie van een blob die op een bepaald moment wordt gemaakt. In dit artikel wordt beschreven hoe u blob-momentopnamen maakt en beheert met behulp van de Azure Storage-clientbibliotheek voor .NET.

Zie Blob-momentopnamen voor meer informatie over blobmomentopnamen in Azure Storage.

Vereisten

  • In dit artikel wordt ervan uitgegaan dat u al een project hebt ingesteld voor gebruik met de Azure Blob Storage-clientbibliotheek voor .NET. Zie Aan de slag met Azure Blob Storage en .NET voor meer informatie over het instellen van uw project, inclusief pakketinstallatie, het toevoegen van using instructies en het maken van een geautoriseerd clientobject.
  • Het autorisatiemechanisme moet machtigingen hebben om te kunnen werken met blob-momentopnamen. Zie de autorisatierichtlijnen voor de volgende REST API-bewerking voor meer informatie:

Een momentopname maken

Gebruik een van de volgende methoden om een momentopname van een blok-blob te maken:

In het volgende codevoorbeeld ziet u hoe u een momentopname maakt. Neem een verwijzing op naar de Azure.Identity-bibliotheek om uw Microsoft Entra-referenties te gebruiken om aanvragen voor de service te autoriseren. Zie de Azure Identity-clientbibliotheek voor .NET voor meer informatie over het gebruik van de klasse DefaultAzureCredential om een beheerde identiteit te autoriseren voor toegang tot Azure Storage.

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;
    }
}

Momentopnamen verwijderen

Als u een blob wilt verwijderen, moet u eerst eventuele momentopnamen van die blob verwijderen. U kunt een momentopname afzonderlijk verwijderen of opgeven dat alle momentopnamen worden verwijderd wanneer de bron-blob wordt verwijderd. Als u probeert een blob te verwijderen die nog steeds momentopnamen bevat, treedt er een fout op.

Als u een blob en de bijbehorende momentopnamen wilt verwijderen, gebruikt u een van de volgende methoden en neemt u de enum DeleteSnapshotsOption op:

In het volgende codevoorbeeld ziet u hoe u een blob en de bijbehorende momentopnamen in .NET verwijdert, waarbij blobClient een object van het type BlobClient is:

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

Een momentopname van een blob kopiƫren over de basis-blob

U kunt een kopieerbewerking uitvoeren om een momentopname te promoten via de basis-blob, zolang de basis-blob zich in een onlinelaag bevindt (dynamisch of statisch). De momentopname blijft behouden, maar de bestemming wordt overschreven met een kopie waarnaar kan worden gelezen en geschreven.

In het volgende codevoorbeeld ziet u hoe u een blob-momentopname kopieert via de basis-blob:

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;
}

Resources

Zie de volgende resources voor meer informatie over het beheren van blobmomentopnamen met behulp van de Azure Blob Storage-clientbibliotheek voor .NET.

Zie Codevoorbeelden met .NET-versie 11.x voor gerelateerde codevoorbeelden met .NET-versie 11.x.

Clientbibliotheekbronnen

Zie ook