VK Private Cloud logo
Помощь
Обновлена 21 августа 2026 г. в 11:12

Миграция проектов VK Object Storage

Миграция связывает существующие проекты VK Object Storage с сущностями VK Private Cloud. Выполняйте миграцию, если выполняются все условия:

  • В VK Object Storage уже есть проекты (и связанные с ними бакеты).
  • Эти проекты еще не ассоциированы с аккаунтами и проектами IAM.
  • Повторное создание проектов и перенос бакетов затруднены или нецелесообразны.

Если проектов в VK Object Storage нет, пропустите шаг миграции.

Подготовка данных для экспорта

На mono-узле VK Object Storage выгрузите список проектов:

$ hb hitbox project list -o csv > /tmp/projects.csv

Добавьте в CSV последним полем owner почту владельца проекта (пользователя IAM).

Экспорт проектов в Breeze

  1. Получите учетные данные для подключения к инстансу Breeze в инсталляции VK Private Cloud.

  2. На узле с Hitbox выполните миграционный скрипт. Путь и версия зависят от установленного релиза VK Object Storage.

    1. Перейдите в каталог Hitbox и выдайте права на выполнение скрипта:

      $ sudo -i$ cd /usr/share/hitbox/$ chmod +x ./migrations/<ВЕРСИЯ>/projects2breeze.lua
    2. Запустите миграцию:

      $ ./migrations/<ВЕРСИЯ>/projects2breeze.lua -i /tmp/projects.csv -o /tmp/pid_iam_id.csv -b tarantool_service_user:<ПАРОЛЬ>@<УЗЕЛ_BREEZE>:<ПОРТ> up

Включение функциональности IAM

На деплой-ноде VK Object Storage включите функциональность IAM:

$ switchover etcd set app.feature_flags.iam.enabled true -p /hotbox/hitbox

Ассоциация аккаунтов и keystone_id

Скрипты ассоциации выполняйте на узле, где запущен master Hitbox.

  1. Ассоциируйте аккаунты VK Object Storage с владельцем в IAM. Скрипт использует файл /tmp/pid_iam_id.csv:

    $ tt connect <УЗЕЛ_HITBOX>:<ПОРТ> -f /usr/share/hitbox/migrations/<ВЕРСИЯ>/account_iam_id.lua
  2. Создайте Lua-скрипт /tmp/load_keystone.lua:

    do    local csv = require('csv')    local fio = require('fio')    local path = fio.pathjoin('/tmp', 'pid_iam_id.csv')    local f, err = fio.open(path, { 'O_RDONLY' })    if f ~= nil then        local projects = csv.load(f)        f:close()        for _, proj in ipairs(projects) do            local pid = proj[1]            if pid ~= 'anon' then                box.atomic(function()                    local p = T.projects.hash(box.space.projects.index.pid:get({ pid }))                    if p ~= nil then                        local project_id = p.id                        p.attr.keystone_id = proj[3]                        box.space.projects:update({project_id}, {{ '=', F.projects.attr, p.attr }})                    end                end)            end        end        return path, 'loaded'    end    return path, errend
  3. Выполните скрипт:

    $ chown tarantool:tarantool /tmp/pid_iam_id.csv$ tt connect <УЗЕЛ_HITBOX>:<ПОРТ> -f /tmp/load_keystone.lua
Была ли статья полезна?