Erstellen und Verwalten einer Blobmomentaufnahme mit .NET

Eine Momentaufnahme ist eine schreibgeschützte Version eines Blobs, die zu einem bestimmten Zeitpunkt erstellt wird. In diesem Artikel wird die Erstellung und Verwaltung von Blobmomentaufnahmen unter Verwendung der Azure Storage-Clientbibliothek für .NET beschrieben.

Weitere Informationen zu Blobmomentaufnahmen in Azure Storage finden Sie unter Blobmomentaufnahmen.

Voraussetzungen

  • In diesem Artikel wird davon ausgegangen, dass Sie bereits ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für .NET eingerichtet haben. Informationen zum Einrichten Ihres Projekts – einschließlich Paketinstallation, Hinzufügen von using-Anweisungen und Erstellen eines autorisierten Clientobjekts – finden Sie unter Erste Schritte mit Azure Blob Storage und .NET.
  • Der Autorisierungsmechanismus muss über Berechtigungen zum Arbeiten mit Blobmomentaufnahmen verfügen. Weitere Informationen finden Sie im Autorisierungsleitfaden für die folgenden REST-API-Vorgänge:

Erstellen einer Momentaufnahme

Verwenden Sie eine der folgenden Methoden, um eine Momentaufnahme eines Blockblobs zu erstellen:

Das folgende Codebeispiel zeigt, wie Sie eine Momentaufnahme erstellen. Schließen Sie einen Verweis auf die Azure.Identity-Bibliothek ein, um Ihre Microsoft Entra-Anmeldeinformationen zu verwenden, um Anforderungen an den Dienst zu autorisieren. Weitere Informationen zur Verwendung der Klasse DefaultAzureCredential zum Autorisieren einer verwalteten Identität für den Zugriff auf Azure Storage finden Sie unter Azure Identity-Clientbibliothek für .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;
    }
}

Löschen von Momentaufnahmen

Wenn Sie ein Blob löschen möchten, müssen Sie zunächst alle Momentaufnahmen dieses Blobs löschen. Sie können eine Momentaufnahme einzeln löschen oder angeben, dass alle Momentaufnahmen gelöscht werden sollen, wenn das Quellblob gelöscht wird. Wenn Sie versuchen, ein Blob zu löschen, für das noch Momentaufnahmen vorhanden sind, tritt ein Fehler auf.

Um einen Blob und seine Momentaufnahmen zu löschen, verwenden Sie eine der folgenden Methoden und fügen die Enumeration DeleteSnapshotsOption hinzu:

Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein Blob und die zugehörigen Momentaufnahmen in .NET löschen, wenn blobClient ein Objekt vom Typ BlobClient ist:

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

Kopieren einer Blob-Momentaufnahme über den Basis-Blob

Sie können einen Kopiervorgang durchführen, um eine Momentaufnahme über ihren Basis-Blob zu verschieben, solange sich der Basis-Blob in einer Online-Ebene (heiß oder kalt) befindet. Die Momentaufnahme bleibt erhalten, aber ihr Ziel wird mit einer Kopie überschrieben, die gelesen und beschrieben werden kann.

Das folgende Codebeispiel zeigt, wie man eine Blob-Momentaufnahme über den Basis-Blob kopiert:

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

Ressourcen

Weitere Informationen zur Verwaltung von Blob-Momentaufnahmen mit der Azure Blob Storage Client-Bibliothek für .NET finden Sie in den folgenden Ressourcen.

Verwandte Code-Beispiele mithilfe veralteter SDKs der .NET-Version 11.x finden Sie unter Code-Beispiele mithilfe der .NET-Version 11.x.

Ressourcen zur Clientbibliothek

Siehe auch