View a markdown version of this page

Restaurar versões anteriores - Amazon Simple Storage Service

Restaurar versões anteriores

Você pode usar o versionamento para recuperar versões anteriores de um objeto. Existem duas abordagens para se fazer isso:

  • Copie uma versão anterior do objeto para o mesmo bucket.

    O objeto copiado torna-se a versão atual desse objeto e todas as versões são preservadas.

  • Exclua permanentemente a versão atual do objeto.

    Quando você exclui a versão atual do objeto, torna a versão anterior a versão atual desse objeto.

Como todas as versões do objeto são preservadas, você pode fazer de qualquer versão anterior a versão atual copiando uma versão específica do objeto para o mesmo bucket. Na figura a seguir, o objeto de origem (ID = 111111) é copiado para o mesmo bucket. O Amazon S3 fornece um novo ID (88778877) e ele se torna a versão atual do objeto. Assim, o bucket tem tanto a versão original (111111) quanto a cópia (88778877) do objeto. Para obter mais informações sobre como obter uma versão anterior e carregá-la para torná-la a versão atual, consulte Recuperação de versões de objeto de um bucket habilitado para versionamento e Upload de objetos.

Cópia de uma versão específica de um objeto no mesmo bucket para torná-la a versão atual.

Um subsequente GET recupera a versão 88778877.

A figura a seguir mostra como excluir a versão atual (121212) de um objeto deixa a versão anterior (111111) como a atual do objeto. Para obter mais informações sobre como excluir um objeto, consulte Excluir um único objeto.

A exclusão da versão atual de um objeto torna a versão anterior a atual.

Um subsequente GET recupera a versão 111111.

nota

Para restaurar versões de objetos em lotes, use a operação CopyObject. A operação CopyObject copia cada objeto especificado no manifesto. No entanto, esteja ciente de que os objetos não são necessariamente copiados na mesma ordem em que estão listados no manifesto. Para buckets versionados, se preservar a ordem de versão atual/não atual for importante, você deve copiar todas as versões não atuais primeiro. Em seguida, após a conclusão do primeiro trabalho, copie as versões atuais em um trabalho subsequente.

Para restaurar versões anteriores de objetos

Para ter mais informações sobre como restaurar objetos, consulte How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket? no Centro de Conhecimento do AWS re:Post.

É possível restaurar uma versão anterior de um objeto usando o console do Amazon S3 ao excluir a versão atual. Com essa exclusão, a versão anterior se torna a nova versão atual.

Para restaurar uma versão anterior excluindo a versão atual
  1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

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

  3. Na lista Objetos , escolha o nome do objeto.

  4. Escolha Versões.

    O Amazon S3 mostra todas as versões do objeto.

  5. Marque a caixa de seleção ao lado do ID da versão atual (mais recente) que deseja excluir.

  6. Escolha Excluir.

  7. Na caixa de diálogo Excluir objetos, insira permanently delete e escolha Excluir objetos.

    Depois de excluir a versão atual, a versão anterior se torna a versão atual.

Para baixar uma versão anterior
  1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

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

  3. Na lista Objetos , escolha o nome do objeto.

  4. Escolha Versões.

    O Amazon S3 mostra todas as versões do objeto.

  5. Marque a caixa de seleção ao lado do ID da versão para as versões que deseja recuperar.

  6. Escolha Ações, escolha Downloade salve o objeto.

Você também pode visualizar, fazer download e excluir versões do objeto no painel de visão geral do objeto. Para obter mais informações, consulte Exibir propriedades do objeto no console do Amazon S3.

nota

Para copiar uma versão anterior (tornando-a a nova versão atual), use os SDKs da AWS CLI ou AWS — essa abordagem não está disponível no console do Amazon S3. Para obter um exemplo, consulte a guia AWS CLI.

Importante

Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que foi excluído. Para obter mais informações, consulte Reter várias versões de objetos com o Versionamento do S3.

Para restaurar uma versão anterior copiando-a no local, use o comando copy-object. Para o parâmetro --copy-source, especifique o ID da versão anterior que deseja restaurar:

aws s3api copy-object \ --bucket amzn-s3-demo-bucket \ --key my-object.jpg \ --copy-source amzn-s3-demo-bucket/my-object.jpg?versionId=previous-version-id

Isso cria uma nova versão atual do objeto com o conteúdo da versão anterior especificada. O Amazon S3 preserva todas as versões existentes.

Para obter informações sobre o uso de outros AWS SDKs, consulte o Centro do Desenvolvedor da AWS.

Python

O exemplo de código Python a seguir restaura a versão anterior de um objeto versionado excluindo todas as versões criadas após a versão de reversão especificada.

def rollback_object(bucket, object_key, version_id): """ Rolls back an object to an earlier version by deleting all versions that occurred after the specified rollback version. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that holds the object to roll back. :param object_key: The object to roll back. :param version_id: The version ID to roll back to. """ # Versions must be sorted by last_modified date because delete markers are # at the end of the list even when they are interspersed in time. versions = sorted( bucket.object_versions.filter(Prefix=object_key), key=attrgetter("last_modified"), reverse=True, ) logger.debug( "Got versions:\n%s", "\n".join( [ f"\t{version.version_id}, last modified {version.last_modified}" for version in versions ] ), ) if version_id in [ver.version_id for ver in versions]: print(f"Rolling back to version {version_id}") for version in versions: if version.version_id != version_id: version.delete() print(f"Deleted version {version.version_id}") else: break print(f"Active version is now {bucket.Object(object_key).version_id}") else: raise KeyError( f"{version_id} was not found in the list of versions for " f"{object_key}." )