Ripristina un bucket S3 con versione in un determinato momento


16

Diciamo che ho abilitato il versioning S3 per il mio bucket: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Quindi, supponiamo che qualcuno (ad esempio un dipendente junior) rovini il bucket S3 (elimini accidentalmente alcuni file, ecc.)

Come posso quindi ripristinare l'intero bucket con versione in un determinato momento? Credo che questo dovrebbe essere possibile, dato l'API di S3, ma preferirei non dover scrivere un tale script da solo, per paura di perdere qualcosa (non sono un esperto AWS).

Ci sono buone soluzioni a questo problema? Sto usando il bucket S3 come archivio di immagini per la mia app Rails, quindi qualcosa di basato su Ruby che potrei usare come attività di rake sarebbe l'ideale.

Risposte:


17

Puoi usare s3-pit-restore

S3 Point in Time Restore è uno strumento che puoi utilizzare esattamente per ripristinare un bucket o un sottoinsieme di un bucket in un determinato momento, in questo modo:

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

Cosa offre effettivamente s3-pit-restore:

  • Ripristino di tutti i file con data e ora inferiore a quello indicato
  • Ripristino di un intero bucket o di un prefisso bucket
  • Download in parallelo di più file con una grande velocità complessiva
  • La personalizzazione dei lavoratori paralleli conta per ottimizzare l'utilizzo della larghezza di banda
  • Ripristina dalle versioni della benna s3 o dal ghiacciaio se abilitato

Questo non sembra funzionare per me. La destinazione crea solo una directory locale nonostante la descrizione dello strumento.
Arthur,

Mi hai salvato la giornata. Grazie per averci fatto conoscere lo strumento straordinario.
cyberrspiritt,

2

Se capisco correttamente la documentazione , quando hai abilitato il controllo delle versioni l'eliminazione del file ripristina semplicemente la versione "più recente" indietro di un numero di versione. Questo però non dà la possibilità di ripristinare un intero secchio. Questo rende le versioni precedenti in S3 non adatte alle tue esigenze (es. Recupero dalla cancellazione).

Conserva un backup altrove, per ogni evenienza. Stack Overflow ha una domanda / risposta su questo utilizzo s3cmd. Sono sicuro che potresti trovare uno script basato su Ruby da qualche parte o chiedere aiuto su quel sito se ne hai bisogno.


Corretta. Stai eseguendo la versione di ogni singolo oggetto nel bucket, non nel bucket nel suo insieme.
EEAA,

1
Oh, capisco tutto questo. Ecco perché mi rendo conto che non è così semplice. Probabilmente dovrei attraversare tutti i file nel bucket, ottenere le informazioni sulla versione per ciascun file e quindi selezionare l'elemento corretto (se esiste) in base alla data in cui voglio "ripristinare". Non così semplice Ho pensato che Amazon avrebbe pensato a qualcosa per un caso d'uso così comune, ma ahimè, no ... Quindi mi chiedevo se qualcuno avesse già scritto questo noioso copione. Esaminerò s3cmd, ma mi piace avere anche gli snapshot con versione su S3.
elsurudo,

questa risposta contiene informazioni errate: un semplice deleteinserisce un marcatore di eliminazione e le richieste future restituiscono un 404, non la versione precedente. Per ripristinare è possibile copiare una versione precedente in una nuova versione oppure è possibile deletecon una versione specifica dell'oggetto corrente, quindi ai futuri getverrà data la versione più recente. docs.aws.amazon.com/AmazonS3/latest/dev/… per essere onesti, il docu relativo al versioning del bucket tende ad essere vago e carente ...
appassionato

@keen Nota che questa domanda ha avuto risposta quasi tre anni fa ... è molto probabile che abbiano aggiornato la documentazione. Buona cattura, però.
Nathan C,

il collegamento a cui si fa riferimento per docu riguarda il ripristino (la vista di ripristino di altissimo livello) e non è cambiato - e, ad essere onesti, è più che un po 'confuso quando inizia a parlare di eliminazioni. volevo solo assicurarmi che nessuno lo vedesse e pensavo "semplicemente cancellare un oggetto da un bucket s3 con versione significa che la vecchia versione inizierà a essere restituita" - che PUO 'accadere, ma devi eliminare specificamente la versione corrente (... / chiave ? versionId = xyz) affinché ciò accada ...
acuto il

1

Ecco un utile piccolo script php che ho usato per ripristinare il mio bucket da un bucket di backup con versioning:

Per eseguire il backup in un bucket con il controllo delle versioni attivato

#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;

ripristinare il backup dai file che erano stati sottoposti a versione tra questi due timestamp

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

puoi scaricare lo script PHP qui: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.