Для взаимодействия с хранилищем S3 прямо в консоли сервера, как с обычной файловой системой, я обычно использовал s3fs-fuse.
Я посмотрел отзывы о нём, поспрашивал ИИ, все говорят, что действительно это лучшее на текущий момент решения для монтирования S3. Я попробовал для своих задач. Настраивается легко, работает нормально.
Предвещая вопросы, зачем это надо, ведь это костыль, медленно, ненадёжно и т.д. Для многих задач это будет нормально работать. Например, у меня куча костылей на bash скриптах для различных бэкапов с помощью rsync. Мне не хочется это переписывать на rclone или restic, а хочется ничего не меняя просто взять и подключить другое хранилище. Я подключаю S3 через GeeseFS и всё работает без каких-то лишних телодвижений. Уже опробовал.
Потом я в другом месте подключаю этот же бакет, ищу нужные мне архивы через тот же find с группировкой по датам, именам и т.д. Забираю, проверяю, могу и удалить, переименовать и т.д.
Примеров применения на самом деле много. Так очень удобно и просто подключить нескольким хостам одно и то же хранилище на чтение. Например, с какими-то образами, дистрибутивами, и любыми другими холодными данными. Такой костыль удобно подставить в пайплайн под артефакты или промежуточные файлы, когда не хватает места и не хочется переписывать под S3.
Бакет в Selectel подключил с первой попытки. Сразу нормально завелось. Ставим fuse в систему и качаем свежую версию GeeseFS:
# apt install fuse
# wget https://github.com/yandex-cloud/geesefs/releases/latest/download/geesefs-linux-amd64
# chmod a+x geesefs-linux-amd64
# cp geesefs-linux-amd64 /usr/bin/geesefs
Создаём файл с секретами:
# mkdir ~/.aws && nano ~/.aws/credentials
И добавляем туда:
[default]
aws_access_key_id = <access_key>
aws_secret_access_key = <secret_key>
Ключи выдаются на сервисных пользователей. В Selectel сервисные пользователи сейчас создаются в разделе IAM ⇨ Сервисные пользователи, а ключи для них в Продукты ⇨ S3 ⇨ S3-ключи. Сначала создаём пользователя, добавляем ему доступ к бакетам в настройках бакета, потом выдаём ему ключ. Последовательность сейчас может быть другая. Я давно всё это создавал, сейчас панель управления поменялась.
После создания файла с ключами, можно монтировать бакет:
# geesefs --endpoint s3.ru-1.storage.selcloud.ru --region ru-1 --profile default websrv-month /mnt/s3-selectel
Примонтировал бакет websrv-month в локальную директорию /mnt/s3-selectel. Каких-то особых проблем в работе заметил. Подлагивает немного, когда обращаешься, что не удивительно, так как подключение через интернет. Крупные архивы туда нормально копируются и забираются, что мне и нужно было. Запись, как и чтение, кэшируется и потом заливается фоном. Размер кэша по умолчанию - 1 ГБ. Можно переназначить ключом --memory-limit.
Geesefs поддерживает все популярные S3 сервисы - Amazon S3, Ceph, Minio, Yandex Object Storage и т.д. В общем, нормальное решение если надо подкостылить с S3.
#s3