Solucionar problemas de versionamento - Amazon Simple Storage Service

Solucionar problemas de versionamento

Os tópicos a seguir podem ajudar a solucionar alguns problemas comuns de versionamento do Amazon S3.

Quero recuperar objetos que foram excluídos acidentalmente em um bucket com versionamento ativado

Em geral, quando as versões do objeto são excluídas dos buckets do S3, não há como o Amazon S3 recuperá-las. No entanto, se você habilitou o versionamento do S3 no bucket do S3, uma solicitação DELETE que não especifica um ID de versão não pode excluir permanentemente um objeto. Em vez disso, um marcador de exclusão é adicionado como espaço reservado. Esse marcador de exclusão torna-se a versão atual de objeto.

Para verificar se os objetos excluídos foram excluídos permanentemente ou temporariamente (com um marcador de exclusão em seu lugar), faça o seguinte:

  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Buckets.

  3. Na lista Buckets, escolha o nome do bucket que contém o objeto.

  4. Na lista Objetos, ative a opção Mostrar versões à direita da barra de pesquisa e, depois, pesquise o objeto excluído na barra de pesquisa. Essa alternância estará disponível somente se o versionamento tiver sido habilitado anteriormente no bucket.

    Você também pode usar o Inventário do S3 para pesquisar objetos excluídos.

  5. Se você não conseguir encontrar o objeto depois de ativar Mostrar versões ou criar um relatório de inventário, e também não conseguir encontrar um marcador de exclusão do objeto, a exclusão será permanente e o objeto não poderá ser recuperado.

Você também pode verificar o status de um objeto excluído usando a operação de API HeadObject do AWS Command Line Interface (AWS CLI). Para fazer isso, use o comando head-object a seguir e substitua user input placeholders por suas próprias informações:

aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html

Se você executar o comando head-object em um objeto com versionamento, cuja versão atual é um marcador de exclusão, você receberá um erro 404 Não encontrado. Por exemplo:

Ocorreu um erro (404) ao chamar a operação HeadObject: não encontrado

Se você executar o comando head-object em um objeto com versionamento e fornecer o ID da versão do objeto, o Amazon S3 recuperará os metadados do objeto, confirmando que ele ainda existe e não foi excluído permanentemente.

aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID

{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}

Se o objeto for encontrado e a versão mais recente for um marcador de exclusão, a versão anterior do objeto ainda existirá. Como o marcador de exclusão é a versão atual do objeto, você pode recuperá-lo excluindo o marcador de exclusão.

Depois de remover permanentemente o marcador de exclusão, a segunda versão mais recente do objeto se torna a versão atual dele, tornando-o disponível novamente. Para obter uma descrição visual de como os objetos são recuperados, consulte Remover marcadores de exclusão.

Para remover uma versão específica de um objeto, você deve ser o proprietário do bucket. Para excluir permanentemente um marcador de exclusão, inclua seu respectivo ID de versão em uma solicitação DeleteObject. Para excluir o marcador de exclusão, use o comando a seguir e substitua user input placeholders por suas próprias informações:

aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID

Para obter mais informações sobre o comando delete-object, consulte delete-object na Referência de comandos da AWS CLI. Para obter mais informações sobre como excluir permanentemente os marcadores de exclusão, consulte Gerenciamento de marcadores de exclusão.

Quero excluir permanentemente objetos com versionamento

Em um bucket com versionamento, uma solicitação DELETE sem um ID de versão não pode excluir permanentemente um objeto. Em vez disso, essa solicitação insere um marcador de exclusão.

Para excluir permanentemente objetos com versionamento, você pode escolher entre os seguintes métodos:

  • Crie uma regra de ciclo de vida do S3 para excluir permanentemente as versões não atuais. Para excluir permanentemente versões não atuais de objetos, selecione Excluir permanentemente versões não atuais de objetos, e insira um número em Dias após os objetos ficarem desatualizados. Opcionalmente, você pode especificar o número de versões mais recentes a serem retidas inserindo um valor em Number of newer versions to retain (Número de versões mais novas a serem mantidas). Para obter mais informações sobre como criar essa regra, consulte Definir uma configuração de ciclo de vida do S3.

  • Exclua uma versão especificada incluindo o ID da versão na solicitação DELETE. Para obter mais informações, consulte Como excluir permanentemente objetos com versionamento.

  • Crie uma regra de ciclo de vida para expirar as versões atuais. Para expirar as versões atuais dos objetos, selecione Expirar versões atuais de objetos e adicione um número em Dias após a criação do objeto. Para obter mais informações sobre como criar essa regra de ciclo de vida, consulte Definir uma configuração de ciclo de vida do S3.

  • Para excluir permanentemente todos os objetos com versionamento e excluir marcadores, crie duas regras de ciclo de vida: uma para expirar as versões atuais e excluir permanentemente as versões não atuais dos objetos, e outra para excluir marcadores de exclusão de objetos expirados.

