Otimize os custos gerenciando automaticamente o ciclo de vida dos dados

O gerenciamento do ciclo de vida do Armazenamento de Blobs do Azure oferece uma política baseada em regras que é possível usar para fazer a transição dos seus dados de blob para as camadas de acesso apropriadas e para expirar os dados no final do seu ciclo de vida.

A política de gerenciamento do ciclo de vida permite:

  • Fazer a transição de blobs de esporádico para frequente imediatamente quando são acessados a fim de otimizar o desempenho.
  • Transfira versões atuais de um blob, versões anteriores de um blob ou instantâneos de blob para uma camada de armazenamento mais esporádica se esses objetos não forem acessados ou modificados por um período de tempo para otimizar o custo.
  • Exclua as versões atuais de um blob, versões anteriores de um blob ou instantâneos de blob no final de seus ciclos de vida.
  • Aplique regras a uma conta de armazenamento inteira para selecionar contêineres ou a um subconjunto de blobs usando prefixos de nome ou marcas de índice de blob como filtros.

Dica

Embora o gerenciamento do ciclo de vida ajude você a mover dados entre camadas em uma única conta, você pode usar uma tarefa de armazenamento para realizar essa tarefa em escala em várias contas. Uma conta de armazenamento é um recurso disponível em Ações de Armazenamento do Azure; uma estrutura sem servidor que você pode usar para executar operações de dados comuns em milhões de objetos em várias contas de armazenamento. Para saber mais, consulte O que são as Ações de Armazenamento do Azure?.

As políticas de gerenciamento de ciclo de vida têm suporte para blobs de blocos e blobs de acréscimo em contas de Armazenamento de Blob, blob de blocos premium de bloco e de uso geral v2. O gerenciamento do ciclo de vida não afeta contêineres do sistema, como $logs ou $web.

Importante

Se um conjunto de dados precisar ser legível, não defina uma política para mover os blobs para a camada de arquivos. Os blobs na camada de arquivo não podem ser lidos, a menos que eles sejam alimentados pela primeira vez, um processo que pode ser demorado e caro. Para obter mais informações, confira Visão geral da reidratação de blob da camada de arquivos. Se um conjunto de dados precisar ser lido com frequência, não defina uma política para mover blobs para as camadas frescas ou frias, pois isso pode resultar em custos de transação mais altos.

Otimização de custos gerenciando o ciclo de vida de dados

Conjuntos de dados têm ciclos de vida exclusivos. No início do ciclo de vida, as pessoas geralmente acessam alguns dados. Mas a necessidade de acesso cai drasticamente à medida que os dados envelhecem. Alguns dados permanecem ociosos na nuvem e raramente são acessados após serem armazenados. Alguns conjuntos de dados expiram dias ou meses após a criação, enquanto outros conjuntos de dados são lidos e modificados ativamente durante seu tempo de vida.

Considere um cenário onde dados obtém acesso frequente durante os estágios iniciais do ciclo de vida, mas apenas ocasionalmente após duas semanas. Após o primeiro mês, o conjunto de dados raramente é acessado. Nesse cenário, o armazenamento frequente é melhor durante os estágios iniciais. O armazenamento esporádico é mais apropriado para acesso ocasional. O armazenamento de arquivos é a melhor opção de camada após os dados envelhecerem um mês. Ao mover os dados para a camada de armazenamento apropriada com base em sua idade com as regras de política de gerenciamento do ciclo de vida, você pode criar a solução menos dispendiosa para suas necessidades.

Definição da política de gerenciamento do ciclo de vida

Uma política de gerenciamento do ciclo de vida é uma coleção de regras em um documento JSON. O seguinte JSON de exemplo mostra uma definição de regra completa:

{
  "rules": [
    {
      "name": "rule1",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {...}
    },
    {
      "name": "rule2",
      "type": "Lifecycle",
      "definition": {...}
    }
  ]
}

Uma política é uma coleção de regras, conforme descrito na seguinte tabela:

Nome do parâmetro Tipo de parâmetro Observações
rules Uma matriz de objetos de regra Pelo menos uma regra é necessária em uma política. Você pode definir até 100 regras em uma política.

