Criar e gerenciar um instantâneo de blob com o .NET
Um instantâneo é uma versão somente leitura de um blob capturada em um momento no tempo. Esse artigo mostra como criar e gerenciar instantâneos de blob usando a biblioteca de clientes do Armazenamento do Azure para .NET.
Veja mais informações sobre instantâneos de blob no Armazenamento do Azure em instantâneos de blob.
Pré-requisitos
- Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de clientes do Armazenamento de Blobs do Azure para .NET. Para saber mais sobre como configurar seu projeto, incluindo a instalação de pacote, a adição de diretivas
using
e a criação de um objeto do cliente autorizado, consulte Introdução ao Armazenamento de Blobs do Azure e .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 as seguintes operações de API REST:
Criar um instantâneo
Para criar um instantâneo de um blob de blocos, use um dos seguintes métodos:
O exemplo de código a seguir mostra como criar um instantâneo. Inclua uma referência à biblioteca do 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 a acessar o Armazenamento do Azure, confira Biblioteca de cliente da Identidade do Azure 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 possua instantâneos, um erro será gerado.
Para excluir um blob e os instantâneos dele, use um dos seguintes métodos e inclua a enumeração DeleteSnapshotsOption:
O exemplo de código a seguir mostra como excluir um blob e os instantâneos dele no .NET, em que 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 o blob base, desde que o blob base esteja em uma camada online (frequente ou esporádica). 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 clientes do Armazenamento de Blobs do Azure para .NET, confira os recursos a seguir.
Para obter exemplos de código relacionados usando SDKs preteridos do .NET versão 11.x, confira os Exemplos de código usando o .NET versão 11.x.
Recursos da biblioteca de clientes
- Documentação de referência da biblioteca de clientes
- Código-fonte da biblioteca de clientes
- Pacote (NuGet)