Em um bucket com versionamento ativado, uma solicitação DELETE que não especifica um ID de versão pode remover somente objetos com um ID de versão NULL. Se o objeto foi carregado quando o versionamento estava ativado, uma solicitação DELETE que não especifica um ID de versão cria um marcador de exclusão desse objeto.

nota

Para buckets com o bloqueio de objetos do S3 ativado, uma solicitação de DELETE objeto com um ID de versão de objeto protegido causa um erro 403 Acesso negado. Uma solicitação de DELETE objeto sem um ID de versão adiciona um marcador de exclusão como a versão mais recente do objeto com uma resposta 200 OK. Objetos protegidos pelo bloqueio de objetos não podem ser excluídos permanentemente até que seus períodos de retenção e retenções legais sejam removidos. Para ter mais informações, consulte Como o bloqueio de objetos do S3 funciona.

Ocorreu uma degradação do desempenho depois de ativar o versionamento do bucket

A degradação do desempenho poderá ocorrer em buckets com versionamento ativado se houver muitos marcadores de exclusão ou objetos com versionamento e se as práticas recomendadas não forem seguidas.

Marcadores de exclusão em excesso

Depois que você habilita o versionamento em um bucket, uma solicitação DELETE sem um ID de versão feita a um objeto cria um marcador de exclusão com um ID de versão exclusivo. As configurações do ciclo de vida com a regra Expirar versões atuais de objetos adicionam um marcador de exclusão com um ID de versão exclusivo a cada objeto. Marcadores de exclusão excessivos podem reduzir o desempenho no bucket.

Quando o versionamento é suspenso em um bucket, o Amazon S3 marca o ID da versão como NULL em objetos recém-criados. Uma ação de expiração em um bucket com versionamento suspenso faz com que o Amazon S3 crie um marcador de exclusão com NULL como o ID da versão. Em um bucket com versionamento suspenso, um marcador de exclusão NULL é criado para qualquer solicitação de exclusão. Esses marcadores de exclusão NULL também são chamados de marcadores de exclusão de objeto expirado quando todas as versões de objeto são excluídas e resta apenas um único marcador de exclusão. Se muitos marcadores de exclusão NULL se acumularem, ocorrerá uma degradação do desempenho no bucket.

Objetos com versionamento em excesso

Se um bucket com versionamento ativado contiver objetos com milhões de versões, poderá ocorrer um aumento nos erros 503 Serviço indisponível. Se você perceber um aumento significativo do número de respostas HTTP 503 Serviço indisponível recebidas para solicitações PUT ou DELETE de objetos a um bucket com o versionamento ativado, talvez tenha um ou mais objetos no bucket com milhões de versões. Quando você tem objetos com milhões de versões, o Amazon S3 limita automaticamente as solicitações ao bucket. As solicitações de controle de utilização protegem o bucket de uma quantidade excessiva de tráfego de solicitação, o que pode potencialmente impedir outras solicitações feitas ao mesmo bucket.

Para determinar quais objetos têm milhões de versões, use o inventário do S3. O inventário do S3 gera um relatório que fornece uma lista de arquivos simples dos objetos em um bucket. Para ter mais informações, consulte Catalogar e analisar seus dados com o Inventário S3.

Para verificar se há um grande número de objetos com versionamento no bucket, use as métricas da Lente de Armazenamento do S3 para visualizar a Contagem de objetos da versão atual, o Número de objetos de versões não atuais e a Contagem de objetos do marcador de exclusão. Para obter mais informações sobre métricas da Lente de Armazenamento, consulte Glossário de métricas de lente de armazenamento do Amazon S3.

A equipe do Amazon S3 incentiva os clientes a investigarem aplicações que sobrescrevem repetidamente o mesmo objeto, criando potencialmente milhões de versões desse objeto, para determinar se a aplicação está funcionando conforme o esperado. Por exemplo, uma aplicação que sobrescreve o mesmo objeto a cada minuto durante uma semana pode criar mais de dez mil versões. Recomendamos armazenar menos de cem mil versões para cada objeto. Se você tiver um caso de uso que exija milhões de versões para um ou mais objetos, entre em contato com a equipe do AWS Support a fim de obter ajuda para determinar uma solução melhor.

Práticas recomendadas

Para evitar problemas de degradação do desempenho relacionada ao versionamento, recomendamos aplicar as seguintes práticas recomendadas:

  • Habilite uma regra de ciclo de vida para expirar as versões anteriores dos objetos. Por exemplo, você pode criar uma regra de ciclo de vida para expirar versões não atuais após 30 dias de inatividade do objeto. Você também poderá manter várias versões não atuais se não quiser excluir todas elas. Para obter mais informações, consulte Definir uma configuração do ciclo de vida do S3.

  • Habilite uma regra de ciclo de vida para excluir marcadores de exclusão de objetos expirados que não tenham objetos de dados associados no bucket. Para obter mais informações, consulte Remover marcadores de exclusão de objeto expirado.

Para ver mais práticas recomendadas de otimização de desempenho do Amazon S3, consulte Padrões de design de melhores práticas.