Cada regra na política tem vários parâmetros, descritos na seguinte tabela:

Nome do parâmetro Tipo de parâmetro Observações Obrigatório
name String Um nome de regra pode incluir até 256 caracteres alfanuméricos. A regra de nome diferencia maiúsculas de minúsculas. Ela deve ser exclusiva em uma política. Verdadeiro
enabled Boolean Um booliano opcional para permitir que uma regra seja desabilitada temporariamente. O valor padrão será true se não estiver definido. Falso
type Um valor de enumeração O tipo válido atual é Lifecycle. Verdadeiro
definition Um objeto que define a regra de ciclo de vida Cada definição é composta por um conjunto de filtros e um conjunto de ações. Verdadeiro

Definição de regra de gerenciamento do ciclo de vida

Cada definição de regra dentro de uma política inclui um conjunto de filtros e um conjunto de ações. O conjunto de filtros limita as ações de regras a determinado conjunto de objetos em um contêiner ou a nomes de objetos. O conjunto de ações aplica-se a camada ou excluir ações para o conjunto filtrado de objetos.

Regra de exemplo

A regra de exemplo a seguir filtra a conta para executar as ações em objetos que existem dentro de sample-container e começam com blob1.

  • Colocar o blob na camada esporádica 30 dias após a última modificação
  • Colocar o blob na camada de arquivos 90 dias após a última modificação
  • Excluir o blob 2.555 dias (sete anos) após a última modificação
  • Excluir versões anteriores 90 dias após a criação
{
  "rules": [
    {
      "enabled": true,
      "name": "sample-rule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "version": {
            "delete": {
              "daysAfterCreationGreaterThan": 90
            }
          },
          "baseBlob": {
            "tierToCool": {
              "daysAfterModificationGreaterThan": 30
            },
            "tierToArchive": {
              "daysAfterModificationGreaterThan": 90,
              "daysAfterLastTierChangeGreaterThan": 7
            },
            "delete": {
              "daysAfterModificationGreaterThan": 2555
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "sample-container/blob1"
          ]
        }
      }
    }
  ]
}

Observação

O elemento baseBlob em uma política de gerenciamento de ciclo de vida refere-se à versão atual de um blob. O elemento version refere-se a uma versão anterior.

Filtros de regra

Os filtros limitam as ações de regra a um subconjunto de blobs na conta de armazenamento. Se mais de um filtro for definido, um AND lógico será executado em todos os filtros. Você pode usar um filtro para especificar quais blobs devem ser incluídos. Um filtro não fornece meios para especificar quais blobs devem ser excluídos.

Filtros incluem:

Nome do filtro Tipo de filtro Observações Obrigatório
blobTypes Uma matriz de valores de enumeração predefinidos. A versão atual dá suporte a blockBlob e appendBlob. Há suporte para a ação Excluir somente para appendBlob. Não há suporte para Definir Camada. Yes
prefixMatch Uma matriz de cadeias de caracteres para prefixos a serem correspondidos. Cada regra pode definir até 10 prefixos que diferenciam maiúsculas e minúsculas. Uma cadeia de caracteres de prefixo deve começar com um nome de contêiner. Por exemplo, se você deseja encontrar uma correspondência para todos os blobs em https://myaccount.blob.core.windows.net/sample-container/blob1/..., especifique o prefixMatch como sample-container/blob1. Esse filtro corresponderá a todos os blobs no contêiner de exemplo cujos nomes começam com blob1.

.
Se você não definir prefixMatch, a regra se aplicará a todos os blobs na conta de armazenamento. As cadeias de caracteres de prefixo não dão suporte à correspondência de caracteres coringa. Caracteres como * e ? são tratados como literais das cadeias de caracteres. Não
blobIndexMatch Uma matriz de valores de dicionário que consistem em condições de valor e chave de marca de índice de blob a serem combinadas. Cada regra pode definir até 10 condições de marca de Índice de blob. Por exemplo, se você deseja encontrar uma correspondência para todos os blobs com Project = Contoso em https://myaccount.blob.core.windows.net/ para uma regra, o blobIndexMatch é {"name": "Project","op": "==","value": "Contoso"}. Se você não definir blobIndexMatch, a regra se aplicará a todos os blobs na conta de armazenamento. Não

Para saber mais sobre o recurso de indexação de blobs, assim como problemas e limitações conhecidos, confira Gerenciar e localizar dados no Armazenamento de Blobs do Azure com o índice de blobs.

Ações de regra

Ações são aplicadas aos blobs filtrados quando a condição de execução é atendida.

O gerenciamento do ciclo de vida dá suporte às camadas e exclusão de versões atuais, bem como às versões anteriores e instantâneos de blob. Defina pelo menos uma ação para cada regra.

Observação

Ainda não há suporte para camadas em uma conta de armazenamento de blobs de blocos premium. Para todas as outras contas, a camada é permitida somente em blobs de blocos e não para blobs de acréscimo e de página.

Ação Versão atual Instantâneo Versões anteriores
tierToCool Suporte para blockBlob Com suporte Com suporte
tierToCold Suporte para blockBlob Com suporte Com suporte
enableAutoTierToHotFromCool1 Suporte para blockBlob Sem suporte Sem suporte
tierToArchive4 Suporte para blockBlob Com suporte Com suporte
delete2,3 Com suporte para blockBlob e appendBlob Com suporte Com suporte

1 A ação enableAutoTierToHotFromCool está disponível apenas quando é utilizada com a condição de execução daysAfterLastAccessTimeGreaterThan. Essa condição é descrita na próxima tabela.

2 Quando aplicada a uma conta com um namespace hierárquico habilitado, uma ação de exclusão remove diretórios vazios. Se o diretório não estiver vazio, a ação de exclusão removerá objetos que atendam às condições de política no primeiro ciclo de execução da política de ciclo de vida. Se essa ação resultar em um diretório vazio que também atenda às condições de política, esse diretório será removido no próximo ciclo de execução e assim por diante.

3 Uma política de gerenciamento do ciclo de vida não excluirá a versão atual de um blob até que todas as versões anteriores ou instantâneos associados a esse blob tenham sido excluídos. Se os blobs em sua conta de armazenamento tiverem versões ou instantâneos anteriores, você deverá incluir versões e instantâneos anteriores ao especificar uma ação de exclusão como parte da política.

4 Somente contas de armazenamento configuradas para LRS, GRS ou RA-GRS dão suporte à movimentação de blobs para a camada de armazenamento de arquivos. A camada de armazenamento de arquivos não é compatível com as contas ZRS, GZRS ou RA-GZRS. Essa ação é listada com base na redundância configurada para a conta.

Observação

Se você definir mais de uma ação no mesmo blob, o gerenciamento do ciclo de vida aplicará a ação mais barata ao blob. Por exemplo, a ação delete é mais barata do que a ação tierToArchive. A ação tierToArchive é mais barata do que a ação tierToCool.

As condições de execução são baseadas na idade. As versões atuais usam o horário da última modificação ou do último acesso, as versões anteriores usam a hora de criação da versão e os instantâneos de blob usam a hora de criação do instantâneo para controlar a idade.

Condição de execução de ação Valor de condição Descrição
daysAfterModificationGreaterThan Valor inteiro que indica a idade em dias A condição para ações em uma versão atual de um blob
daysAfterCreationGreaterThan Valor inteiro que indica a idade em dias A condição para ações na versão atual ou anterior de um blob ou um instantâneo de blob
daysAfterLastAccessTimeGreaterThan1 Valor inteiro que indica a idade em dias A condição para uma versão atual de um blob quando o controle de acesso está habilitado
daysAfterLastTierChangeGreaterThan Valor inteiro que indica a idade em dias após o último horário de alteração da camada de blob A duração mínima em dias em que um blob reidratado é mantido em camadas de acesso frequente, esporádico ou frio antes de ser retornado para a camada de arquivo morto. Essa condição se aplica apenas a ações tierToArchive.

1 Se o rastreamento de hora do último acesso não estiver habilitado, o daysAfterLastAccessTimeGreaterThan usará a data em que a política de ciclo de vida foi habilitada em vez da propriedade LastAccessTime do blob. Essa data também é usada quando a propriedade LastAccessTime é um valor nulo. Para obter mais informações sobre como usar o rastreamento de hora do último acesso, confira Mover dados com base na hora do último acesso.

