Restaurar un depósito S3 versionado a un punto en el tiempo particular

16

Digamos que tengo el control de versiones S3 habilitado para mi bucket: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Luego, digamos que alguien (por ejemplo, empleado junior) desordena el cubo S3 (elimina algunos archivos accidentalmente, etc.)

¿Cómo puedo restaurar todo el depósito versionado a un punto particular en el tiempo? Creo que esto debería ser posible dada la API de S3, pero prefiero no tener que escribir ese script yo mismo, por miedo a perderme algo (no soy un experto en AWS).

¿Hay una buena solución para este problema? Estoy usando el cubo S3 como una tienda de imágenes para mi aplicación Rails, por lo que algo basado en Ruby que podría usar como una tarea de rastrillo sería ideal.

elsurudo
fuente

Respuestas:

17

Puedes usar s3-pit-restore

S3 Point in Time Restore es una herramienta que puede usar exactamente para restaurar un depósito o un subconjunto de un depósito en un momento dado, como este:

s3-pit-restore --bucket my-bucket --dest my-restored-bucket --timestamp "06-17-2016 23:59:50 +2"

Lo que realmente ofrece s3-pit-restore:

  • Restauración de todos los archivos con una marca de tiempo inferior a la indicada
  • Restauración de un cubo completo o un prefijo de cubo
  • Descarga paralela de múltiples archivos con una gran velocidad general
  • Personalización del recuento de trabajadores paralelos para optimizar el uso del ancho de banda
  • Restaurar desde versiones de cubo s3 o desde glaciar si está habilitado
Angelo
fuente
Esto no parece funcionar para mí. El destino solo crea un directorio local a pesar de la descripción de la herramienta.
Arthur
Me has salvado el día. Gracias por dejarnos saber la increíble herramienta.
cyberrspiritt
2

Si entiendo la documentación correctamente, cuando haya habilitado el control de versiones, la eliminación del archivo simplemente revierte la versión "más reciente" un número de versión. Sin embargo, esto no le da la capacidad de restaurar un cubo completo. Esto hace que las versiones anteriores en S3 no sean adecuadas para sus necesidades (es decir, recuperación de la eliminación).

Mantenga una copia de seguridad en otro lugar también por si acaso. Stack Overflow tiene una pregunta / respuesta sobre este uso s3cmd. Estoy seguro de que podría encontrar un script basado en Ruby en algún lugar o pedir ayuda en ese sitio si lo necesita.

Nathan C
fuente
Correcto. Está versionando cada objeto individual en el depósito, no el depósito en su conjunto.
EEAA
1
Oh, entiendo todo eso. Por eso me doy cuenta de que no es tan simple. Probablemente tendría que atravesar todos los archivos en el depósito, obtener información de la versión para cada archivo y luego elegir el elemento correcto (si existe) en función de la fecha a la que quiero "volver". No es tan simple. Pensé que Amazon habría pensado en algo para un caso de uso tan común, pero, por desgracia, no ... Así que me preguntaba si alguien ya escribió este tedioso guión. Lo investigaré s3cmd, pero también me gusta tener instantáneas versionadas en S3.
elsurudo
esta respuesta contiene información incorrecta: un simple deleteinserta un marcador de eliminación y las solicitudes futuras devuelven un 404, no la versión anterior. Para RESTAURAR puede copiar una versión anterior a una nueva versión o puede hacerlo deletecon una versión específica del objeto actual; luego, a los futuros se getles asigna la segunda versión más reciente. docs.aws.amazon.com/AmazonS3/latest/dev/... para ser justos, el docu alrededor de cubo de versiones tiende a ser impreciso y carente ...
Keen
@keen Tenga en cuenta que esta pregunta fue respondida hace casi tres años ... es muy posible que hayan actualizado la documentación. Buena captura, sin embargo.
Nathan C
el enlace al que se hace referencia para documenta es sobre recuperación (la vista de recuperación de nivel súper alto) y no ha cambiado, y para ser justos, es más que un poco confuso cuando comienza a hablar de eliminaciones. solo quería asegurarme de que nadie viera esto y pensara "simplemente eliminar un objeto de un cubo s3 versionado significa que la versión anterior comenzará a devolverse", eso PUEDE suceder, pero debe eliminar específicamente la versión actual (... / clave ? versionId = xyz) para que eso suceda ...
interesado el
1

Aquí hay un pequeño script php útil que utilicé para restaurar mi bucket de un bucket de respaldo con versiones:

Para volver a subir a un cubo con el control de versiones activado

#CONFIGURATION
export bucket_to_backup='example-of-a-bucket-name';
export backup_bucket='example-of-a-backup-bucket-name'; 
export AWS_ACCESS_KEY_ID=ASDFDSAFADSFDASF;
export AWS_SECRET_ACCESS_KEY=adsfdsaf86adsf5adsf568aadf75ads;
#you will need to download and install the s3cmd tool at the following url:
#http://s3tools.org/
s3cmd --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --recursive sync s3://$bucket_to_backup s3://$backup_bucket;

restaurar la copia de seguridad de los archivos versionados entre estas dos marcas de tiempo

export startSnapShotTimeStamp=1427577934;
export endSnapShotTimeStamp=1427577939;
#do the restore with php script
php awsUtil.php sync example-of-a-backup-bucket-name example-of-a-bucket-name $startSnapShotTimeStamp-$endSnapShotTimeStamp

Puede descargar el script PHP aquí: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

usuario278847
fuente