Restaurar una Versión anterior de un objeto en un Bucket S3
Para restaurar un versión anterior de un objeto de un bucket S3 con versionado activado, los pasos a realizar son:
- Identificar la versión del objetto a restaurar
 - Descargar la versión específica que se quiere restaurar
 - Volver a subir la versión a S3 para que se genere una nueva con los datos de la anterior
 
Para hacer esto, yo prefiero usar el módulo s3api de aws cli.
Entonces,
En este ejemplo:
Bucket: test-bucket
File: test-file.sh
Path: test-folder/
- Identificar la versión del objeto a restaurar:
 
aws s3api list-object-versions --bucket test-bucket --prefix test-folder/
{
    "Versions": [
    {
        "LastModified": "2018-07-05T16:06:41.000Z", 
        "VersionId": "fGI4Z7jLYHO5kZ1QFCScFkJPkZ2IeYHu9", 
        "ETag": "\"b5b6f5f4be1e23b8cfba80b1941d5e9c\"", 
        "StorageClass": "STANDARD", 
        "Key": "test-folder/test-file.sh", 
        "Owner": {
            "DisplayName": "test-display", 
            "ID": "6f46ba54a1e3507678b563b6a9bd137fd391ac30e69fc1f3910befc4028f82cd4"
        }, 
        "IsLatest": true, 
        "Size": 104123
    }, 
    {
        "LastModified": "2018-07-05T15:01:16.000Z", 
        "VersionId": "yymMXqTH0yofs4iBwIkdXoQuVu9Y8gw1H", 
        "ETag": "\"c3709774431851208dcbe538ba56a6ec\"", 
        "StorageClass": "STANDARD", 
        "Key": "test-folder/test-file.sh", 
        "Owner": {
            "DisplayName": "test-display", 
            "ID": "6f46ba54a1e350767b563b6a9bd137fd391ac30e69fc1f39100befc4028f82cd4"
        }, 
        "IsLatest": false, 
        "Size": 180550
    }, 
    {
        "LastModified": "2018-07-05T16:32:59.000Z", 
        "VersionId": "j_b1POqHy7pYz1GP.mc6wUjSgCixeiBpq", 
        "ETag": "\"b5b6f5f4be1e23b8cfba80b1941d5e9c\"", 
        "StorageClass": "STANDARD", 
        "Key": "test-folder/test-file.sh", 
        "Owner": {
            "DisplayName": "test-display", 
            "ID": "6f46ba547a1e350767b563b6a9bd137fd391ac30e69fc1f3910befc4028f82cd4"
        }, 
        "IsLatest": false, 
        "Size": 104123
    }
    ]
}
Del resultado anterior, la primer entrada es la versión actual, lo comprobamos por qué tiene el flag IsLatest en true y además por la fecha.
Nosotros queremos restaurar la versión anterior, que sería la segunda entrada y el VersionID es: yymMXqTH0yofs4iBwIkdXoQuVu9Y8gw1H
- Descargamos el archivo en su versión yymMXqTH0yofs4iBwIkdXoQuVu9Y8gw1H
 
aws s3api get-objects --bucket test-bucket --key test-folder/test-file.sh.old --version-id yymMXqTH0yofs4iBwIkdXoQuVu9Y8gw1H path-to-download/file
- Volvemos a subir el archivo a la misma ubicación
 
aws s3api put-object --bucket test-bucket --key test-folder/test-file.sh.old --body path-to-download/file
De esta manera generamos una nueva última versión del archivo a partir de la versión anterior.
Saludos WachOps.