Controle de versão de blobs

Você pode habilitar o controle de versão do Armazenamento de Blobs para manter automaticamente as versões anteriores de um objeto. Quando o controle de versão de blobs estiver habilitado, você poderá acessar as versões anteriores de um blob para recuperar os dados, caso tenham sido modificados ou excluídos.

O controle de versão de blobs é parte de uma estratégia de proteção de dados abrangente para dados de blob. Para obter uma ótima proteção dos dados de blob, a Microsoft recomenda habilitar todos os seguintes recursos de proteção de dados:

  • Controle de versão de blob, para preservar automaticamente as versões anteriores de um blob. Quando o controle de versão de blobs estiver habilitado, você poderá restaurar uma versão anterior de um blob para recuperar os dados, caso eles tenham sido modificados ou excluídos por engano. Para saber como habilitar o controle de versão de blobs, confira Habilitar e gerenciar o controle de versão de blobs.
  • Exclusão temporária de contêiner, para restaurar um contêiner que foi excluído. Para saber como habilitar a exclusão temporária de contêiner, confira Habilitar e gerenciar a exclusão temporária de contêineres.
  • A exclusão temporária de blob, para restaurar um blob, um instantâneo ou uma versão que tenha sido excluído. Para saber como habilitar a exclusão temporária de blob, confira Habilitar e gerenciar a exclusão temporária de blobs.

Para saber mais sobre as recomendações da Microsoft para proteção de dados, confira Visão geral da proteção de dados.

Cuidado

Depois que você habilitar o controle de versão do blob para uma conta de armazenamento, todas as operações de gravação em um blob nessa conta resultarão na criação de uma versão. Por esse motivo, a habilitação do controle de versão de blob poderá resultar em custos adicionais. Para minimizar os custos, use uma política de gerenciamento do ciclo de vida para excluir automaticamente as versões antigas. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Otimizar custos automatizando as camadas de acesso do Armazenamento de Blobs do Azure.

Como o controle de versão de blobs funciona

Uma versão captura o estado de um blob em um determinado momento. Cada versão é identificada com uma ID de versão. Quando o controle de versão de blob está habilitado para uma conta de armazenamento, o Armazenamento do Azure cria automaticamente uma versão com uma ID exclusiva quando um blob é criado pela primeira vez e sempre que ele é modificado posteriormente.

Uma ID de versão pode identificar a versão atual ou uma versão anterior. Um blob pode ter apenas uma versão atual por vez.

Quando você cria um blob, existe uma única versão e essa versão é a versão atual. Quando você modifica um blob existente, a versão atual se torna uma versão anterior. Uma versão é criada para capturar o estado atualizado e essa versão é a versão atual. Quando você exclui um blob, a versão atual dele se torna uma versão anterior e não há mais uma versão atual. Todas as versões anteriores do blob persistem.

O seguinte diagrama mostra como as versões são criadas em operações de gravação e como uma versão anterior pode ser promovida para a versão atual:

Diagram showing how blob versioning works

As versões do blob são imutáveis. Você não pode modificar o conteúdo nem os metadados de uma versão de blob existente.

Ter várias versões por blob pode aumentar a latência das operações de listagem de blobs. A Microsoft recomenda manter menos de mil versões por blob. Você pode usar o gerenciamento do ciclo de vida para excluir automaticamente versões antigas. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Otimizar custos automatizando as camadas de acesso do Armazenamento de Blobs do Azure.

O controle de versão de blob está disponível para contas de armazenamento de Blobs herdadas, de v2 de uso geral padrão e de blob de blocos premium. As contas de armazenamento com um namespace hierárquico habilitado para uso com o Azure Data Lake Storage Gen2 não têm suporte no momento.

A versão 2019-10-10 e superior da API REST do Armazenamento do Azure dá suporte ao controle de versão de blobs.

Importante

O controle de versão de blobs não ajuda você a se recuperar da exclusão acidental de uma conta de armazenamento ou de um contêiner. Para evitar a exclusão acidental da conta de armazenamento, configure um bloqueio no recurso da conta de armazenamento. Para saber mais sobre como bloquear uma conta de armazenamento, confira Aplicar um bloqueio do Azure Resource Manager a uma conta de armazenamento.

ID da versão

Cada versão de blob é identificada por uma ID de versão exclusiva. O valor da ID de versão é o carimbo de data/hora em que o blob foi atualizado. A ID da versão é atribuída quando a versão é criada.

Você pode executar operações de leitura ou de exclusão em uma versão específica de um blob fornecendo a ID de versão dele. Se você omitir a ID da versão, a operação atuará na versão atual.

