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.

Recursos da biblioteca do cliente

Consulte também