---
metadata:
  - name: generator
    content: Diplodoc Platform v5.59.0
alternate:
  - https://ydb-platform--ydb.viewer.diplodoc.com/en/devops/enterprise-manager/s3-backups.md
  - https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/enterprise-manager/s3-backups.md
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/enterprise-manager/s3-backups.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt
    rel: describedby
sourcePath: ru/core/devops/enterprise-manager/s3-backups.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt

# Настройка резервного копирования в S3 для YDB EM

В этом руководстве описана настройка резервного копирования баз данных в S3-совместимое хранилище через YDB Enterprise Manager (YDB EM). Резервное копирование настраивается в конфигурационном файле Control Plane. В примерах ниже путь к этому файлу обозначен как `<ydb-em-cp-config.yaml>`.

Для настройки S3-бэкапов нужны три блока конфигурации:

* `backup_targets` — куда сохранять резервные копии;
* `secret_key` — каким мастер-ключом зашифрованы ключи доступа к S3;
* `locations[].default_backup_config` — когда запускать резервное копирование и сколько хранить копии.

{% note info %}

Эта статья описывает настройку автоматического резервного копирования через YDB EM. Общую информацию о способах резервного копирования в YDB см. в разделах [Концепции резервного копирования](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/backup.md) и [Резервное копирование и восстановление](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/backup-and-recovery/index.md).

{% endnote %}

## Настройка S3-хранилища {#backup-targets}

Добавьте в конфигурацию Control Plane блок `backup_targets`:

```yaml
backup_targets:
  - target_id: "target-em"
    tags:
      locations:
        - "em"
    settings:
      s3:
        endpoint: s3.example.net
        bucket: ydb-em-backups
        access_key: "<encrypted access key>"
        secret_key: "<encrypted secret key>"
        compression: "zstd"
```

