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.