miércoles, 26 de enero de 2022

AWS cli: recuperar versión de un fichero en S3



Cómo recuperar una versión concreta de un fichero alojado en un bucket S3 de AWS.



Veamos cómo recuperar una versión concreta de un fichero alojado en un bucket S3 de AWS.

En este ejemplo, el bucket se llama "blai-1".

Primero de todo, debemos tener habilitado o habilitar el versionado:

[ec2-user@ip-10-5-0-143 ~]$ aws s3api put-bucket-versioning --bucket s3-blai-1 --versioning-configuration Status=Enabled

Imaginemos que tenemos 3 ficheros en el bucket "blai-1":

[ec2-user@ip-10-5-0-143 ~]$ aws s3 ls s3://s3-blai-1/files/ 2021-11-24 11:56:31 30318 file1.txt 2021-11-24 11:56:32 43784 file2.txt 2021-11-24 11:56:32 96675 file3.txt

Borramos file1.txt en local:

[ec2-user@ip-10-5-0-143 ~]$ sudo rm files/file1.txt sudo rm files/file1.txt

Hacemos un sync de archivos con el flag delete (borra en el bucket aquello que no exista en local):

[ec2-user@ip-10-5-0-143 ~]$ aws s3 sync files s3://s3-blai-1/files/ --delete delete: s3://s3-blai-1/files/file1.txt

Tras la instrucción anterior, listamos los ficheros presentes en el bucket:

[ec2-user@ip-10-5-0-143 ~]$ aws s3 ls s3://s3-blai-1/files/ 2021-11-24 11:56:32 43784 file2.txt 2021-11-24 11:56:32 96675 file3.txt

Observamos que file1.txt ya no existe.

De repente necesitamos el file1.txt. Listamos sus versiones:

[ec2-user@ip-10-5-0-143 ~]$ aws s3api list-object-versions --bucket s3-blai-1 --prefix files/file1.txt { "DeleteMarkers": [ { "Owner": { "DisplayName": "aws038351", "ID": "2a6f0ac58291262d92b44b112cda554a8cf030cd5d4d742a7b60af5a5b89fd86" }, "IsLatest": true, "VersionId": "Nd1QvuJY56xi7nFHSC2ej_3nvm7xvw1u", "Key": "files/file1.txt", "LastModified": "2021-11-24T11:57:35.000Z" } ], "Versions": [ { "LastModified": "2021-11-24T11:56:31.000Z", "VersionId": "M3YMFwyIciILCfa.VX3pRdlLJkheUjy1", "ETag": "\"b76b2b775023e60be16bc332496f8409\"", "StorageClass": "STANDARD", "Key": "files/file1.txt", "Owner": { "DisplayName": "aws038351", "ID": "2a6f0ac58291262d92b44b112cda554a8cf030cd5d4d742a7b60af5a5b89fd86" }, "IsLatest": false, "Size": 30318 } ] }

Recuperamos la versión M3YMFwyIciILCfa.VX3pRdlLJkheUjy1 del fichero file1.txt, con fecha 2021-11-24T11:56:31.000Z:

[ec2-user@ip-10-5-0-143 ~]$ sudo aws s3api get-object --bucket s3-blai-1 --key files/file1.txt --version-id M3YMFwyIciILCfa.VX3pRdlLJkheUjy1 files/file1.txt { "AcceptRanges": "bytes", "ContentType": "text/plain", "LastModified": "Wed, 24 Nov 2021 11:56:31 GMT", "ContentLength": 30318, "VersionId": "M3YMFwyIciILCfa.VX3pRdlLJkheUjy1", "ETag": "\"b76b2b775023e60be16bc332496f8409\"", "Metadata": {} }

Listamos los ficheros en local:

[ec2-user@ip-10-5-0-143 ~]$ ls -la 2022-01-26 11:56:31 30318 file1.txt 2021-11-24 11:56:32 43784 file2.txt 2021-11-24 11:56:32 96675 file3.txt

Sincornizamos los ficheros hacia el bucket:

[ec2-user@ip-10-5-0-143 ~]$ aws s3 sync files s3://s3-blai-1/files/ upload: files/file1.txt to s3://s3-blai-1/files/file1.txt

Listamos los ficheros del bucket:

[ec2-user@ip-10-5-0-143 ~]$ aws s3 ls s3://s3-blai-1/files/ 2022-01-26 11:00:18 30318 file1.txt 2021-11-24 11:56:32 43784 file2.txt 2021-11-24 11:56:32 96675 file3.txt

Tras el sync, file1.txt vuelve a estar presente.
0