Параметр | Описание
--- | ---
`target_id` | Уникальный идентификатор целевого хранилища резервных копий.
`tags.locations` | Список `location_id`, для которых применяется этот target. База данных будет копироваться в этот target, если ее `location_id` есть в списке. Для YDB EM обычно используется значение `em`, соответствующее `locations[].database_location_id` и `meta_location_id`.
`settings.s3.endpoint` | Адрес S3-совместимого хранилища.
`settings.s3.bucket` | Имя бакета для резервных копий.
`settings.s3.scheme` | Протокол подключения: `1` — HTTP, `2` — HTTPS. Если параметр не задан, используется HTTPS.
`settings.s3.access_key` | Зашифрованный [ключ доступа к S3](#master-key).
`settings.s3.secret_key` | Зашифрованный [секретный ключ доступа к S3](#master-key).
`settings.s3.compression` | Алгоритм сжатия экспортируемых данных. По умолчанию используется `zstd`. Удалите параметр, если сжатие не требуется.

**Location** — это логическая группа баз данных в YDB EM, к которой каждая база привязана через идентификатор `location_id`. Как правило, одна location соответствует одной зоне размещения баз данных — например, дата-центру или зоне доступности, в которой они работают, — но location можно использовать и для логического разделения, например по окружениям (`prod`, `test`). Например, если базы данных развёрнуты в двух дата-центрах, им можно назначить разные location и направлять резервные копии из каждого дата-центра в своё S3-хранилище. Для типовой установки YDB EM используется единственная location со значением `em`, которому соответствуют поля `locations[].database_location_id` и `meta_location_id` в конфигурации Control Plane.

`tags.locations` нужен, когда один Control Plane управляет базами из нескольких location и для разных location нужно использовать разные хранилища резервных копий. Worker выбирает target по `location_id` базы: если `location_id` базы входит в `tags.locations`, для резервного копирования используется этот target. Так можно, например, направлять бэкапы из разных зон или окружений в разные S3-бакеты.

{% note info %}

Вместо привязки target к `location_id` можно использовать `explicit_backup_targets` с правилами `by_database_path` или `by_cloud_id`, если конкретную базу данных или облако нужно закрепить за определенным target.

{% endnote %}

## Настройка мастер-ключа {#master-key}

На верхнем уровне конфигурационного файла укажите путь к файлу с мастер-ключом:

```yaml
secret_key: configs/em/secret_key
```

Этот мастер-ключ используется для шифрования и расшифровки значений `settings.s3.access_key` и `settings.s3.secret_key`. Файл мастер-ключа должен быть доступен процессам Control Plane по пути, указанному в параметре `secret_key`.

{% note warning %}

Не сохраняйте `access_key` и `secret_key` в конфигурации в открытом виде. YDB EM ожидает зашифрованные значения и расшифровывает их во время выполнения.

{% endnote %}

## Шифрование ключей доступа к S3 {#encrypt-s3-keys}

Зашифруйте ключи доступа к S3 тем же мастер-ключом, который указан в параметре `secret_key`. Для шифрования используйте бинарный файл Control Plane `ydb-em-cp`, который входит в пакет YDB EM как `bin/ydb-em-cp` и размещается на хосте Control Plane при [первоначальном развёртывании](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/enterprise-manager/initial-deployment.md#download):

```bash
ydb-em-cp admin crypto encrypt --body '<plaintext access key>' --cfg-file <ydb-em-cp-config.yaml>
ydb-em-cp admin crypto encrypt --body '<plaintext secret key>' --cfg-file <ydb-em-cp-config.yaml>
```

Скопируйте полученные зашифрованные строки в параметры `settings.s3.access_key` и `settings.s3.secret_key`.

Чтобы проверить, что значение можно расшифровать тем же мастер-ключом, выполните:

```bash
ydb-em-cp admin crypto decrypt --body '<encrypted value>' --cfg-file <ydb-em-cp-config.yaml>
```

## Настройка расписания и срока хранения {#schedule-and-ttl}

Target определяет, куда сохранять резервные копии. Расписание и срок хранения задаются отдельно, в блоке `locations[].default_backup_config`. Это конфигурация резервного копирования по умолчанию для баз данных в указанной location. Если для конкретной базы данных в YDB EM задана индивидуальная конфигурация резервного копирования, она может отличаться от этих значений по умолчанию.

```yaml
locations:
  - database_location_id: em
    default_backup_config:
      backup_settings:
        - name: daily
          type: SYSTEM
          backup_schedule:
            daily_backup_schedule:
              execute_time:
                hours: 20
          backup_time_to_live: "604800s"
```

Параметр | Описание
--- | ---
`backup_settings[].name` | Имя настройки резервного копирования.
`backup_settings[].type` | Тип настройки. Для системного расписания используйте `SYSTEM`.
`backup_schedule.daily_backup_schedule.execute_time.hours` | Час запуска ежедневного резервного копирования в UTC.
`backup_time_to_live` | Срок хранения резервной копии в секундах. Например, `604800s` — 7 суток.

## Применение конфигурации {#apply}

Чтобы применить настройки:

1. Разместите обновленный конфигурационный файл в рабочей директории Control Plane. Например, для установки в `/opt/ydb-em` это может быть файл `/opt/ydb-em/ydb-em-cp/cfg/config.yaml`.
1. Убедитесь, что файл мастер-ключа, указанный в `secret_key`, доступен процессам Control Plane.
1. Проверьте, что `settings.s3.access_key` и `settings.s3.secret_key` зашифрованы тем же мастер-ключом.
1. Перезапустите сервис Control Plane:

    ```bash
    sudo systemctl restart ydb-em-cp
    ```

После перезапуска Control Plane по расписанию определяет target по `location_id`, настраивает S3-хранилище и запускает экспорт данных в указанный бакет.

## Проверочный список {#checklist}

Перед запуском проверьте:

* `backup_targets[].tags.locations` содержит `location_id` баз данных, для которых нужно включить резервное копирование;
* `endpoint`, `bucket` и `scheme` указывают на нужное S3-хранилище;
* `access_key` и `secret_key` зашифрованы командой `ydb-em-cp admin crypto encrypt`;
* верхнеуровневый параметр `secret_key` указывает на корректный файл мастер-ключа;
* в `locations[].default_backup_config` задано расписание и срок хранения;
* обновленный конфигурационный файл размещен в рабочей директории Control Plane;
* сервис Control Plane перезапущен после изменения конфигурации.
