---
title: 'Миграция данных в S3'
sidebar_label: 'Миграция в S3'
description: 'Как работает миграция данных в S3 через панель управления, какие есть ограничения, стоимость, как настроить миграцию и работать с ней'
sidebar_position: 1
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import MoreVerticalIcon from '@selectel/docux/icons/more-vertical'
import PlusIcon from '@selectel/docux/icons/plus'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import {CustomTable} from '@selectel/docux/components'
import MigrateToS3 from '@site/docs/_partials/s3/migrate-to-s3.mdx'

# Миграция данных в S3

Вы можете настроить миграцию данных в S3 из бакета-источника:

* в стороннем S3-совместимом хранилище;
* или в S3 Selectel в том же или другом аккаунте.

Миграция возможна только в бакет-приемник в Selectel.
Миграция из S3 Selectel в стороннее хранилище не поддерживается.
Также у миграций есть ряд [ограничений](#restrictions).

Чтобы перенести данные в S3, [настройте миграцию](#configure-migration).
Вы можете [отслеживать статус](#check-migration-status) и [историю запусков](#view-migration-history) по каждой миграции.
Миграцию можно [запускать из черновика или повторно](#start-migration), [досрочно завершать](#abort-migration), [изменять](#edit-migration), [переименовывать](#rename-migration) и [удалять](#delete-migration).

## Ограничения миграций в S3 \{#restrictions}

* за одну миграцию рекомендуется переносить не более 500 ТБ. Для миграции данных большего объема [создайте тикет](https://my.selectel.ru/tickets/create);
* во всех проектах аккаунта одновременно может быть запущено не более пяти миграций. Если лимит достигнут, миграция не запустится, но сохранится как черновик в статусе `DRAFT`. Ее можно [запустить](#start-migration), когда завершится одна из выполняющихся миграций. Количество черновиков миграций не ограничено;
* в один бакет-приемник одновременно может быть запущена только одна миграция. Если одновременно создать еще одну миграцию в бакет, она сохранится как черновик.

## Стоимость \{#cost}

Возможность миграции в S3 предоставляется бесплатно.

При этом бакет-приемник в S3 тарифицируется по [модели оплаты S3](/s3/about/payment.mdx).

Если миграция выполняется:

* из стороннего S3-совместимого хранилища: в бакете-приемнике в Selectel тарифицируются запросы к API и объем хранения. Входящий трафик не тарифицируется. Исходящий трафик оплачивается на стороне провайдера S3-хранилища, из которого выполняется миграция;
* из другого бакета S3 Selectel: в бакете-источнике тарифицируются запросы к API, в бакете-приемнике — запросы к API и объем хранения. Трафик между бакетами является внутренним в Selectel и не тарифицируется.

## Настроить миграцию \{#configure-migration}

1. [Получите доступ к бакету-источнику](#get-source-bucket-access).
2. [Настройте бакет-приемник](#configure-receiver).
3. [Настройте параметры миграции](#configure-migration-options).

### 1. Получить доступ к бакету-источнику \{#get-source-bucket-access}

<Tabs queryString="get-source-bucket-access">
  <TabItem value="side-s3" default>
    <TabItemLabel>
      Стороннее S3-хранилище
    </TabItemLabel>

    1. Авторизуйтесь на стороне вашего S3-провайдера.
    2. Получите эндпоинт бакета-источника.
    3. Получите пару ключей Access Key и Secret Key для доступа к бакету-источнику. Учетные данные, для которых выдаются ключи, должны предоставлять доступ на чтение бакета и его объектов.
  </TabItem>

  <TabItem value="selectel-s3">
    <TabItemLabel>
      Бакет S3 в Selectel
    </TabItemLabel>

    Получить доступ может [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователь с ролью [iam.admin](/access-control/role-reference.mdx#iam-admin).

    1. В [панели управления](https://my.selectel.ru/) аккаунта, где находится бакет-источник, [создайте сервисного пользователя](/access-control/manage/add-user.mdx#add-service-user) с [ролью с доступом в S3](/s3/about/manage-access.mdx#access-within-roles).
       Если вы используете сервисного пользователя с ролью [s3.user](/access-control/role-reference.mdx#s3-user), [object_storage_user](/access-control/role-reference.mdx#object-storage-user) или [s3.bucket.user](/access-control/role-reference.mdx#s3-bucket-user), в бакете должна быть настроена [политика доступа](/s3/buckets/bucket-policy/) и ее [правила](/s3/buckets/bucket-policy/about-bucket-policy.mdx#rules) должны разрешать доступ этому пользователю на просмотр списка объектов в бакете и чтение объектов.
    2. [Выдайте пользователю S3-ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key).
  </TabItem>
</Tabs>

### 2. Настроить бакет-приемник \{#configure-receiver}

1. Если у вас еще нет бакета в S3, в который будет выполняться миграция, [создайте его](/s3/buckets/create-bucket.mdx).
2. Настройте доступ к бакету-приемнику. Настроить доступ может [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователь с ролью [iam.admin](/access-control/role-reference.mdx#iam-admin):

   2.1. [Создайте сервисного пользователя](/access-control/manage/add-user.mdx#add-service-user) с [ролью с доступом в S3](/s3/about/manage-access.mdx#access-within-roles).
   Если вы используете сервисного пользователя с ролью [s3.user](/access-control/role-reference.mdx#s3-user), [object_storage_user](/access-control/role-reference.mdx#object-storage-user) или [s3.bucket.user](/access-control/role-reference.mdx#s3-bucket-user), в бакете должна быть настроена [политика доступа](/s3/buckets/bucket-policy/) и ее [правила](/s3/buckets/bucket-policy/about-bucket-policy.mdx#rules) должны разрешать пользователю как минимум просмотр списка объектов, чтение и загрузку объектов. Для автоматического удаления тестовых объектов, которые создаются при проверке подключения, также разрешите удаление объектов.

   2.2. [Выдайте пользователю S3-ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key).

### 3. Настроить параметры миграции \{#configure-migration-options}

<Tabs queryString="configure-migration-options">
  <TabItem value="side-s3" default>
    <TabItemLabel>
      Стороннее S3-хранилище
    </TabItemLabel>

    <MigrateToS3>
      4.1. Введите регион, в котором находится бакет-источник.

      4.2. В поле **Endpoint** укажите эндпоинт бакета источника, который вы [получили на шаге 2 на этапе 1](#get-source-bucket-access).

      4.3. Введите имя бакета-источника.

      4.4. Опционально: чтобы настроить миграцию данных не из всего бакета, а по определенному префиксу, в поле **Путь** введите префикс объектов в бакете. Если префикс не указан, будет выполняться миграция всех данных в бакете.

      4.5. Вставьте значение Access Key, который вы [получили на шаге 3 на этапе 1](#get-source-bucket-access).

      4.6. Вставьте значение Secret Key, который вы [получили на шаге 3 на этапе 1](#get-source-bucket-access).

      4.7. Опционально: нажмите **Проверить подключение**.
      Сервис проверит, что бакет-источник доступен и учетные данные позволяют получить список объектов.
      Данные в бакете-источнике не изменятся.

      Проверять подключение можно не более пяти раз в минуту.
      Если вы не проверили подключение вручную, оно будет проверено автоматически при создании миграции.
      В случае неуспешной проверки миграция не будет создана.
    </MigrateToS3>
  </TabItem>

  <TabItem value="selectel-s3">
    <TabItemLabel>
      Бакет S3 в Selectel
    </TabItemLabel>

    <MigrateToS3>
      4.1. Выберите [локацию](/infrastructure/locations.mdx), в которой находится бакет-источник.

      4.2. Введите имя бакета-источника.

      4.3. Опционально: чтобы настроить миграцию данных не из всего бакета, а по определенному префиксу, в поле **Путь** введите префикс объектов в бакете. Если префикс не указан, будет выполняться миграция всех данных в бакете.

      4.4. Вставьте значение Access Key, который вы [получили на шаге 3 на этапе 1](#get-source-bucket-access).

      4.5. Вставьте значение Secret Key, который вы [получили на шаге 3 на этапе 1](#get-source-bucket-access).

      4.6. Опционально: нажмите **Проверить подключение**.
      Сервис проверит, что бакет-приемник доступен и учетные данные позволяют загружать объекты — в бакете будет создан пустой тестовый объект с именем вида `.dt-conncheck-<uuid>`.
      Если при [настройке доступа к бакету-источнику](#get-source-bucket-access) вы получили права доступа, которые разрешают удаление объектов, после завершения проверки тестовый объект будет автоматически удален.
    </MigrateToS3>
  </TabItem>
</Tabs>

## Фильтрация \{#filtering}

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

Если добавлено несколько фильтров, они суммируются — миграция выполняется только для объектов, которые удовлетворяют всем фильтрам.

### Список фильтров \{#filtering-list}

<CustomTable>
  <table>
    <tbody>
      <tr>
        <th>Минимальный размер объекта</th>
        <td>Объект переносится, если его размер равен или больше указанного значения</td>
      </tr>

      <tr>
        <th>Максимальный размер объекта</th>
        <td>Объект переносится, если его размер равен или меньше указанного значения</td>
      </tr>

      <tr>
        <th>Изменены за период времени</th>
        <td>Объект переносится, если он был загружен или обновлен в течение указанного периода времени</td>
      </tr>

      <tr>
        <th>Включить шаблоны`*`</th>
        <td>Переносятся только объекты, в имени которых которых есть префикс по шаблону из указанного значения, подробнее в подразделе [Фильтрация по шаблонам](#template-filtering)</td>
      </tr>

      <tr>
        <th>Исключить шаблоны`*`</th>
        <td>Переносятся все объекты, кроме объектов, в имени которых есть префикс по шаблону из указанного значения, подробнее в подразделе [Фильтрация по шаблонам](#template-filtering)</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

`*` Можно использовать только один параметр фильтрации по шаблонам в имени объектов.

### Фильтрация по шаблонам \{#template-filtering}

Фильтры Включить шаблоны и Исключить шаблоны фильтруют объекты по их имени.
В одной миграции можно использовать только один фильтр по шаблонам.
В фильтр можно добавить до 100 шаблонов.

Если в фильтре добавлено несколько шаблонов, объект совпадает с фильтром, если попадает хотя бы под один шаблон.

Основные принципы и ограничения:

* поддерживается латиница и кириллица;
* регулярные выражения не поддерживаются;
* регистр имеет значение;
* шаблон указывается без кавычек. Если указать кавычки, они будут частью шаблона;
* шаблон заполняется по определенному синтаксису:

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Синтаксис</th>
        <th>Значение</th>
        <th>Пример шаблона</th>
        <th>Пример значения, которое удовлетворяет фильтру</th>
        <th>Пример значения, которое не удовлетворяет фильтру</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>`*`</th>
        <td>Любые символы в пределах одного уровня (до символа `/`)</td>
        <td>`*.jpg`</td>
        <td>`a.jpg`, `photos/a.jpg`</td>
        <td>`a.jpeg`</td>
      </tr>

      <tr>
        <th>`**`</th>
        <td>Любые символы на всех вложенных уровнях, включая символ `/`</td>
        <td>`/images/**`</td>
        <td>`images/a.jpg`, `images/2025/a.jpg`</td>
        <td>`old/images/a.jpg`</td>
      </tr>

      <tr>
        <th>`?`</th>
        <td>Один любой символ, кроме символа `/`</td>
        <td>`report-?.pdf`</td>
        <td>`report-1.pdf`</td>
        <td>`report-10.pdf`</td>
      </tr>

      <tr>
        <th>`[...]`</th>
        <td>Один символ из указанного набора или диапазона</td>
        <td>`2025-0[1-3]-*.gz`</td>
        <td>`2025-02-15.gz`</td>
        <td>`2025-04-01.gz`</td>
      </tr>

      <tr>
        <th>`[!...]`</th>
        <td>Один символ, кроме символов, указанных в наборе</td>
        <td>`[!_]*.csv`</td>
        <td>`data.csv`</td>
        <td>`_tmp.csv`</td>
      </tr>

      <tr>
        <th>`{a,b}`</th>
        <td>Любое значение из указанного списка</td>
        <td>`*.{jpg,png}`</td>
        <td>`a.jpg`, `b.png`</td>
        <td>`c.gif`</td>
      </tr>

      <tr>
        <th>`\`</th>
        <td>Экранирование спецсимвола, чтобы включить его в поиск как обычный символ</td>
        <td>`\[draft\]*.docx`</td>
        <td>`[draft]plan.docx`</td>
        <td>`draft-plan.docx`</td>
      </tr>

      <tr>
        <th>`/` в начале шаблона</th>
        <td>Проверка от корня значения, которое указано в поле **Путь** для бакета-источника</td>
        <td>`/tmp/**`</td>
        <td>`tmp/x.part`</td>
        <td>`a/tmp/x.part`</td>
      </tr>

      <tr>
        <th>Без `/` в начале шаблона</th>
        <td>Проверка на любом уровне вложенности. Совпадать должен целый элемент пути между двумя символами `/` или символом `/` и началом либо концом шаблона</td>
        <td>`file.jpg`</td>
        <td>`a/file.jpg`</td>
        <td>`a/myfile.jpg`</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

Если в бакете-источнике в поле **Путь**:

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

:::note

Например, имя бакета-источника — `backup`, для него в поле **Путь** вы добавили префикс `2025`.
Полное имя проверяемого объекта с префиксом — `backup/2025/images/a.jpg`.
При проверке объекта по шаблону указанное в шаблоне значение будет сопоставляться с частью `images/a.jpg`.

:::

## Посмотреть статус миграции \{#check-migration-status}

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. В строке миграции в столбце **Статус** посмотрите статус. Возможные статусы:

<CustomTable>
  <table>
    <thead>
      <tr>
        <th>Статус</th>
        <th>Описание</th>
        <th>Возможные действия с миграцией</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>`IN PROGRESS`</th>
        <td>Миграция выполняется</td>

        <td>
          * завершение;
          * переименование
        </td>
      </tr>

      <tr>
        <th>`DONE`</th>
        <td>Миграция полностью выполнена</td>

        <td>
          * повторный запуск;
          * редактирование;
          * переименование;
          * удаление
        </td>
      </tr>

      <tr>
        <th>`PARTIALLY DONE`</th>
        <td>Миграция выполнена частично — часть объектов не попала в бакет-приемник. Возможно, в течение миграции их изменили или удалили</td>

        <td>
          * повторный запуск;
          * редактирование;
          * переименование;
          * удаление
        </td>
      </tr>

      <tr>
        <th>`ERROR`</th>
        <td>При выполнении миграции возникла ошибка, миграция не выполнена</td>

        <td>
          * повторный запуск;
          * редактирование;
          * переименование;
          * удаление
        </td>
      </tr>

      <tr>
        <th>`ABORTED`</th>
        <td>Выполнение миграции было досрочно завершено</td>

        <td>
          * повторный запуск;
          * редактирование;
          * переименование;
          * удаление
        </td>
      </tr>

      <tr>
        <th>`DRAFT`</th>
        <td>Миграция еще не была запущена</td>

        <td>
          * запуск;
          * редактирование;
          * переименование;
          * удаление
        </td>
      </tr>
    </tbody>
  </table>
</CustomTable>

## Посмотреть историю запусков миграции \{#view-migration-history}

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. Откройте страницу миграции.
4. В блоке **История запусков** посмотрите список запусков миграции.

## Запустить миграцию \{#start-migration}

Можно запустить миграцию, которая была сохранена как черновик в статусе `DRAFT`, или повторно запустить любую миграцию, которая уже запускалась ранее независимо от результата миграции.

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.

2. Перейдите в раздел **Миграция данных**.

3. В меню <MoreVerticalIcon /> миграции выберите:

   * **Запустить** — для запуска миграции в статусе `DRAFT`;
   * **Запустить повторно** — для повторного запуска любой другой миграции.

4. Опционально: нажмите **Редактировать** и измените параметры миграции, для этого используйте шаги 4-8 подраздела [Настроить параметры миграции](#configure-migration-options).

5. Нажмите **Запустить**. Если миграция завершится со статусом:

   * `PARTIALLY DONE` — запустите миграцию повторно;
   * `ERROR` — проверьте корректность настройки миграции, измените параметры и запустите миграцию повторно. Если не получается установить причину ошибки, [создайте тикет](https://my.selectel.ru/tickets/create/).

## Переименовать миграцию \{#rename-migration}

Имя миграции формируется автоматически при создании миграции.
Созданную миграцию можно переименовать.

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. В меню <MoreVerticalIcon /> миграции выберите **Переименовать**.
4. Введите новое имя миграции. Имя должно содержать от 3 до 255 символов. Может включать латинские и кириллические буквы в любом регистре, цифры, точки, дефисы и нижние подчеркивания.
5. Нажмите **Переименовать**.

## Изменить миграцию \{#edit-migration}

Нельзя изменить миграцию, которая находится в статусе `IN PROGRESS`.

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. В меню <MoreVerticalIcon /> миграции выберите **Редактировать**.
4. Измените параметры миграции, для этого используйте шаги 4-8 подраздела [Настроить параметры миграции](#configure-migration-options).

## Завершить миграцию \{#abort-migration}

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

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. В меню <MoreVerticalIcon /> миграции выберите **Завершить**.
4. Введите имя миграции для подтверждения.
5. Нажмите **Завершить**.

## Удалить миграцию \{#delete-migration}

Нельзя удалить миграцию, которая находится в статусе `IN PROGRESS`.
Чтобы удалить активную миграцию, сначала [завершите ее](#abort-migration).

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

1. В [панели управления](https://my.selectel.ru/storage/default/data-migration/) в верхнем меню нажмите **Продукты** и выберите **S3**.
2. Перейдите в раздел **Миграция данных**.
3. В меню <MoreVerticalIcon /> миграции выберите **Удалить**.
4. Введите имя миграции для подтверждения.
5. Нажмите **Удалить**.

<Formbricks />
