Задача – смонтировать AWS S3 корзину к локальной системе, отдельным диском.
Используем s3fs
. Документация – тут>>>.
На Arch Linux устанавливаем из репозитория:
[simterm]
$ sudo pacman -S s3fs-fuse
[/simterm]
На macOS – через homebrew
:
[simterm]
$ brew cask install osxfuse $ brew install s3fs
[/simterm]
osxfuse
сообщил:
==> Caveats
To install and/or use osxfuse you may need to enable their kernel extension inSystem Preferences → Security & Privacy → General
А brew
после установки выдал предупреждение:
Be aware that s3fs has some caveats concerning S3 “directories”
that have been created by other tools. See the following issue for
details:https://code.google.com/p/s3fs/issues/detail?id=73
Надо будет проверить что там.
Для Windows – есть пакет wins3fs
, но его не проверял.
Содержание
IAM и авторизация
Создаём IAM-пользователя с Programmatic access:
Выбираем Attach existing policies directly и жмём Create policy:
Переключаемся в JSON-вид, добавляем политику:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::s3fs-testing" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::s3fs-testing", "arn:aws:s3:::s3fs-testing/*" ] } ] }
Если пользователю нужен будет доступ через веб-админку – то политика будет выглядеть так:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": "*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::s3fs-testing" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::s3fs-testing", "arn:aws:s3:::s3fs-testing/*" ] } ] }
Сохраняем её:
Возвращаемся во вкладку с созданием пользователя, обновляем списки политик, находим добавленную:
Сохраняем ключи:
Монтирование S3
Создаём каталог для монтирования корзины:
[simterm]
$ sudo mkdir /mnt/s3fs-test $ sudo chown setevoy:setevoy /mnt/s3fs-test/
[/simterm]
Задаём переменные:
[simterm]
$ export AWSACCESSKEYID=AKI***DDQ $ export AWSSECRETACCESSKEY=O1f***MN/
[/simterm]
Либо – через файл ~/.passwd-s3fs
:
[simterm]
$ echo AKI***DDQ:O1f***MN/ > ~/.passwd-s3fs
[/simterm]
В виде ACCESSKEY:SECRETKEY без пробела.
Если корзин несколько – то указываем их в виде:
[simterm]
$ echo имя-корзины:access-key:secret-key > ~/.passwd-s3fs
[/simterm]
Задаём права доступа только владельцу:
[simterm]
$ chmod 600 ~/.passwd-s3fs
[/simterm]
Монтирование на Linux
Монтируем раздел:
[simterm]
$ s3fs s3fs-testing /mnt/s3fs-test
[/simterm]
Проверяем монтирование:
[simterm]
$ findmnt /mnt/s3fs-test/ TARGET SOURCE FSTYPE OPTIONS /mnt/s3fs-test s3fs fuse.s3fs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000
[/simterm]
Проверяем каталог:
[simterm]
$ ls -l /mnt/s3fs-test/ total 51 ---------- 1 root root 52174 Nov 19 13:43 2adbz0.jpg
[/simterm]
ОК – тестовый файлик в корзине на месте.
При необходимости передать дополнительные опции – используем -o
optionname.
Монтирование на macOS
Повторяем на macOS.
Выполняем монтирование:
[simterm]
$ mkdir s3test $ export AWSACCESSKEYID=AKI***DDQ $ export AWSSECRETACCESSKEY=O1f***MN/ $ s3fs -d s3fs-testing /Users/jenkins/s3test/
[/simterm]
Тут после первой попытки смонтировать раздел – macOS выводит на экране сообщение, что ему необходимо разрешить загрузку модуля.
Открываем General Settings, внизу в App – разрешаем загрузку модуля.
Повторяем s3fs -d s3fs-testing /Users/jenkins/s3test/
, проверяем:
[simterm]
Mobiles-Mac-mini:~ jenkins$ ls -l /Users/jenkins/s3test/ total 104 ---------- 1 root wheel 52174 Nov 19 2018 2adbz0.jpg
[/simterm]
Окей.
И пробуем копирование файлов с локальной файловой системы в S3:
[simterm]
14:29:08 [setevoy@setevoy-arch-work ~] $ touch /tmp/testfile 14:29:15 [setevoy@setevoy-arch-work ~] $ cp /tmp/testfile /mnt/s3fs-test/
[/simterm]
Проверяем:
[simterm]
14:29:43 [setevoy@setevoy-arch-work ~] $ ll /mnt/s3fs-test/ total 52 ---------- 1 root root 52174 Nov 19 13:43 2adbz0.jpg -rw-r--r-- 1 setevoy setevoy 0 Nov 19 14:29 testfile
[/simterm]
Готово.