Миграция данных из 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.
Замените тестовые значения на ваши реальные данные.
-
Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:
-
Перейдите в личный кабинет VK Cloud.
-
Выберите проект.
-
Перейдите в раздел Object Storage → Аккаунты.
-
Нажмите кнопку Добавить аккаунт или Добавить.
-
Задайте имя аккаунта.
-
Нажмите кнопку Создать.
-
В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).
-
-
Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage.
-
(Опционально) Установите rclone, если планируется использовать его для миграции вместо AWS CLI.
Доступны две стратегии миграции:
- Big Bang — полный перенос данных за один проход с последующим переключением всех приложений на новый эндпоинт. Подходит для небольших объемов данных или систем с допустимым окном простоя. Все изменения в исходном бакете после начала миграции нужно переносить повторно.
- Поэтапная миграция (Dual write) — приложения параллельно пишут данные в оба хранилища, а фоновый процесс переносит исторические данные. После завершения переноса приложения переключаются на VK Object Storage. Подходит для систем без допустимого простоя и больших объемов данных.
Далее рассматривается миграция по стратегии Big Bang с помощью aws s3 sync. Для поэтапной миграции используйте тот же инструмент, но запускайте синхронизацию повторно до полного переключения приложений.
Для миграции с помощью aws s3 sync потребуются два профиля AWS CLI: один для чтения из AWS S3, другой для записи в VK Object Storage.
-
Настройте профиль
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 format—json.
-
Настройте профиль
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 name—ru-msk.Default output format—json.
-
Проверьте доступ к обоим хранилищам:
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.
Создайте бакет 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
Команда aws s3 sync копирует объекты из исходного бакета в целевой, пропуская уже скопированные файлы с совпадающими ETag и размером.
-
Выполните синхронизацию:
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.
-
Дождитесь завершения синхронизации. Для больших объемов данных процесс может занять значительное время.
После завершения миграции убедитесь, что все объекты перенесены корректно.
-
Сравните количество объектов в исходном и целевом бакетах:
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Значения должны совпадать.
-
Сравните 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 -
Сравните полученные файлы:
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
-
Обновите конфигурацию приложений для использования эндпоинта 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
- Endpoint URL:
-
Если приложения обращаются к бакету по доменному имени, обновите DNS-записи. Для публичных объектов используйте формат URL
https://<ИМЯ_БАКЕТА>.hb.ru-msk.vkcloud-storage.ru/<КЛЮЧ_ОБЪЕКТА>. -
Если используется стратегия Dual write, остановите запись в AWS S3 после подтверждения корректной работы приложений с VK Object Storage.
-
Выполните финальную синхронизацию для переноса объектов, измененных после основной миграции:
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 тарифицируются. Если они вам больше не нужны: