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.

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.

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

  1. Faça login no AWS Management Console 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 uma visão geral do objeto no console do Amazon S3.

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 Usando o versionamento em buckets do S3.

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

Python

Para obter instruções sobre como criar e testar um exemplo funcional, consulte Usar a AWS SDK for Python (Boto).

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}." )