Как использовать 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.