Compartilhar via


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

Configure seu ambiente

Se você não tiver um projeto existente, esta seção mostrará como configurar um projeto para funcionar com a biblioteca de clientes do Armazenamento de Blobs do Azure para .NET. As etapas incluem a instalação do pacote, a adição de diretivas using e a criação de um objeto de cliente autorizado. Para obter detalhes, consulte Introdução ao Armazenamento de Blobs do Azure e ao .NET.

Instalar Pacotes

No diretório do projeto, instale pacotes para as bibliotecas de cliente do Armazenamento de Blobs do Azure e do Azure Identity usando o comando dotnet add package. O pacote Azure.Identity é necessário para conexões sem senha com os serviços do Azure.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Adicione diretivas using

Adicione essas diretivas using ao topo do seu arquivo de código:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Alguns exemplos de código neste artigo podem exigir diretivas using adicionais.

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blobs, crie uma instância do BlobServiceClient. O exemplo a seguir mostra como criar um objeto cliente usando DefaultAzureCredential para autorização:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Você pode registrar um cliente de serviço para injeção de dependência em um aplicativo .NET.

Você também pode criar objetos cliente para contêineres ou blobs específicos. Para saber mais sobre como criar e gerenciar objetos clientes, confira Criar e gerenciar objetos clientes que interagem com recursos de dados.

Autorização

O mecanismo de autorização deve ter as permissões necessárias para trabalhar com instantâneos de blob. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna de Colaborador de Dados de Blob de Armazenamento ou superior do RBAC do Azure. Para saber mais, confira as diretrizes de autorização para Instantâneos de Blob.

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

Confira também