Quando você chama uma operação de gravação para criar ou modificar um blob, o Armazenamento do Azure retorna o cabeçalho x-ms-version-id na resposta. Esse cabeçalho contém a ID da versão atual do blob que foi criado pela operação de gravação.

A ID da versão permanece a mesma durante o tempo de vida da versão.

Controle de versão em operações de gravação

Quando o controle de versão de blobs está ativado, todas as operações de gravação em um blob criam uma versão. As operações de gravação incluem Put Blob, Put Block List, Copy Blob e Set Blob Metadata.

Se a operação de gravação criar um blob, o blob resultante será a versão atual dele. Se a operação de gravação modificar um blob existente, a versão atual se tornará uma versão anterior e uma nova versão atual será criada para capturar o blob atualizado.

O diagrama a seguir mostra como as operações de gravação afetam as versões de blob. Para simplificar, os diagramas mostrados neste artigo exibem a ID da versão como um valor inteiro simples. Na realidade, a ID da versão é um carimbo de data/hora. A versão atual é mostrada em azul e as versões anteriores são mostradas em cinza.

Diagram showing how write operations affect versioned blobs.

Observação

Um blob que foi criado antes do controle de versão estar habilitado para a conta de armazenamento não tem uma ID de versão. Quando esse blob é modificado, o blob modificado torna-se a versão atual e uma versão é criada para salvar o estado do blob antes da atualização. A versão é atribuída a uma ID de versão equivalente à hora de criação.

Quando o controle de versão de blobs está habilitado em uma conta de armazenamento, todas as operações de gravação em blobs de bloco disparam a criação de uma nova versão, exceto a operação Put Block.

Para blobs de páginas e blobs de acréscimo, apenas um subconjunto de operações de gravação dispara a criação de uma versão. Essas operações incluem:

As operações a seguir não disparam a criação de uma nova versão. Para capturar as alterações dessas operações, crie um instantâneo manual:

Todas as versões de um blob precisam ser do mesmo tipo de blob. Se um blob tiver versões anteriores, você não poderá substituir um blob de um tipo por outro tipo, a menos que exclua primeiro o blob e todas as respectivas versões.

Controle de versão em operações de exclusão

Quando você chama a operação Delete Blob sem especificar uma ID de versão, a versão atual se torna uma versão anterior e não haverá mais uma versão atual. Todas as versões anteriores do blob são preservadas.

O seguinte diagrama mostra o efeito de uma operação de exclusão em um blob com controle de versão:

Diagram showing deletion of versioned blob.

Para excluir uma versão específica de um blob, forneça a ID dessa versão na operação de exclusão. Se a exclusão temporária do blob também estiver habilitada para a conta de armazenamento, a versão será mantida no sistema até que o período de retenção de exclusão temporária termine.

Gravar novos dados no blob cria uma versão atual do blob. As versões existentes não são afetadas, conforme mostrado no diagrama a seguir.

Diagram showing re-creation of versioned blob after deletion.

Níveis de acesso

Você pode mover qualquer versão de um blob de blocos, incluindo a versão atual, para uma camada de acesso de blob diferente chamando a operação Set Blob Tier. Você pode aproveitar preços de capacidade mais baixos movendo versões mais antigas de um blob para a camada fria ou de arquivos. Para obter mais informações, confira Camadas de acesso frequente, esporádico e de arquivos para dados de blob.

Para automatizar o processo de mover os blobs de blocos para a camada apropriada, use o gerenciamento do ciclo de vida do blob. Para obter mais informações sobre o gerenciamento do ciclo de vida, confira Gerenciar o ciclo de vida do Armazenamento de Blobs do Azure.

Habilitar ou desabilitar o controle de versão de blobs

Para saber como habilitar ou desabilitar o controle de versão de blobs, confira Habilitar e gerenciar o controle de versão de blobs.

Desabilitar o controle de versão de blobs não exclui os blobs, versões ou instantâneos existentes. Quando você desliga o controle de versão de blob, todas as versões existentes permanecem acessíveis na sua conta de armazenamento. Nenhuma versão é criada subsequentemente.

Depois que o controle de versão é desabilitado, modificar a versão atual cria um blob que não é uma versão. Todas as atualizações subsequentes para o blob substituirão os dados sem salvar o estado anterior. Todas as versões existentes persistem como versões anteriores.

Você pode ler ou excluir versões usando a ID de versão após desabilitar o controle de versão. Você também poderá listar as versões de um blob depois que o controle de versão for desabilitado.

