Skip to content

Практическое руководство: миграция данных из Amazon S3 в Object Storage #1151

Description

@bontail

Идентификатор платежного аккаунта: dn2ujjv4advyulwqk7mp

Написал практическое руководство про перенос данных из стороннего S3-совместимого хранилища в {{ objstorage-name }}. Текст уже принес в PR #1150, но README просит крупные материалы сначала обсуждать, поэтому завожу Issue с планом. Если по плану будут замечания, перепишу текст в том же PR или закрою его и принесу новый.

Почему кажется, что это нужно

В разделе «Хранение и восстановление данных» девять руководств про резервное копирование в Object Storage и ни одного про перенос данных из другого хранилища. Ближайшее по смыслу это «Миграция в Yandex Cloud с помощью Хайстекс Акура», но она про виртуальные машины, а не про объектное хранилище.

Миграция в Yandex Cloud есть в списке важных тем в guides/needs-contributing.md. Перенос объектного хранилища выглядит как самый частый первый шаг: сервис совместим с Amazon S3 API, приложение почти не меняется, надо переложить данные и переключить эндпоинт. Сценария для этого в документации нет.

Есть страница про rclone в разделе «Инструменты» и руководство по резервному копированию с локальной машины, но перенос между двумя S3-хранилищами нигде не описан.

Что в руководстве

«Миграция данных из Amazon S3 в Object Storage с помощью rclone». Шаги:

  1. Подготовка облака.
  2. Создание бакета.
  3. Сервисный аккаунт с ролью storage.editor.
  4. Статический ключ доступа.
  5. Подготовка доступа на чтение к бакету в Amazon S3: s3:ListBucket и s3:GetObject.
  6. Установка rclone на Linux и Windows.
  7. Настройка двух подключений в rclone.conf, по одному на каждое хранилище.
  8. Перенос данных: rclone copy, затем финальная rclone sync перед переключением.
  9. Проверка результата: rclone check и rclone size.
  10. Переключение приложения на новый эндпоинт.
  11. Удаление созданных ресурсов.

Подключения показаны секциями конфигурационного файла, а не диалогом rclone config: подключений два, и файл нагляднее.

Что разобрано в тексте отдельно

Места, на которых перенос дает неожиданный результат:

  • rclone переносит только текущие версии объектов. Предыдущие версии, метки, ACL и класс хранения не переносятся. Что из этого нужно настроить на бакете-приемнике руками, собрано в шаге переключения вместе с политикой доступа, версионированием, жизненными циклами и CORS.
  • copy и sync ведут себя по-разному. sync приводит приемник в точное соответствие с источником и удаляет из него лишнее, поэтому для дозаливки в бакет, куда уже пишут, годится только copy.
  • Проверять перенос сравнением контрольных сумм нельзя. У объектов, загруженных составной загрузкой, ETag считается по частям и зависит от их размера, а он у хранилищ отличается. Поэтому в rclone check используется --size-only, и это в тексте объяснено, а не просто поставлено флагом.
  • Про расходы: входящий трафик в Object Storage не тарифицируется, а исходящий из хранилища-источника тарифицирует его провайдер. Отмечено, что переносить лучше с виртуальной машины в облаке, а не с локального компьютера.

Куда положено

  • исходник: ru/_tutorials/archive/storage-migration-from-amazon-s3.md;
  • обертки: ru/tutorials/archive/storage-migration-from-amazon-s3.md и ru/storage/tutorials/storage-migration-from-amazon-s3.md;
  • оглавления: ru/tutorials/toc.yaml и ru/storage/toc.yaml, в разделе «Хранение и восстановление данных» и в руководствах Object Storage;
  • списки руководств: ru/tutorials/archive/index.md и ru/storage/tutorials/index.md, отдельным подразделом «Миграция данных», чтобы не мешать с резервным копированием.

Вопросы к вам

  1. Подходит ли раздел «Хранение и восстановление данных» или миграцию лучше вынести в другое место?
  2. Стоит ли ограничиться rclone или лучше сделать руководство про перенос вообще, с вкладками под rclone и aws s3 sync?
  3. Нужен ли отдельный раздел про перенос между бакетами внутри Object Storage или это уже закрыто руководством про автоматическое копирование объектов?

Текст собрал локально через yfm -i ru -c .yfm (@diplodoc/cli 5.50.4): сборка проходит без ошибок и новых предупреждений, все include раскрываются, переменные подставляются.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions