VK Cloud logo

Миграция данных из AWS S3 в объектное хранилище VK Cloud

С помощью сервиса VK Object Storage можно перенести данные из AWS S3, снизив затраты на хранение и уйдя привязки к поставщику (Vendor Lock-in). Миграция выполняется инструментами AWS CLI или rclone с последующей валидацией целостности данных и переключением приложений на новый эндпоинт.

Для примера далее используются следующие данные:

  • Источник: бакет my-aws-bucket в AWS S3, регион us-east-1.
  • Назначение: бакет my-vk-bucket в VK Object Storage, регион ru-msk.
  • Профиль AWS CLI для источника: aws-source.
  • Профиль AWS CLI для назначения: vk-dest.
  • Эндпоинт VK Object Storage: https://hb.ru-msk.vkcloud-storage.ru.

Замените тестовые значения на ваши реальные данные.

Подготовительные шаги

  1. Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:

    1. Перейдите в личный кабинет VK Cloud.

    2. Выберите проект.

    3. Перейдите в раздел Object StorageАккаунты.

    4. Нажмите кнопку Добавить аккаунт или Добавить.

    5. Задайте имя аккаунта.

    6. Нажмите кнопку Создать.

    7. В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).

  2. Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage.

  3. (Опционально) Установите rclone, если планируется использовать его для миграции вместо AWS CLI.

1. Выберите стратегию миграции

Доступны две стратегии миграции:

  • Big Bang — полный перенос данных за один проход с последующим переключением всех приложений на новый эндпоинт. Подходит для небольших объемов данных или систем с допустимым окном простоя. Все изменения в исходном бакете после начала миграции нужно переносить повторно.
  • Поэтапная миграция (Dual write) — приложения параллельно пишут данные в оба хранилища, а фоновый процесс переносит исторические данные. После завершения переноса приложения переключаются на VK Object Storage. Подходит для систем без допустимого простоя и больших объемов данных.

Далее рассматривается миграция по стратегии Big Bang с помощью aws s3 sync. Для поэтапной миграции используйте тот же инструмент, но запускайте синхронизацию повторно до полного переключения приложений.

2. Настройте профили AWS CLI для источника и назначения

Для миграции с помощью aws s3 sync потребуются два профиля AWS CLI: один для чтения из AWS S3, другой для записи в VK Object Storage.

  1. Настройте профиль aws-source для доступа к AWS S3, если он еще не настроен:

    aws configure --profile aws-source

    Задайте значения:

    • AWS Access Key ID — ключ доступа к AWS S3.
    • AWS Secret Access Key — секретный ключ AWS S3.
    • Default region name — регион AWS S3, например us-east-1.
    • Default output formatjson.
  2. Настройте профиль vk-dest для доступа к VK Object Storage:

    aws configure --profile vk-dest

    Задайте значения:

    • AWS Access Key ID — сохраненный ранее идентификатор ключа (Access Key ID) аккаунта VK Object Storage.
    • AWS Secret Access Key — сохраненный ранее секретный ключ (Secret Key) аккаунта VK Object Storage.
    • Default region nameru-msk.
    • Default output formatjson.
  3. Проверьте доступ к обоим хранилищам:

    aws s3 ls --profile aws-sourceaws s3 ls --endpoint-url https://hb.ru-msk.vkcloud-storage.ru --profile vk-dest

    Первая команда должна вывести список бакетов AWS S3, вторая — список бакетов VK Object Storage.

3. Создайте целевой бакет в VK Cloud

Создайте бакет my-vk-bucket в VK Object Storage через личный кабинет или с помощью AWS CLI:

aws s3api create-bucket \    --bucket my-vk-bucket \    --endpoint-url https://hb.ru-msk.vkcloud-storage.ru \    --region ru-msk \    --profile vk-dest

4. Выполните миграцию данных

Команда aws s3 sync копирует объекты из исходного бакета в целевой, пропуская уже скопированные файлы с совпадающими ETag и размером.

  1. Выполните синхронизацию:

    aws s3 sync s3://my-aws-bucket s3://my-vk-bucket \    --source-region us-east-1 \    --region ru-msk \    --endpoint-url https://hb.ru-msk.vkcloud-storage.ru \    --profile vk-dest

    Здесь:

    • s3://my-aws-bucket — исходный бакет AWS S3.
    • s3://my-vk-bucket — целевой бакет VK Object Storage.
    • --source-region us-east-1 — регион источника.
    • --region ru-msk — регион назначения.
    • --endpoint-url — endpoint VK Object Storage.
    • --profile vk-dest — профиль с ключами доступа к VK Object Storage.
  2. Дождитесь завершения синхронизации. Для больших объемов данных процесс может занять значительное время.

5. Проверьте целостность перенесенных данных

После завершения миграции убедитесь, что все объекты перенесены корректно.

  1. Сравните количество объектов в исходном и целевом бакетах:

    aws s3api list-objects-v2 --bucket my-aws-bucket --profile aws-source --query "KeyCount" --output textaws s3api list-objects-v2 --bucket my-vk-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru --profile vk-dest --query "KeyCount" --output text

    Значения должны совпадать.

  2. Сравните ETag (checksum) объектов. Получите списки объектов из обоих бакетов:

    aws s3api list-objects-v2 --bucket my-aws-bucket --profile aws-source --query "Contents[*].[Key,ETag,Size]" --output text > aws-objects.txtaws s3api list-objects-v2 --bucket my-vk-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru --profile vk-dest --query "Contents[*].[Key,ETag,Size]" --output text > vk-objects.txt
  3. Сравните полученные файлы:

    diff aws-objects.txt vk-objects.txt

    Если вывод пустой — все объекты перенесены корректно. Если есть отличия, выполните повторную синхронизацию:

    aws s3 sync s3://my-aws-bucket s3://my-vk-bucket \    --source-region us-east-1 \    --region ru-msk \    --endpoint-url https://hb.ru-msk.vkcloud-storage.ru \    --profile vk-dest

6. Переключите приложения на новый эндпоинт

  1. Обновите конфигурацию приложений для использования эндпоинта VK Object Storage:

    • Endpoint URL: https://hb.ru-msk.vkcloud-storage.ru
    • Region: ru-msk
    • Access Key ID и Secret Key — ключи аккаунта VK Object Storage.
    • Bucket name: my-vk-bucket
  2. Если приложения обращаются к бакету по доменному имени, обновите DNS-записи. Для публичных объектов используйте формат URL https://<ИМЯ_БАКЕТА>.hb.ru-msk.vkcloud-storage.ru/<КЛЮЧ_ОБЪЕКТА>.

  3. Если используется стратегия Dual write, остановите запись в AWS S3 после подтверждения корректной работы приложений с VK Object Storage.

  4. Выполните финальную синхронизацию для переноса объектов, измененных после основной миграции:

    aws s3 sync s3://my-aws-bucket s3://my-vk-bucket \    --source-region us-east-1 \    --region ru-msk \    --endpoint-url https://hb.ru-msk.vkcloud-storage.ru \    --profile vk-dest

Удалите неиспользуемые ресурсы

После завершения миграции и подтверждения корректной работы приложений с VK Object Storage удалите данные и бакет в AWS S3 согласно документации AWS.

Бакет и загруженные в него объекты в VK Object Storage тарифицируются. Если они вам больше не нужны:

  1. Удалите объекты.
  2. Удалите бакет.