A replicação de objeto depende do controle de versão do blob. Antes de desabilitar o controle de versão do blob, exclua todas as políticas de replicação de objeto na conta. Para saber mais sobre a replicação de objeto, confira Replicação de objeto blob de blocos.

O diagrama a seguir mostra como modificar um blob após o controle de versão ser desabilitado cria um blob sem controle de versão. Todas as versões existentes associadas ao blob são persistidas.

Diagram showing that modification of a current version after versioning is disabled creates a blob that isn't a version.

Controle de versão e exclusão temporária do blob

O controle de versão e a exclusão temporária de blob fazem parte da configuração de proteção de dados recomendada para contas de armazenamento. Para obter mais informações sobre as recomendações da Microsoft para proteção de dados, confira Configuração de proteção de dados recomendada neste artigo, e Visão geral da proteção de dados.

Como substituir um blob

Se o controle de versão de blob e a exclusão temporária de blob estiverem habilitados em uma conta de armazenamento, a substituição de um blob criará automaticamente uma versão. A nova versão não é excluída de modo reversível e não é removida quando o período de retenção de exclusão reversível expira. Nenhum instantâneo excluído de maneira temporária é criado.

Como excluir um blob ou uma versão

Se o controle de versão e a exclusão temporária estiverem habilitados para uma conta de armazenamento, quando você excluir um blob, a versão atual do blob se tornará uma versão anterior. Nenhuma versão e nenhum instantâneo excluído de maneira temporária são criados. O período de retenção de exclusão temporária não está em vigor para o blob excluído.

A exclusão temporária oferece proteção adicional para excluir versões de blobs. Quando você exclui uma versão anterior do blob, a versão é excluída de maneira temporária. A versão excluída de maneira temporária é preservada até que o período de retenção de exclusão temporária termine. Após isso, ela será excluída permanentemente.

Para excluir uma versão anterior de um blob, chame a operação Delete Blob e especifique a ID da versão.

O diagrama a seguir mostra o que acontece quando você exclui um blob ou uma versão de blob.

Diagram showing deletion of a version with soft delete enabled.

Como restaurar uma versão excluída de maneira temporária

Você pode usar a operação Undelete Blob para restaurar versões excluídas de maneira temporária durante o período de retenção de exclusão temporária. A operação Undelete Blob sempre restaura todas as versões com exclusão temporária do blob. Não é possível restaurar apenas uma versão excluída de modo reversível.

A restauração de versões com exclusão temporária com a operação Undelete Blob não eleva nenhuma versão para a versão atual. Para restaurar a versão atual, primeiro restaure todas as versões excluídas temporariamente e use a operação Copy Blob para copiar uma versão anterior para a versão atual.

O diagrama a seguir mostra como restaurar versões de blob com exclusão temporária com a operação Undelete Blob e como restaurar a versão atual do blob com a operação Copy Blob.

Diagram showing how to restore soft-deleted versions.

Depois que o período de retenção de exclusão temporária tiver decorrido, todas as versões de blob excluídas temporariamente serão excluídas permanentemente.

Controle de versão de blobs e instantâneos de blob

Um instantâneo de blob é uma cópia somente leitura de um blob realizado em um momento específico. Instantâneos de blob e versões de blob são semelhantes, mas um instantâneo é criado manualmente por você ou pelo seu aplicativo, enquanto uma versão de blob é criada automaticamente em uma operação de gravação ou de exclusão quando o controle de versão de blobs está habilitado na sua conta de armazenamento.

Importante

A Microsoft recomenda que, depois de habilitar o controle de versão de blob, você também atualize o seu aplicativo para parar de criar instantâneos de blobs de blocos. Se o controle de versão estiver habilitado para a sua conta de armazenamento, todas as atualizações e exclusões de blob de blocos serão capturadas e preservadas por versões. A criação de instantâneos não oferecerá nenhuma proteção adicional para os seus dados de blob de blocos se o controle de versão de blobs estiver habilitado e pode aumentar os custos e a complexidade do aplicativo.

Instantâneo de um blob quando o controle de versão está habilitado

Embora não seja recomendado, tire um instantâneo de um blob que também tem controle de versão. Se não for possível atualizar seu aplicativo para parar de tirar instantâneos de blobs ao habilitar o controle de versão, seu aplicativo poderá oferecer suporte a instantâneos e versões.

Quando você cria um instantâneo de um blob com controle de versão, uma versão é criada quando o instantâneo é criado. Uma versão atual também é criada quando um instantâneo é criado.

O diagrama a seguir mostra o que acontece quando você cria um instantâneo de um blob com controle de versão. No diagrama, as versões de blob e os instantâneos com a ID de versão 2 e 3 contêm dados idênticos.

Diagram showing snapshots of a versioned blob.

Autorizar operações em versões de blobs

Você pode autorizar o acesso a versões de blob usando uma das seguintes abordagens:

O controle de versão de blobs foi projetado para proteger os seus dados contra exclusão acidental ou mal-intencionada. Para aprimorar a proteção, a exclusão de uma versão de blob requer permissões especiais. As seções a seguir descrevem as permissões necessárias para excluir uma versão de blob.

Ação do Azure RBAC para excluir uma versão de blob

A tabela a seguir mostra quais ações do Azure RBAC dão suporte à exclusão de um blob ou de uma versão de blob.

Descrição Operação do serviço Blob Ação de dados do Azure RBAC necessária Suporte à função interna do Azure
Como excluir a versão atual Delete Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete Colaborador de dados de blob de armazenamento
Como excluir uma versão anterior Delete Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action Proprietário de Dados do Blob de Armazenamento

Parâmetros de SAS (Assinatura de Acesso Compartilhado)

O recurso assinado de uma versão do blob é bv. Para obter mais informações, confira Criar uma SAS de serviço ou Criar uma SAS de delegação de usuário.

A tabela a seguir mostra qual permissão é necessária em uma SAS para excluir uma versão de blob.

Permissão Símbolo de URI Operações permitidas
Excluir x Excluir a versão do blob.

Preços e cobrança

Habilitar o controle de versão de blobs pode resultar em encargos de armazenamento de dados adicionais para a sua conta. Ao projetar o aplicativo, é importante estar ciente de como essas cobranças podem aumentar para que você possa minimizar custos.

As versões de blobs, como instantâneos de blobs, são cobradas com a mesma taxa que os dados ativos. A maneira como as versões são cobradas depende da configuração explícita da camada para as versões atuais ou anteriores de um blob (ou instantâneos). Para saber mais sobre as camadas de blobs, confira Camadas de acesso frequente, esporádico e de arquivos para dados de blob.

Caso não tenha alterado nenhuma camada de blob ou de versão, você será cobrado por blocos exclusivos de dados nesse blob, nas versões dele e em todos os instantâneos que ele possa ter. Para obter mais informações, confira Cobrança quando a camada de blob não foi definida explicitamente.

Caso tenha alterado uma camada de blob ou de versão, você será cobrado pelo objeto inteiro, independentemente de o blob e a versão estarem na mesma camada novamente em algum momento. Para obter mais informações, confira Cobrança quando a camada de blob foi definida explicitamente.

Observação

Habilitar o controle de versão de dados frequentemente substituídos pode resultar em maiores encargos de capacidade de armazenamento e maior latência durante as operações de listagem. Para reduzir essas preocupações, armazene dados frequentemente substituídos em uma conta de armazenamento separada com o controle de versão desabilitado.

Para obter mais informações sobre detalhes de cobrança dos instantâneos de blob, confira Instantâneos de blob.

Cobrança quando a camada de blob não foi definida explicitamente

Se você não tiver definido explicitamente a camada de blob para qualquer versão de um blob, será cobrado por blocos ou páginas exclusivos no blob, em todas as versões e pelos instantâneos que ele possa ter. Os dados compartilhados nas versões de blobs são cobrados apenas uma vez. Quando um blob é atualizado, os dados na nova versão atual divergem dos dados armazenados nas versões anteriores e os dados exclusivos são cobrados por bloco ou página.

Quando você substituir um bloco em um blob de blocos, esse bloco será cobrado subsequentemente como um único bloco. Isso é verdadeiro mesmo que o bloco tenha a mesma ID de bloco e os mesmos dados que ele tem na versão anterior. Após o bloco ser confirmado novamente, ele divergirá da respectiva contraparte na versão anterior e você será cobrado pelos dados. O mesmo se aplica para uma página em um blob de páginas é atualizada com os dados idênticos.

O armazenamento de blobs não tem um meio para determinar se dois blocos contêm dados idênticos. Cada bloco que é carregado e confirmado é tratado como exclusivo, mesmo se tiver os mesmos dados e a mesma ID de bloco. Como os encargos se acumulam em blocos exclusivos, é importante ter em mente que a atualização de um blob quando o controle de versão está habilitado resultará em blocos exclusivos adicionais e encargos adicionais.

Quando o controle de versão de blobs está habilitado, chame operações de atualização em blobs de blocos para que eles atualizem o menor número mínimo possível de blocos. As operações de gravação que permitem controle refinado sobre os blocos são Put Block e Put Block List. A operação Put Blob, por outro lado, substitui todo o conteúdo de um blob e, portanto, pode resultar em encargos adicionais.

Os cenários a seguir demonstram como os encargos se acumulam em um blob de blocos e nas versões dele quando a camada de blob não é definida explicitamente.

Cenário 1

No cenário 1, o blob tem uma versão anterior. O blob não foi atualizado desde que a versão foi criada, portanto, são incorridos encargos apenas nos blocos exclusivos 1, 2 e 3.

Diagram 1 showing billing for unique blocks in base blob and previous version.

Cenário 2

No cenário 2, um bloco (bloco 3 no diagrama) no blob foi atualizado. Embora o bloco atualizado contenha os mesmos dados e a mesma ID, ele não é igual ao bloco 3 na versão anterior. Como resultado, a conta é cobrada por quatro blocos.

Diagram 2 showing billing for unique blocks in base blob and previous version.

Cenário 3

No cenário 3, o blob foi atualizado, mas a versão não. O bloco 3 foi substituído pelo bloco 4 no blob atual, mas a versão anterior ainda reflete o bloco 3. Como resultado, a conta é cobrada por quatro blocos.

Diagram 3 showing billing for unique blocks in base blob and previous version.

Cenário 4

No cenário 4, a versão atual foi totalmente atualizada e não contém nenhum dos seus blocos originais. Como resultado, a conta é cobrada por todos os oito blocos exclusivos — quatro na versão atual e quatro combinados nas duas versões anteriores. Esse cenário poderá ocorrer se você estiver gravando em um blob com a operação Put Blob, pois ele substitui todo o conteúdo do blob.

Diagram 4 showing billing for unique blocks in base blob and previous version.

Cobrança quando a camada de blob foi definida explicitamente

Caso tenha definido explicitamente a camada de blob de um blob ou versão (ou instantâneo), você será cobrado pelo comprimento total do conteúdo do objeto na nova camada, independentemente de o objeto compartilhar blocos com um objeto na camada original. Você também é cobrado pelo comprimento total do conteúdo da versão mais antiga na camada original. Todas as outras versões ou instantâneos anteriores que permanecem na camada original são cobrados por blocos exclusivos que eles podem compartilhar, conforme descrito em Cobrança quando a camada de blob não foi definida explicitamente.

Como mover um blob para uma nova camada

A tabela a seguir descreve o comportamento de cobrança de um blob ou versão quando ele é movido para uma nova camada.

Quando a camada blob é definida... Então você é cobrado...
Explicitamente em uma versão, seja atual ou anterior O tamanho completo do conteúdo dessa versão. As versões que não têm uma camada definida explicitamente são cobradas apenas para blocos exclusivos. 1
Arquivar O tamanho completo do conteúdo de todas as versões e instantâneos. 1.

1Se houver outras versões ou instantâneos anteriores que não foram movidos da camada original, essas versões ou instantâneos serão cobrados com base no número de blocos exclusivos que eles contêm, conforme descrito em Cobrança quando a camada de blob não tiver sido definida explicitamente.

O diagrama a seguir ilustra como os objetos são cobrados quando um blob com versão é movido para uma camada diferente.

Diagram showing how objects are billed when a versioned blob is explicitly tiered.

A configuração explícita da camada de um blob, versão ou instantâneo não pode ser desfeita. Se você mover um blob para uma nova camada e, em seguida, retorná-lo para a camada original, será cobrado pelo comprimento total do conteúdo do objeto, mesmo se ele compartilhar blocos com outros objetos na camada original.

As operações que definem explicitamente a camada de um blob, versão ou instantâneo incluem:

Como excluir um blob quando a exclusão temporária está habilitada

Quando a exclusão temporária de blob está habilitada, todas as entidades excluídas de forma temporária são cobradas em todo o tamanho do conteúdo. Se você excluir ou substituir uma versão atual com a camada definida explicitamente, todas as versões anteriores do blob excluído de modo temporário serão cobradas pelo comprimento total do conteúdo. Para obter mais informações sobre como o controle de versão de blobs e a exclusão temporária funcionam juntos, confira controle de versão de e exclusão temporária de blob.

Suporte a recursos

O suporte para esse recurso pode ser afetado ao habilitar o Data Lake Storage Gen2, o protocolo NFS (Sistema de Arquivos de Rede) 3.0 ou o protocolo SFTP (Protocolo de Transferência de Arquivo SSH). Se você tiver habilitado qualquer um desses recursos, consulte o Suporte a recursos de Armazenamento de Blobs nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.

Não há suporte para controle de versão de blobs que são carregados usando APIs Data Lake Storage Gen2 APIs.

Confira também