Ir para o conteúdo

Como faço para recuperar um objeto do Amazon S3 que eu excluí em um bucket de uso geral ativado para versionamento?

6 minuto de leitura
0

Quero recuperar um objeto que foi excluído do meu bucket de uso geral do Amazon Simple Storage Service (Amazon S3) com o versionamento ativado.

Breve descrição

Observação: o versionamento do S3 está disponível somente para buckets de uso geral. Os buckets de diretórios e tabelas não oferecem suporte ao versionamento do S3.

Quando você exclui um objeto de um bucket ativado para versionamento, o Amazon S3 cria um marcador de exclusão para o objeto. O marcador de exclusão se torna a versão atual do objeto e o objeto se torna a versão anterior. Com um marcador de exclusão, o Amazon S3 responde às solicitações do objeto como se ele tivesse sido excluído. Por exemplo, se você enviar uma solicitação GET para o objeto, o Amazon S3 retorna um erro.

Para recuperar um objeto que foi excluído de um bucket ativado para versionamento, conclua uma das seguintes tarefas:

  • Baixe a versão anterior do objeto. Você deve ter a permissão s3:GetObjectVersion.
  • Use uma conta da AWS que tenha a permissão s3:DeleteObjectVersion para remover um marcador de exclusão. A versão mais recente não excluída então se torna a versão atual do objeto para que seja possível acessar o objeto excluído anteriormente em um bucket versionado.
  • Observação: se você configurou a exclusão com autenticação multifator (MFA) no bucket, deve usar a MFA para remover o marcador de exclusão.

Resolução

Importante: não é possível recuperar dados que você exclui permanentemente de um bucket.

Use o console do Amazon S3 para baixar a versão anterior do objeto

Conclua as etapas a seguir:

  1. Abra o console do Amazon S3.
  2. No painel de navegação, clique em Buckets e selecione o bucket do objeto excluído.
  3. Para ver uma lista das versões do objeto, ative Mostrar versões.
  4. Selecione a versão do objeto excluído que você deseja recuperar.
  5. Selecione Ações e, em seguida, clique em Baixar.

Use a AWS CLI para baixar a versão anterior do objeto

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI. Nos comandos a seguir, substitua DOC-EXAMPLE-BUCKET pelo nome do seu bucket.

Conclua as etapas a seguir:

  1. Execute o comando list-object-versions para listar as versões do objeto:

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/

    Observação: o comando anterior inclui a opção --prefix para filtrar os resultados para o prefixo do nome de chave especificado. Use essa opção para reduzir o número de resultados quando seu bucket contiver muitas versões de objetos.

  2. Na saída do comando, anote o ID da versão anterior do objeto.

  3. Execute o comando get-object para recuperar a versão:

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt

Use o console do Amazon S3 para remover o marcador de exclusão

Conclua as etapas a seguir:

  1. Na conta que possui o bucket do objeto excluído, abra o console do Amazon S3.
  2. No painel de navegação, clique em Buckets e selecione o bucket do objeto excluído.
  3. Para ver uma lista das versões do objeto, ative Mostrar versões.
  4. Selecione o Marcador de exclusão do objeto.
    Importante: certifique-se de selecionar o marcador de exclusão e não o objeto em si. Caso contrário, não será possível recuperar o objeto.
  5. Na página Excluir objetos, em Excluir objetos permanentemente?, insira excluir permanentemente.
  6. Clique em Excluir.
    Importante: não é possível usar o console do Amazon S3 para recuperar pastas. Em vez disso, você deve usar a AWS CLI ou o AWS SDK.

Use a AWS CLI para remover o marcador de exclusão

É possível usar a AWS CLI para remover o marcador de exclusão em vários objetos, milhares de objetos ou milhões de objetos.

Remova o marcador de exclusão em vários objetos

Conclua as etapas a seguir:

  1. Execute o comando list-object-versions a seguir com o parâmetro --query:

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --query 'DeleteMarkers[*].{Key: Key, VersionId: VersionId}'

    Observação: o comando anterior inclui a opção --prefix para filtrar os resultados para o prefixo do nome de chave especificado.

  2. Na saída do comando, anote o ID da versão do marcador de exclusão.
    Importante: certifique-se de ter anotado o ID da versão do marcador de exclusão. Se você excluir uma versão do objeto, não é possível recuperá-la.

  3. Execute o comando delete-object para remover o marcador de exclusão:

    aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'
  4. Para verificar se o marcador de exclusão foi removido, execute o comando ls:

    aws s3 ls s3://DOC-EXAMPLE-BUCKET

Remova o marcador de exclusão em milhares de objetos

Aviso: é uma prática recomendada fazer backup dos seus dados antes de executar o seguinte comando list-object-versions. O comando usa a ação da API s3api delete-object para excluir os objetos marcadores de exclusão identificados. A exclusão de objetos é uma ação permanente. Modificações na estrutura desse comando podem causar perda inesperada de dados.

Conclua as etapas a seguir:

  1. Abra o console do AWS CloudShell.
  2. Execute o comando list-object-versions:
    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --output json --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId]' | jq -r '.[] | "--key " + "'\\\"'" + .[0] + "'\\\"'" + " --version-id " + .[1]' | xargs -L1 -t aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET
    Observação: o comando anterior usa a ferramenta jq para analisar a resposta ListObjectVersions para DeleteMarkers da versão atual. Por padrão, o jq é instalado no AWS CloudShell. Se você não interagir com o ambiente do shell, sua sessão do shell será encerrada. Para obter mais informações sobre a ferramenta jq, consulte ./jq no site da jq.

Remova o marcador de exclusão em milhões de objetos

Para remover o marcador de exclusão em milhões de objetos em um bucket, use um script personalizado com o AWS SDK. Para obter mais informações, expanda a guia Usar SDKs da AWS.

Observação: quando você executa list-object-versions em um bucket que tem milhões de objetos, pode obter um tempo limite.

AWS OFICIALAtualizada há 4 meses