Execuções da política de ciclo de vida

Ao configurar ou editar uma política de ciclo de vida, pode levar até 24 horas para que as alterações entrem em vigor e a primeira execução seja iniciada. O tempo necessário para que as ações de política sejam concluídas depende do número de blobs avaliados e operados.

Se você desabilitar uma política, nenhuma nova execução de política será agendada, mas se uma execução já estiver em andamento, essa execução continuará até que ela seja concluída e você será cobrado por todas as ações necessárias para concluir a execução. Consulta a Disponibilidade regional e preços.

Evento de conclusão da política de ciclo de vida

O evento LifecyclePolicyCompleted é gerado quando as ações definidas por uma política de gerenciamento de ciclo de vida são executadas. Uma seção de resumo aparece para cada ação incluída na definição de política. O json a seguir mostra um exemplo de evento LifecyclePolicyCompleted para uma política. Como a definição de política inclui as ações delete, tierToCool, tierToCold e tierToArchive, uma seção de resumo aparece para cada uma delas.

{
    "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/contosoresourcegroup/providers/Microsoft.Storage/storageAccounts/contosostorageaccount",
    "subject": "BlobDataManagement/LifeCycleManagement/SummaryReport",
    "eventType": "Microsoft.Storage.LifecyclePolicyCompleted",
    "eventTime": "2022-05-26T00:00:40.1880331",    
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "data": {
        "scheduleTime": "2022/05/24 22:57:29.3260160",
        "deleteSummary": {
            "totalObjectsCount": 16,
            "successCount": 14,
            "errorList": ""
        },
        "tierToCoolSummary": {
            "totalObjectsCount": 0,
            "successCount": 0,
            "errorList": ""
        },
        "tierToColdSummary": {
            "totalObjectsCount": 0,
            "successCount": 0,
            "errorList": ""
        },
        "tierToArchiveSummary": {
            "totalObjectsCount": 0,
            "successCount": 0,
            "errorList": ""
        }
    },
    "dataVersion": "1",
    "metadataVersion": "1"
}

A tabela a seguir descreve o esquema do evento LifecyclePolicyCompleted.

Campo Type Descrição
scheduleTime string A hora em que a política de ciclo de vida foi agendada
deleteSummary vector<byte> O resumo dos resultados dos blobs agendados para a operação de exclusão
tierToCoolSummary vector<byte> O resumo dos resultados dos blobs agendados para a operação de camada para esporádico
tierToColdSummary vector<byte> Resumo dos resultados dos blobs programados para operação de camada para frio
tierToArchiveSummary vector<byte> O resumo dos resultados dos blobs agendados para a operação de camada para arquivar

Exemplos de políticas de ciclo de vida

Os exemplos a seguir demonstram como tratar cenários comuns com as regras de política de ciclo de vida.

Mover dados antigos para uma camada mais fria

Este exemplo mostra como fazer a transição de blobs de blocos prefixados com sample-container/blob1 ou container2/blob2. A política faz a transição de blobs que não foram modificados há mais de 30 dias para o armazenamento esporádico e de blobs não modificados há mais de 90 dias para a camada de arquivos:

{
  "rules": [
    {
      "name": "agingRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ],
          "prefixMatch": [ "sample-container/blob1", "container2/blob2" ]
        },
        "actions": {
          "baseBlob": {
            "tierToCool": { "daysAfterModificationGreaterThan": 30 },
            "tierToArchive": { "daysAfterModificationGreaterThan": 90 }
          }
        }
      }
    }
  ]
}

Mover dados com base na data do último acesso

Você pode habilitar o acompanhamento de último acesso para manter um registro de quando o blob é lido ou gravado pela última vez e como um filtro para gerenciar a distribuição em camadas e a retenção de seus dados de blob. Para saber como habilitar o acompanhamento de último acesso, confira Opcionalmente, habilitar o acompanhamento de hora do último acesso.

Quando o acompanhamento da hora do último acesso é habilitado, a propriedade de blob chamada LastAccessTime é atualizada quando um blob é lido ou gravado. Uma operação Obter Blob é considerada uma operação de acesso. Obter Propriedades de Blob, Obter Metadados de Blobe Obter Marcas de Blob não são operações de acesso e, portanto, não atualizam a hora do último acesso.

Se o rastreamento de hora do último acesso estiver habilitado, o gerenciamento do ciclo de vida usará LastAccessTime para determinar se a condição de execução daysAfterLastAccessTimeGreaterThan é atendida. O gerenciamento do ciclo de vida usa a data em que a política de ciclo de vida foi habilitada em vez de LastAccessTime nos seguintes casos:

  • O valor da propriedade LastAccessTime do blob é um valor nulo.

    Observação

    A propriedade lastAccessedOn do blob será nula se um blob não tiver sido acessado desde que o rastreamento de hora do último acesso foi habilitado.

  • O rastreamento de hora do último acesso não está habilitado.

Para minimizar o impacto na latência de acesso de leitura, somente a primeira leitura das últimas 24 horas atualiza o horário do último acesso. As leituras subsequentes no mesmo período de 24 horas não atualizam o horário do último acesso. Se um blob for modificado entre leituras, o horário do último acesso será o mais recente dos dois valores.

No exemplo a seguir, os blobs são movidos para a camada de armazenamento esporádico, caso não tenham sido acessados por 30 dias. A propriedade enableAutoTierToHotFromCool é um valor booliano que indica se um blob deve ser transferido automaticamente da camada de armazenamento esporádico para a camada de armazenamento frequente se ele for acessado novamente depois de ser transferido para a camada de armazenamento esporádico.

Dica

Se um blob for movido para a camada esporádica e, em seguida, for automaticamente movido de volta antes que 30 dias tenha decorrido, uma taxa de exclusão antecipada será cobrada. Antes de definir a enablAutoTierToHotFromCool propriedade, analise os padrões de acesso de seus dados para que você possa reduzir encargos inesperados.

{
  "enabled": true,
  "name": "last-accessed-thirty-days-ago",
  "type": "Lifecycle",
  "definition": {
    "actions": {
      "baseBlob": {
        "enableAutoTierToHotFromCool": true,
        "tierToCool": {
          "daysAfterLastAccessTimeGreaterThan": 30
        }
      }
    },
    "filters": {
      "blobTypes": [
        "blockBlob"
      ],
      "prefixMatch": [
        "mylifecyclecontainer/log"
      ]
    }
  }
}

Arquivar dados após a ingestão

Alguns dados permanecem ociosos na nuvem e raramente ou nunca são acessados depois de armazenados. A seguinte política de ciclo de vida é configurada para arquivar dados logo após a ingestão. Este exemplo faz a transição de blobs de blocos em um contêiner chamado archivecontainer para uma camada de arquivamento. A transição é realizada agindo sobre os blobs 0 dia após a hora da última modificação.

{
  "rules": [
    {
      "name": "archiveRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ],
          "prefixMatch": [ "archivecontainer" ]
        },
        "actions": {
          "baseBlob": {
              "tierToArchive": { 
                "daysAfterModificationGreaterThan": 0
              }
          }
        }
      }
    }
  ]
}

Observação

A Microsoft recomenda que você carregue seus blobs diretamente na camada de armazenamento de arquivos para maior eficiência. Você pode especificar a camada de arquivo no cabeçalho x-ms-access-tier na operação Colocar Blob ou Colocar Lista de Blobs. O cabeçalho x-ms-access-tier tem suporte em REST versão 2018-11-09 e mais recentes ou nossas bibliotecas de cliente de armazenamento de blob mais recentes.

Expirar os dados com base na idade

Espera-se que alguns dados expirem dias ou meses após a criação. Configure uma política de gerenciamento do ciclo de vida para expirar os dados por exclusão com base na idade deles. O seguinte exemplo mostra uma política que exclui todos os blobs de blocos que não foram modificados nos últimos 365 dias.

{
  "rules": [
    {
      "name": "expirationRule",
      "enabled": true,
      "type": "Lifecycle",
      "definition": {
        "filters": {
          "blobTypes": [ "blockBlob" ]
        },
        "actions": {
          "baseBlob": {
            "delete": { "daysAfterModificationGreaterThan": 365 }
          }
        }
      }
    }
  ]
}

Exclui dados com marcas de índice de blob

Alguns dados só deverão expirar se explicitamente marcados para exclusão. Você pode configurar uma política de gerenciamento de ciclo de vida para expirar dados marcados com atributos de chave/valor de índice de blob. O exemplo a seguir mostra uma política que exclui todos os blobs de bloco marcados com Project = Contoso. Para saber mais sobre o índice de blobs, confira Gerenciar e localizar dados no Armazenamento de Blobs do Azure com o índice de blobs.

{
    "rules": [
        {
            "enabled": true,
            "name": "DeleteContosoData",
            "type": "Lifecycle",
            "definition": {
                "actions": {
                    "baseBlob": {
                        "delete": {
                            "daysAfterModificationGreaterThan": 0
                        }
                    }
                },
                "filters": {
                    "blobIndexMatch": [
                        {
                            "name": "Project",
                            "op": "==",
                            "value": "Contoso"
                        }
                    ],
                    "blobTypes": [
                        "blockBlob"
                    ]
                }
            }
        }
    ]
}

Gerenciar versões anteriores

Para dados modificados e acessados regularmente durante seu tempo de vida, você pode habilitar o controle de versão do armazenamento de blob para manter automaticamente as versões anteriores de um objeto. Você pode criar uma política para ser armazenada em camadas ou excluir versões anteriores. A idade da versão é determinada avaliando-se a hora de criação da versão. Essa regra da política move versões anteriores dentro do contêiner activedata com 90 dias ou mais após a criação da versão para a camada de armazenamento esporádico, além de exclui as versões anteriores que têm 365 dias ou mais.

{
  "rules": [
    {
      "enabled": true,
      "name": "versionrule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "version": {
            "tierToCool": {
              "daysAfterCreationGreaterThan": 90
            },
            "delete": {
              "daysAfterCreationGreaterThan": 365
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "activedata/"
          ]
        }
      }
    }
  ]
}

Disponibilidade regional e preços

O recurso de gerenciamento do ciclo de vida está disponível em todas as regiões do Azure.

As políticas de gerenciamento do ciclo de vida são gratuitas. O custo de operação padrão para as chamadas à API Definir Camada de Blob é cobrado dos clientes. Operações de exclusão são gratuitas. No entanto, outros serviços e utilitários do Azure, como o Microsoft Defender para Armazenamento, podem cobrar por operações gerenciadas por meio de uma política de ciclo de vida.

Cada atualização para a hora de último acesso de um blob é cobrada na categoria outras operações. Cada última atualização de tempo de acesso será cobrada como uma "outra transação" no máximo uma vez a cada 24 horas por objeto, mesmo se for acessada muitas vezes em um dia. Isso será separado das cobranças de transações de leitura.

Para obter mais informações sobre preços, confira Preços do Blob de Blocos.

Limitações e problemas conhecidos

  • Ainda não há suporte para camadas em uma conta de armazenamento de blobs de blocos premium. Para todas as outras contas, a camada é permitida somente em blobs de blocos e não para blobs de acréscimo e de página.

  • Uma política de gerenciamento do ciclo de vida precisa ser lida ou gravada totalmente. Não há suporte para atualizações parciais.

  • Cada regra pode ter até 10 prefixos que diferenciam maiúsculas de minúsculas e até 10 condições de marca de índice de blob.

  • Uma política de gerenciamento de ciclo de vida não pode alterar a camada de um blob que usa um escopo de criptografia.

  • A ação de exclusão de uma política de gerenciamento de ciclo de vida não funcionará com nenhum blob em um contêiner imutável. Com uma política imutável, os objetos podem ser criados e lidos, mas não modificados nem excluídos. Para obter mais informações, consulte Armazenar dados de blob comercialmente críticos com armazenamento imutável.

Perguntas frequentes

Consulte Perguntas frequentes sobre o gerenciamento do ciclo de vida.

Próximas etapas