Подключение объектного хранилища (S3) с использованием клиента s3fs

s3fs клиент S3

Облачное хранилище – удобный инструмент для хранения различных файлов, но не всегда удобно работать с ним посредством клиентов/SDK. В таком случае можно использовать s3fs – она позволит монтировать бакет с помощью FUSE и работать с файлами и директориями в нем, как будто это обычная файловая система.

Установка s3fs-fuse

Мы разработали видеоинструкцию, где в удобном формате объяснили, как подключить хранилище S3 с использованием клиента s3fs

Смотреть видеоинструкцию

Во многих менеджерах пакетов дистрибутивов Linux есть пакет s3fs.

Для установки используйте соответствующую вашему дистрибутиву команду.

  • Debian 9 и Ubuntu 16.04 или новее:
sudo apt install s3fs
  • Fedora 27 или новее:
sudo dnf install s3fs-fuse
  • RHEL и CentOS 7 или новее с помощью EPEL:
sudo yum install epel-release
sudo yum install s3fs-fuse

Инструкции по установке s3fs на других ОС, а также сборке из исходников вы можете найти в репозитории.

Конфигурация

S3fs поддерживает использование стандартного файла авторизации ${HOME}/.aws/credentials, собственный файл авторизации passwd-s3fs, а также переменные окружения AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_SESSION_TOKEN.

Файл пароля s3fs может быть создан:

  • В домашней директории пользователя с названием .passwd-s3fs
  • Как системный файл авторизации /etc/passwd-s3fs 

При создании файла авторизации необходимо указать в нем ключи доступа к бакету в формате access_key:secret_key и задать для файла права доступа только для владельца. Например, чтобы создать файл в домашней директории, можно выполнить следующие команды:

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs

Узнать access key и secret key можно на странице хранилища в разделе “Реквизиты доступа”.

Единоразовое монтирование

Чтобы примонтировать облачное хранилище, необходимо выполнить команду:

s3fs <bucket_name> <mount_point> -o passwd_file=<passwd_file_path> -o url=<URL> -o use_path_request_style

В команде необходимо изменить:

  • <bucket_name> – название бакета, указанное в реквизитах доступа
  • <mount_point> – точка монтирования, директория должна существовать при монтировании
  • <passwd_file_path> – путь до созданного файла авторизации, если он используется, например, ${HOME}/.passwd-s3fs
  • <URL> – URL, указанный в реквизитах доступа, например, https://s3.ru1.storage.beget.cloud

Создадим директорию mybucket в текущей директории:

mkdir mybucket

Проверим, что она успешно создалась и не содержит файлов внутри:

root@ibzwaumnaw:~# ll mybucket
total 8
drwxr-xr-x 2 root root 4096 Oct 17 10:20 ./
drwx------ 6 root root 4096 Oct 17 10:20 ../

Чтобы монтировать бакет f6bcd57c2800-shortsighted-katja к созданной директории mybucket в текущей директории, используя файл авторизации в домашней директории, команда будет выглядеть следующим образом:

s3fs f6bcd57c2800-shortsighted-katja $HOME/mybucket -o passwd_file=${HOME}/.passwd-s3fs -o url=https://s3.ru1.storage.beget.cloud -o use_path_request_style

Проверим, что монтирование прошло успешно:

root@ibzwaumnaw:~# ll mybucket/
total 59542
drwx------ 1 root root    	0 Jan  1  1970  ./
drwx------ 6 root root 	4096 Oct 17 10:20  ../
-rw-r----- 1 root root 60965992 Sep 30 12:28  Cyberduck-Installer-9.0.3.42112.exe
drwxr-x--- 1 root root    	0 Sep 30 12:28 'Terst folder'/
drwxr-x--- 1 root root    	0 Jan  1  1970  uploads/

Файлы в бакете успешно отображаются.

Автоматическое монтирование при запуске сервера

Также доступно автоматическое монтирование бакета путем добавления записи в fstab. Для этого рекомендуется создать глобальный файл авторизации /etc/passwd-s3fs.

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs

После чего для автоматического монтирования при запуске сервера необходимо создать запись в файле /etc/fstab в следующем формате:

<bucket_name> <path_to_mountpoint> fuse.s3fs _netdev,allow_other,use_path_request_style,url=<URL> 0 0

Например, для монтирования бакета f6bcd57c2800-shortsighted-katja к /mnt/coolbucket  c URL https://s3.ru1.storage.beget.cloud запись будет выглядеть следующим образом:

f6bcd57c2800-shortsighted-katja /mnt/coolbucket fuse.s3fs _netdev,allow_other,use_path_request_style,url=https://s3.ru1.storage.beget.cloud 0 0

После сохранения файла проверьте корректность записи, попробовав смонтировать диски командой:

sudo mount -a

Если ошибок при монтировании не возникло и файлы по указанной точке монтирования присутствуют, настройка автомонтирования завершена.

root@ibzwaumnaw:~# ll /mnt/coolbucket/
total 59542
drwxrwxrwx 1 root root    	0 Jan  1  1970  ./
drwxr-xr-x 3 root root 	4096 Oct 17 13:54  ../
-rw-r----- 1 root root 60965992 Sep 30 12:28  Cyberduck-Installer-9.0.3.42112.exe
drwxr-x--- 1 root root    	0 Sep 30 12:28 'Terst folder'/
drwxr-x--- 1 root root    	0 Jan  1  1970  uploads/

В данной статье мы рассказали о том, как можно использовать s3fs для монтирования облачного объектного хранилища в Linux. Таким образом, при использовании этого клиента для S3, облачное хранилище может быть удобным способом как расширения диска, так и создания общего хранилища между несколькими серверами.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

13
1041