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
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Azure Storage-Konto – Erstellen eines Speicherkontos
- Neuestes .NET SDK für Ihr Betriebssystem. Laden Sie unbedingt das SDK und nicht die Runtime herunter.
Erstellen Ihrer Umgebung
Wenn Sie nicht über ein vorhandenes Projekt verfügen, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für .NET einrichten. Die Schritte umfassen die Paketinstallation, das Hinzufügen von using
-Anweisungen und das Erstellen eines autorisierten Clientobjekts. Ausführlichere Informationen finden Sie unter Erste Schritte mit Azure Blob Storage und .NET.
Installieren von Paketen
Installieren Sie in Ihrem Projektverzeichnis mithilfe des Befehls dotnet add package
Pakete für die Azure Blob Storage- und Azure Identity-Clientbibliotheken. Für kennwortlose Verbindungen mit Azure-Diensten wird das Azure.Identity-Paket benötigt.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Fügen Sie Anweisungen vom Typ using
hinzu.
Fügen Sie diese using
-Anweisungen am Anfang der Codedatei hinzu:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Einige Codebeispiele in diesem Artikel erfordern möglicherweise zusätzliche using
-Anweisungen.
Erstellen eines Clientobjekts
Um eine App mit Blob Storage zu verbinden, erstellen Sie eine Instanz von BlobServiceClient. Das folgende Beispiel zeigt, wie Sie ein Clientobjekt mithilfe von DefaultAzureCredential
für die Autorisierung erstellen:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
Sie können einen Dienstclient für die Abhängigkeitsinjektion in einer .NET-App registrieren.
Sie können auch Clientobjekte für bestimmte Container oder Blobs erstellen. Weitere Informationen zum Erstellen und Verwalten von Clientobjekten finden Sie unter Erstellen und Verwalten von Clientobjekten, die mit Datenressourcen interagieren.
Autorisierung
Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Arbeiten mit Blob-Snapshots verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Mitwirkender an Storage-Blobdaten. Weitere Informationen finden Sie im Autorisierungsleitfaden für Snapshot Blob.
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.