Резервное копирование в Yandex Object Storage с помощью AWS S3 Sync
В этом практическом руководстве вы настроите резервное копирование файлов из локальной системы в облачное хранилище Yandex Object Storage с помощью AWS S3 Sync
AWS S3 Sync — стандартная команда AWS CLI для синхронизации содержимого между локальным каталогом и бакетом. Это простой и надежный способ резервного копирования файлов в облачное объектное хранилище с поддержкой протокола S3.
Особенности использования AWS S3 Sync:
- Не требуется дополнительное программное обеспечение, кроме AWS CLI.
- Поддерживается на Linux, Windows и macOS.
- Простая настройка, работа напрямую с S3 API.
- Легкая автоматизация с помощью планировщика задач или скриптов.
Чтобы настроить резервное копирование с помощью AWS S3 Sync:
- Подготовьте облако к работе.
- Создайте бакет.
- Создайте сервисный аккаунт.
- Создайте статический ключ доступа.
- Установите AWS CLI.
- Синхронизируйте локальный каталог с бакетом.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки бакета входит плата за хранение данных в бакете и операции с ними (см. тарифы Yandex Object Storage).
Создайте бакет
Примечание
Чтобы защитить резервные копии от случайного удаления файлов, включите версионирование S3-бакета. В этом случае удаленные или перезаписанные файлы будут сохраняться в виде предыдущих версий, которые можно восстановить при необходимости. Подробнее о версионировании S3-бакетов можно прочитать в документации.
Без версионирования восстановить удаленные из S3 файлы невозможно, даже если они раньше копировались.
- В консоли управления
перейдите в нужный каталог. - Выберите сервис Object Storage.
- Нажмите Создать бакет.
- Укажите имя бакета в соответствии с правилами именования.
- В полях Чтение объектов, Чтение списка объектов и Чтение настроек выберите
С авторизацией. - Нажмите Создать бакет.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Создайте бакет, указав имя бакета в соответствии с правилами именования:
aws --endpoint-url=https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>Результат:
make_bucket: backup-bucket
Воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.
Создайте сервисный аккаунт
Создайте сервисный аккаунт, от имени которого будет выполняться резервное копирование.
- В консоли управления
выберите сервис Identity and Access Management. - Нажмите Создать сервисный аккаунт.
- В поле Имя укажите
sa-backup-to-s3. - Нажмите
Добавить роль и выберите рольstorage.editor. - Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте сервисный аккаунт:
yc iam service-account create --name sa-backup-to-s3 \ --folder-name <имя_каталога>Результат:
id: ajeab0cnib1p******** folder_id: b0g12ga82bcv******** created_at: "2025-10-03T09:44:35.989446Z" name: sa-backup-to-s3 -
Назначьте сервисному аккаунту роль
storage.editorна каталог:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name sa-backup-to-s3 \ --role storage.editor \ --folder-name <имя_каталога>Результат:
effective_deltas: - action: ADD access_binding: role_id: storage.editor subject: id: ajeab0cnib1p******** type: serviceAccount
- Создайте сервисный аккаунт
sa-backup-to-s3. Для этого воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create. - Назначьте сервисному аккаунту в текущем каталоге роль
storage.editor. Для этого воспользуйтесь методом REST API setAccessBindings для ресурса Folder или вызовом gRPC API FolderService/SetAccessBindings.
Примечание
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:
kms.keys.encrypter— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter— включает разрешения, предоставляемые ролямиkms.keys.encrypterиkms.keys.decrypter.
Подробнее см. Сервисные роли Yandex Key Management Service.
Создайте статический ключ доступа
-
В консоли управления
выберите сервис Identity and Access Management. -
На панели слева выберите
Сервисные аккаунты. -
Выберите сервисный аккаунт
sa-backup-to-s3. -
На панели сверху нажмите
Создать новый ключ и выберите Создать статический ключ доступа. -
Задайте описание ключа и нажмите Создать.
-
Сохраните полученные идентификатор и секретный ключ — они понадобятся позднее при монтировании бакета.
Внимание
После закрытия диалога значение ключа будет недоступно.
-
Выполните команду:
yc iam access-key create \ --service-account-name sa-backup-to-s3Где
--service-account-name— имя сервисного аккаунта, для которого создается ключ.Результат:
access_key: id: aje726ab18go******** service_account_id: ajecikmc374i******** created_at: "2024-11-28T14:16:44.936656476Z" key_id: YCAJEOmgIxyYa54LY******** secret: YCMiEYFqczmjJQ2XCHMOenrp1s1-yva1******** -
Сохраните идентификатор (
key_id) и секретный ключ (secret) — они понадобятся позднее при монтировании бакета.
Чтобы создать ключ доступа, воспользуйтесь методом REST API create для ресурса AccessKey или вызовом gRPC API AccessKeyService/Create.
Сохраните идентификатор (key_id) и секретный ключ (secret) — они понадобятся позднее при монтировании бакета.
Установите AWS CLI
Если у вас еще нет интерфейса командной строки AWS CLI, установите и сконфигурируйте его.
Синхронизируйте локальный каталог с бакетом
Чтобы завершить настройку резервного копирования, настройте ручную или автоматическую синхронизацию локального каталога с бакетом.
Ручная синхронизация
Для разовой синхронизации выполните команду:
aws s3 sync <путь_к_локальному_каталогу> s3://<имя_бакета> \
--endpoint-url=https://storage.yandexcloud.net \
--delete
Где:
--endpoint-url— эндпоинт Object Storage.--delete— флаг для удаления файлов из бакета при их удалении из локального каталога.
Данная команда копирует все содержимое из локального каталога в S3-бакет, при этом перенося только новые и измененные файлы.
Для разовой синхронизации выполните команду:
aws s3 sync <путь_к_локальному_каталогу> s3://<имя_бакета> \
--endpoint-url=https://storage.yandexcloud.net \
--delete
Где:
--endpoint-url— эндпоинт Object Storage.--delete— флаг для удаления файлов из бакета при их удалении из локального каталога.
Данная команда копирует все содержимое из локального каталога в S3-бакет, при этом перенося только новые и измененные файлы.
Совет
Чтобы каждый раз не запускать команду, можно создать BAT-файл:
-
Откройте Блокнот (Notepad) и добавьте следующее содержимое:
@echo off aws s3 sync "<путь_к_локальному_каталогу>" s3://<имя_бакета> ^ --endpoint-url=https://storage.yandexcloud.net ^ --deleteГде
--delete— флаг для удаления файлов из бакета при их удалении из локального каталога. -
Сохраните файл, например, как
sync_to_s3.bat. -
Чтобы синхронизировать каталоги, запустите BAT-файл.
Автоматическая синхронизация
Для автоматической синхронизации локального каталога с бакетом:
-
Убедитесь, что у пользователя, от имени которого будет ставиться задание в
cron, есть доступ к локальному каталогу. -
Откройте файл планировщика текущего пользователя, выполнив команду:
crontab -e -
Добавьте в файл строку для автоматической синхронизации, например, каждые 10 минут:
*/10 * * * * aws s3 sync <путь_к_локальному_каталогу> <имя_подключения>:<имя_бакета> --delete --log-file=<путь_к_файлу_логов>Где:
--delete— флаг для удаления файлов из бакета при их удалении из локального каталога.--log-file— опциональный параметр для записи логов. Указывайте полный путь.
Примечание
Указывайте полный абсолютный путь к каталогам без
~. Например:/home/user/.
Задание будет запускаться с заданной периодичностью и выполнять синхронизацию каталогов.
Для автоматической синхронизации настройте задачу в Планировщике задач:
-
Откройте Планировщик задач Windows:
- Пуск → Планировщик задач.
- Или выполните в Выполнить →
taskschd.msc.
-
Нажмите Создать задачу... (Create Task…)
-
Во вкладке Действия (Actions) добавьте новое действие, указав абсолютный путь до исполняемого скрипта (например, BAT-файла) в поле Программа или сценарий.
-
Во вкладке Триггеры добавьте расписание.
-
Нажмите OK.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите объекты из бакета.
- Удалите бакет.