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/

  1. 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

  1. 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

  1. 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.

Read more