Criar e gerenciar um instantâneo de blob com o .NET
Um instantâneo é uma versão somente leitura de um blob que é tirado em um determinado momento. Este artigo mostra como criar e gerenciar instantâneos de blob usando a biblioteca de cliente do Armazenamento do Azure para .NET.
Para obter mais informações sobre instantâneos de blob no Armazenamento do Azure, consulte Instantâneos de blob.
Pré-requisitos
- Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para .NET. Para saber mais sobre como configurar seu projeto, incluindo a instalação de pacotes, adicionar
using
diretivas e criar um objeto de cliente autorizado, consulte Introdução ao Armazenamento de Blobs do Azure e ao .NET. - O mecanismo de autorização deve ter permissões para trabalhar com instantâneos de blob. Para saber mais, consulte as diretrizes de autorização para a seguinte operação da API REST:
Criar um instantâneo
Para criar um instantâneo de um blob de bloco, use um dos seguintes métodos:
O exemplo de código a seguir mostra como criar um instantâneo. Inclua uma referência à biblioteca Azure.Identity para usar suas credenciais do Microsoft Entra para autorizar solicitações ao serviço. Para obter mais informações sobre como usar a classe DefaultAzureCredential para autorizar uma identidade gerenciada para acessar o Armazenamento do Azure, consulte Biblioteca de cliente do Azure Identity para .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;
}
}
Excluir instantâneos
Para excluir um blob, você deve primeiro excluir todos os instantâneos desse blob. Você pode excluir um instantâneo individualmente ou especificar que todos os instantâneos sejam excluídos quando o blob de origem for excluído. Se você tentar excluir um blob que ainda tenha instantâneos, ocorrerá um erro.
Para excluir um blob e seus instantâneos, use um dos seguintes métodos e inclua o enum DeleteSnapshotsOption :
O exemplo de código a seguir mostra como excluir um blob e seus instantâneos no .NET, onde blobClient
é um objeto do tipo BlobClient:
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
Copiar um instantâneo de blob sobre o blob base
Você pode executar uma operação de cópia para promover um instantâneo sobre seu blob base, desde que o blob base esteja em uma camada online (quente ou legal). O instantâneo permanece, mas seu destino é substituído por uma cópia que pode ser lida e gravada.
O exemplo de código a seguir mostra como copiar um instantâneo de blob sobre o blob 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;
}
Recursos
Para saber mais sobre como gerenciar instantâneos de blob usando a biblioteca de cliente do Armazenamento de Blob do Azure para .NET, consulte os recursos a seguir.
Para exemplos de código relacionados usando SDKs do .NET versão 11.x preteridos, consulte Exemplos de código usando o .NET versão 11.x.