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
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Nieuwste .NET SDK voor uw besturingssysteem. Zorg ervoor dat u de SDK en niet de runtime ophaalt.
Uw omgeving instellen
Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientbibliotheek voor .NET. De stappen omvatten pakketinstallatie, het toevoegen van using
instructies en het maken van een geautoriseerd clientobject. Zie Aan de slag met Azure Blob Storage en .NET voor meer informatie.
Pakketten installeren
Installeer vanuit uw projectmap pakketten voor de Azure Blob Storage- en Azure Identity-clientbibliotheken met behulp van de dotnet add package
opdracht. Het Azure.Identity-pakket is nodig voor verbindingen zonder wachtwoord met Azure-services.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Voeg using
-instructies toe
Voeg deze using
instructies toe aan het begin van het codebestand:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Voor sommige codevoorbeelden in dit artikel zijn mogelijk aanvullende using
instructies vereist.
Een clientobject maken
Als u een app wilt verbinden met Blob Storage, maakt u een exemplaar van BlobServiceClient. In het volgende voorbeeld ziet u hoe u een clientobject maakt met behulp van DefaultAzureCredential
autorisatie:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
U kunt een serviceclient registreren voor afhankelijkheidsinjectie in een .NET-app.
U kunt ook clientobjecten maken voor specifieke containers of blobs. Zie Clientobjecten maken en beheren die interactie hebben met gegevensbronnen voor meer informatie over het maken en beheren van clientobjecten.
Autorisatie
Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om te kunnen werken met blob-momentopnamen. Voor autorisatie met Microsoft Entra ID (aanbevolen) hebt u ingebouwde Azure RBAC-rol Opslagblobgegevensbijdrager of hoger nodig. Zie de autorisatierichtlijnen voor momentopnameblob 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.