

# Restaurar versiones anteriores
<a name="RestoringPreviousVersions"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) y [Cargar objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

![\[Ilustración que muestra la copia de una versión específica de un objeto en el mismo bucket para convertirla en la versión actual.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_COPY2.png)


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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html).

![\[Ilustración que muestra cómo al eliminar la versión actual de un objeto se deja la versión anterior como objeto actual.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


Un subsiguiente `GET` recupera la versión 111111.

**nota**  
Para restaurar las versiones de los objetos en lotes, puede [utilizar la operación `CopyObject`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html). 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
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

Para obtener más orientación sobre la restauración de objetos eliminados, consulte [How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket?](https://repost.aws/knowledge-center/s3-undelete-configuration) en el Centro de conocimientos de AWS re:Post.

### Uso de la consola de S3
<a name="retrieving-object-versions"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

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

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

1. Elija **Versions (Versiones)**.

   Amazon S3 muestra todas las versiones del objeto.

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

1. 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 propiedades de objeto en la consola de Amazon S3](view-object-properties.md).

**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 [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

### Uso de los AWS SDK
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/). 

------
#### [ Python ]

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

------