

# Recuperar versiones de objetos de un bucket habilitado para el control de versiones
<a name="RetrievingObjectVersions"></a>

El control de versiones en Amazon S3 es una forma de mantener varias variantes de un objeto en el mismo bucket. Una solicitud `GET` sencilla recupera la versión actual de un objeto. El siguiente gráfico muestra cómo `GET` devuelve la versión actual del objeto, `photo.gif`.

![\[Ilustración que muestra cómo GET devuelve la versión actual del objeto.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


Para recuperar una versión específica, debe especificar su ID de versión. El siguiente gráfico muestra cómo una solicitud `GET versionId` devuelve la versión especificada del objeto (no necesariamente la actual).

![\[Ilustración que muestra cómo una solicitud GET versionId devuelve la versión especificada del objeto.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


Puede recuperar versiones de objetos en Amazon S3 mediante la consola, los SDK de AWS o la API de REST.

**nota**  
 Para acceder a versiones de objetos anteriores a 300 versiones, debe usar la CLI de AWS o la URL del objeto.

## 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="retrieve-obj-version-sdks"></a>

Los ejemplos para cargar objetos en buckets sin control de versiones y habilitados para el control de versiones son los mismos. Sin embargo, para los buckets habilitados para el control de versiones, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo.

Para obtener ejemplos de la descarga de objetos mediante los SDK de AWS para Java, .NET y PHP, consulte [Descarga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html).

Para ver ejemplos de cómo mostrar la versión de los objetos mediante los SDK de AWS para .NET y Rust, consulte [Listar la versión de los objetos en un bucket de Amazon S3](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html).

## Uso de la API de REST
<a name="retrieve-obj-version-rest"></a>

**Para recuperar una versión de objeto específica:**

1. Establezca el parámetro `versionId` según el ID de la versión del objeto que quiera recuperar.

1. Envíe una solicitud `GET Object versionId`.

**Example — Recuperar un objeto con control de versiones**  
La siguiente solicitud recupera la versión `L4kqtJlcpXroDTDmpUMLUo` de `my-image.jpg`.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Solo se pueden recuperar los metadatos de un objeto (no el contenido). Para obtener información, consulte [Recuperar los metadatos de una versión de un objeto](RetMetaOfObjVersion.md).

Para obtener información sobre cómo restaurar una versión de objeto anterior, consulte [Restaurar versiones anteriores](RestoringPreviousVersions.md).

# Recuperar los metadatos de una versión de un objeto
<a name="RetMetaOfObjVersion"></a>

Si solo quiere recuperar los metadatos de un objeto (y no su contenido), puede usar la operación `HEAD`. De forma predeterminada, obtendrá los metadatos de la versión más reciente. Para recuperar los metadatos de una versión de objeto específica, debe especificar su ID de versión.

**Para recuperar los metadatos de una versión de objeto:**

1. Establezca el parámetro `versionId` según el ID de la versión del objeto cuyos metadatos quiera recuperar.

1. Envíe una solicitud `HEAD Object versionId`.

**Example — Recuperar los metadatos de un objeto con control de versiones**  
La siguiente solicitud recupera los metadatos de la versión `3HL4kqCxf3vjVBH40Nrjfkd` de `my-image.jpg`.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

A continuación se muestra una respuesta de ejemplo.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

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

------