Как использовать Yandex object storage для хранения дампов базы данных

Регистрация в Yandex Cloud
Регистрируемся в https://console.yandex.cloud/
Создаем платежный аккаунт и получаем 2 стартовых гранта на 4000 рублей
Нажимаем Поиск, вводим Object Storage
, далее Создать бакет
.
Прописываем название бакета, его максимальный размер и класс хранилища, почитать про разницу и тарификацию можно тут. В качестве примера я создаю бакет размером до 100 гигабайт и холодным классом хранилища.

Далее нам необходимо создать сервисную запись: возвращаемся к поиску и вводим Identity and Access Managament
, далее Создать сервисный аккаунт
.
Вводим имя, описание и выбираем роли. Так как нас интересует работа с хранищем, то выбираем: stogare.viewer
, storage.editor
, storage.uploader
.
После создания аккаунта нажимаем Создать новый ключ
, выбирем Создать статический ключ доступа
.
Обязательно сохраняем Идентификатор ключа и сам секретный ключ.
После создания возвращаемся в наш бакет и нажимаем Настроить ACL
.
Добавляем сюда наш сервисный аккаунт и правами READ
и WRITE
. Нажимаем Добавить и Сохранить.
На данном этапе создан бакет, к нему привязан сервисный аккаунт, который может просматривать и загружать объекты в созданное облачное хранилище.
Автоматизация
В качестве примера будем рассматривать бэкапирование PostgreSQL в s3 бакет.
Создаем в домашней дирекории 2 файла и директорию .aws/credentials, файл pgpass необходим для того, чтобы команда снятия дампа не запрашивала пароль.
cd $HOME ;\ touch ~/.pgpass ;\ chmod 600 ~/.pgpass ;\ mkdir -p ~/.aws ;\ touch ~/.aws/credentials
Формат файла .pgpass
localhost:5432:database_name:username:password
Формат файла .aws/credentials
[default] aws_access_key_id = <> aws_secret_access_key = <>
Снимаем дамп с помощью pg_dump
, сжимаем с помощью gzip
и шифруем с помощью openssl
.<your ssl decrypt password>
- меняем на свой пароль.
pg_dump database_name \ -U user \ -h localhost \ -v \ | gzip -c --best \ | openssl enc \ -aes-256-cbc \ -salt \ -pbkdf2 \ -iter 100000 \ -out <output file> \ -pass pass:<your ssl decrypt password>
Для расшифровки файла используем команду
openssl enc -d \ -aes-256-cbc \ -pbkdf2 \ -iter 100000 \ -in pg_dump_2025-04-24.sql.gz.enc \ -out pg_dump_2025-04-24.sql.gz \ -pass pass:<your ssl decrypt password>
Для распаковки файла используем команду
gzip -f -k -d pg_dump_2025-04-24.sql.gz > pg_dump_2025-04-24.sql
Готовый python код
Для работы с s3 нам понадобится библиотека boto3, ниже прикладываю упрощенный вариант скрипта загрузки файла в бакет.
import boto3 S3_BUCKET = "bucket name" DUMP_FILE_NAME = "pg_dump_2025-04-24.sql.gz.enc" def get_s3_instance(): session = boto3.session.Session() return session.client( service_name='s3', endpoint_url='https://storage.yandexcloud.net' ) def upload_dump_to_s3(dump_file: str): get_s3_instance().upload_file( Filename=dump_file, Bucket=S3_BUCKET, Key=dump_file ) if __name__ == "__main__": get_s3_instance().upload_dump_to_s3(DUMP_FILE_NAME)
Большое спасибо всем за внимание! Если вам интересны подобные рассуждения - подписывайтесь на мой канал artydev & Co.