Restaurar versiones anteriores - Amazon Simple Storage Service

Restaurar versiones anteriores

Se puede utilizar el control de versiones para recuperar versiones anteriores de un objeto. Existen dos enfoques para hacerlo:

  • Copie una versión anterior del objeto en el mismo bucket.

    El objeto copiado se convierte en la versión actual del mismo, y se conservan todas las versiones del objeto.

  • Elimine permanentemente la versión actual del objeto.

    Al eliminar la versión actual del objeto, en efecto, estará convirtiendo la versión anterior en la versión actual del mismo.

Dado que se conservan todas las versiones de los objetos, puede hacer que cualquier versión sea la versión actual copiando una versión específica del objeto en el mismo bucket. En el siguiente gráfico, el objeto de origen (ID=111111) se copia en el mismo bucket. Amazon S3 facilita un nuevo ID (88778877) y se convierte en la versión actual del objeto. Por tanto, el bucket contendrá tanto la versión original del objeto (111111) como su copia (88778877). Para obtener más información acerca de cómo obtener una versión anterior y, a continuación, cargarla para convertirla en la versión actual, consulte Recuperación de versiones de objetos de un bucket habilitado para el control de versiones y Cargar objetos.

Un subsiguiente GET recupera la versión 88778877.

En el siguiente gráfico se muestra cómo eliminar la versión actual (121212) de un objeto, lo que deja la versión anterior (111111) como objeto actual. Para obtener más información acerca de cómo eliminar un objeto, consulte Supresión de un solo objeto.

Un subsiguiente GET recupera la versión 111111.

nota

Para restaurar las versiones de los objetos en lotes, puede utilizar la operación CopyObject. Mediante la operación CopyObject, se copia cada objeto especificado en el manifiesto. Sin embargo, tenga en cuenta que los objetos no se copian necesariamente en el mismo orden en el que aparecen en el manifiesto. Para los buckets con versiones, si es importante conservar el orden de versiones actual/no actual, primero debe copiar todas las versiones no actuales. Luego, una vez finalizado el primer trabajo, copie las versiones actuales en un trabajo posterior.

Restaurar versiones anteriores de objetos

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets (Buckets), elija el nombre del bucket que contiene el objeto.

  3. En la lista Objects (Objetos), elija el nombre del objeto.

  4. Elija Versions (Versiones).

    Amazon S3 muestra todas las versiones del objeto.

  5. Active la casilla de verificación situada junto al ID de versión de las versiones que desea recuperar.

  6. Elija (Actions) Acciones, elija Download (Descargar) y guarde el objeto.

También puede ver, descargar y eliminar las versiones de los objetos en el panel de información general de objetos. Para obtener más información, consulte Visualización de información general sobre objetos en la consola de Amazon S3.

importante

Solo puede anular la eliminación de un objeto si se ha eliminado en su última versión (la más reciente). No puede anular la eliminación de una versión anterior de un objeto que se haya eliminado. Para obtener más información, consulte Usar el control de versiones en buckets de S3.

Para obtener información acerca del uso de otros SDK de AWS, consulte el Centro de desarrolladores de AWS.

Python

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Mediante AWS SDK for Python (Boto).

En el siguiente ejemplo de código de Python, se restaura la versión anterior de un objeto versionado; para ello, se eliminan todas las versiones que se produjeron después de la versión de restauración 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}." )