Назад | Перейти на главную страницу

Как создать автономную инкрементную резервную копию корзины AWS S3

Я ищу способ делать ежедневные резервные копии корзины AWS в виде инкрементных резервных копий. Они должны храниться в автономном режиме и отдельно от AWS.

Для других систем хранения (таких как NAS-диски) я ежедневно использую rsync для резервных копий. Использование rsync --link-dest switch, я могу каждый день делать полный снимок удаленной файловой системы. Любые файлы, которые не изменились с момента предыдущей резервной копии, жестко привязаны к предыдущей резервной копии. Это означает, что полные ежедневные моментальные снимки занимают только место для инкрементных резервных копий.

Я хотел бы настроить что-то подобное для ведра amazon S3. В корзине 20 ГБ, но меняется только ~ 50 МБ в день.

Обратите внимание, что это резервное копирование содержимого корзины S3, а НЕ резервное копирование другого содержимого в корзину S3.

Я вижу, как бы я использовал инструменты AWS CLI для выполнения полных резервных копий. Я не понимаю, как делать инкрементные резервные копии.

Думаю, я мог бы (ежедневно) синхронизировать S3 с локальным жестким диском, а затем ежедневно делать резервную копию локального жесткого диска. Это кажется очень неуклюжим.

редактировать

Это задумывалось как простой технический вопрос, а не как общее обсуждение безопасности резервного копирования. Но поскольку меня спрашивают «зачем вам это нужно», теперь я понимаю, что мне нужно объяснить основные принципы резервного копирования.

Анекдот: недавно я стал свидетелем того, как сторонний ИТ-провайдер полностью отказался от корзины S3 из-за недопонимания. Это могло быть очень дорого (~ 100 тысяч фунтов стерлингов недавних работ, ~ 1 миллион фунтов стерлингов всего труда). К счастью, у нас также были копии на наших локальных ноутбуках, и всего за 1000 фунтов стерлингов мы перестроили для них контент.

Это обновило мою убежденность в том, что единственная действительная «резервная копия» находится на изолированная система хранится за пределами площадки и не в сети, и с ротацией медиа, которая эффективно реализует временная блокировка. Другие резервные копии могут быть улучшены, обеспечивая более быстрое восстановление и т. Д., Но хранение всех ваших резервных копий AWS в вашей собственной учетной записи AWS просто небезопасно, потому что ... ошибка пользователя.

Примечание: это ответ на исходный вопрос перед он даже упомянул не в сети резервные копии. Оставив его здесь как ответ на исходный вопрос: Как создать инкрементную резервную копию корзины AWS S3.

Первый вопрос Почему вы хотите создать резервную копию корзины S3? От какой проблемы вы пытаетесь защититься?

  • Помни это S3 долговечность где-то около 99,99999% - вы крайне маловероятно потерять объекты из-за сбоя HW, поэтому мы можем это исключить.

  • Если вы хотите убедиться, что случайно перезаписанные объекты в S3 можно восстановить, вы можете использовать Управление версиями S3 - это сохранит историю всех более старых версий файла, и вы сможете восстановить их таким образом. То же самое для удалений.

  • Кстати об удалениях - вы можете потребовать использования MFA для удаления S3 в качестве еще одного уровня защиты, например по причинам соответствия и аудита. (спасибо Тим :)

  • Если вам нужен второй DR (аварийное восстановление) bucket в каком-либо другом регионе на случай, если ваш основной регион перейдет в автономный режим, вы можете использовать Межрегиональная репликация S3 это будет автоматически отражать содержимое вашего ведра из одного региона в другой при каждом изменении.

  • Если ничто из вышеперечисленного по-прежнему не удовлетворяет ваши потребности, возможно, вы захотите Лямбда-функция который обрабатывает каждое изменение в ведре S3 за вас. Таким образом, каждый раз, когда вы пишете / обновляете объект в S3, Lambda будет делать резервную копию в желаемое место назначения. Это можно использовать, например, для зеркалирования сегментов S3 между разными учетными записями AWS, другими облачными провайдерами или офлайн направления (например, на ваш локальный сервер). С Lambda у вас есть максимальная гибкость в том, что делать с изменениями. Видеть Использование Lambda с Amazon S3.

  • Если этого все еще недостаточно, вы всегда можете использовать aws s3 sync который сравнивает исходные и целевые сегменты и копии только что изменилось.

  • (Обновление) Для автономные резервные копии

    • Вы, конечно, можете использовать aws s3 sync а также - которые могут синхронизироваться с дисками и с дисков, а не только между бакетами.
    • Или вы можете разработать более сложное решение, основанное на отлове S3 События при создании / обновлении объектов и копировании их в автономное хранилище, как только это произойдет. Это должна быть довольно простая программа, сидящая на вашем сервере, прослушивающая события S3 или сообщения SNS и обращение к S3 за обновленными объектами.

Есть из чего выбирать. Надеюсь, что некоторые из них вам подходят :)

Кроме того, есть способ aws s3 sync, но это может быть так же неуклюже. Видите ли, все сводится к добавлению перехвата Lambda в корзину S3, которая запускается по PUT. Теоретически это позволит вам построить Только надстройка реплика корзины S3, поэтому любые операции DELETE не реплицируются. Для этого есть руководства, но по сути:

  1. Объект эксплуатируется в ведре.
  2. Лямбда запускается при наличии данных события для операции.
  3. Если операция PUT, ваш написанный код делает что-то с этим объектом. Он игнорирует DELETE.

Логика инкрементного резервного копирования будет написана вами.