Відновіть розроблене відро S3 до певного моменту часу


16

Скажімо, у мене ввімкнено версію S3 для мого відра: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Потім, скажімо, хтось (наприклад, молодший працівник) псує відро S3 (випадково видаляє деякі файли тощо)

Як я можу потім відновити все відро з версією до певного моменту часу? Я вважаю, що це повинно бути можливим, враховуючи API S3, але я краще не повинен сам писати такий сценарій, побоюючись чогось не пропустити (я не експерт AWS).

Чи є гарне рішення цієї проблеми? Я використовую відро S3 як магазин зображень для свого додатка Rails, тому щось на основі Ruby, що я могла використовувати як завдання граблі, було б ідеально.

Відповіді:


17

Можна використовувати s3-pit-restore

S3 Point in Time Restore - це інструмент, який ви можете точно використовувати для відновлення відра або підмножини відра до заданого моменту, наприклад:

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

Що насправді пропонує відновлення s3-pit:

  • Відновлення всіх файлів із позначкою часу менше, ніж заданий
  • Відновлення цілого відра або префікса відра
  • Паралельне завантаження декількох файлів з великою загальною швидкістю
  • Налаштування паралельних працівників розраховується для оптимізації використання пропускної здатності
  • Відновити з версій ковша s3 або з льодовика, якщо це включено

Це, здається, не працює для мене. Місце призначення створює лише локальний каталог, незважаючи на опис інструменту.
Артур

Ти врятував мій день. Дякуємо, що повідомили нам про дивовижний інструмент.
cyberrspiritt

2

Якщо я правильно розумію документацію , коли увімкнено версію, видалення файлу просто повертає "останню" версію на один номер версії. Це, однак, не дає можливості відновити ціле відро. Це робить попередні версії в S3 не підходящими для ваших потреб (тобто відновлення після видалення).

Зберігайте резервну копію десь ще, про всяк випадок. Переповнення стека має питання / відповідь на це за допомогою s3cmd. Я впевнений, що ви могли десь знайти сценарій на основі Ruby або попросити на цьому сайті допомоги, якщо вам це потрібно.


Правильно. Ви версуєте кожен окремий об'єкт у відрі, а не відро в цілому.
ЄЕАА

1
О, я все це розумію. Тому я усвідомлюю, що це не так просто. Ймовірно, мені доведеться перебрати всі файли у відрі, отримати інформацію про версію для кожного файлу, а потім вибрати правильний елемент (якщо він існує) залежно від часу дати, до якої я хочу "повернути". Не так просто. Я вважав, що в Amazon хоч щось є для такого поширеного випадку використання, але на жаль, ні ... Тож мені було цікаво, чи хтось уже написав цей нудний сценарій. Я розгляну s3cmd, але мені подобається також робити знімки на S3.
elsurudo

ця відповідь містить невірну інформацію - простий deleteвставляє маркер видалення, а майбутні запити повертають 404, а не попередню версію. В RESTORE ви можете скопіювати стару версію в нову версію або deleteз конкретною версією поточного об'єкта - тоді майбутнім getбуде надана друга до останньої версії. docs.aws.amazon.com/AmazonS3/latest/dev/… щоб бути справедливим, документи навколо версії ковша мають тенденцію бути невиразними та відсутніми ...
захоплюється

@keen Зауважте, що на це запитання відповіли майже три роки тому ... цілком можливо, вони оновили документацію. Хороший улов, хоча.
Натан C

посилання, на яке посилається docu, стосується відновлення (перегляд відновлення на високому рівні) і не змінилося - і, чесно кажучи, це більше ніж трохи заплутано, коли він починає говорити про видалення. просто хотів переконатися, що ніхто не бачив цього, і подумав, що "просто видалення об'єкта з версії s3, що означає, що стара версія почне повертатися" - це МОЖЕ відбутися, але вам потрібно спеціально видалити поточну версію (... / ключ ? versionId = xyz), щоб це сталося ...
захоплюється

1

Ось зручний маленький скрипт для php, який я використовував для відновлення відра із резервного копіювання відро з версією:

Для запуску резервного копіювання у відро з увімкненою версією

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

відновити резервну копію з файлів, розроблених між цими двома часовими позначками

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

ви можете завантажити скрипт PHP тут: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.