Відновіть розроблене відро 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.