What's?
Amazon S3をファイルシステムとしてマウントできたらなぁと思って少し調べたら、s3fsというのが有名だということがわかりまして。
なんですけど、手元の環境ではs3fsでは上手くいかなかったので、Goofysに変えてみたところうまくいったので、こちらで試してみました。
Goofys
Goofysは、Amazon S3バケットをファイルシステムとしてマウントできるソフトウェアです。Goで実装されています。
s3fsよりもパフォーマンスが良いことが売りなようですが、s3fsの紹介を読むと代わりにPOSIX互換性は落ちるようです。
goofys - similar to s3fs but has better performance and less POSIX compatibility
環境
今回の環境は、こちらです。
$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
$ uname -srvmpio
Linux 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
CentOS 7ですね。
Goofysをインストールする
Goofysの手順に従って、インストールします。
Linuxの場合はビルド済みのバイナリがあるので、こちらをダウンロードします。/usr/loca/bin
に配置しましょう。
$ sudo curl -L https://github.com/kahing/goofys/releases/latest/download/goofys -o /usr/local/bin/goofys
$ sudo chmod a+x /usr/local/bin/goofys
バージョンを確認。
$ goofys --version
goofys version 0.24.0-45b8d78375af1b24604439d2e60c567654bcdf88
S3バケットを用意する
マウント対象となるS3バケットを用意します。
$ aws s3api create-bucket --bucket charon-test-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1
ファイルも置いておきましょう。
$ echo 'Hello S3!!' | aws s3 cp - s3://charon-test-bucket/hello.txt
$ echo 'Hello S3!! in sub dir' | aws s3 cp - s3://charon-test-bucket/dir/hello.txt
確認。
$ aws s3 cp s3://charon-test-bucket/hello.txt -
Hello S3!!
$ aws s3 cp s3://charon-test-bucket/dir/hello.txt -
Hello S3!! in sub dir
これで、準備はOKです。
S3バケットをファイルシステムとしてマウントする
では、作成したS3バケットをファイルシステムとしてマウントしてみましょう。
AWSのクレデンシャルは、今回は環境変数で設定しました。
export AWS_ACCESS_KEY_ID=xxxxx
export AWS_SECRET_ACCESS_KEY=xxxxx
export AWS_DEFAULT_REGION=ap-northeast-1
マウント先のディレクトリを作成。
$ mkdir $HOME/charon-test-bucket
マウント。
$ goofys charon-test-bucket $HOME/charon-test-bucket
すごく、あっさりとマウントできました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 912M 0 912M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.5M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/vda1 40G 3.2G 37G 8% /
tmpfs 184M 0 184M 0% /run/user/1000
charon-test-bucket 1.0P 0 1.0P 0% $HOME/charon-test-bucket
ls
で見てみます。
$ ls -l charon-test-bucket
total 5
drwxr-xr-x. 2 xxxxx xxxxx 4096 Jun 20 13:00 dir
-rw-r--r--. 1 xxxxx xxxxx 11 Jun 20 11:48 hello.txt
ディレクトリ内に入って、ファイルを見てみましょう。
$ cd charon-test-bucket
$ cat hello.txt
Hello S3!!
$ cat dir/hello.txt
Hello S3!! in sub dir
OKですね。
ファイルやディレクトリも作成してみましょう。
$ echo 'Hello Goofys!!' > test.txt
$ mkdir dir2
$ echo 'Hello Goofys!! in sub dir' > dir2/test.txt
AWS CLIで確認。
$ aws s3 cp s3://charon-test-bucket/test.txt -
Hello Goofys!!
$ aws s3 cp s3://charon-test-bucket/dir2/test.txt -
Hello Goofys!! in sub dir
なお、バージョニングを有効にしている場合はファイルを更新するとバージョンが更新されますし、rm
しても削除マークのついたバージョンが増えるという挙動になるのはAWS CLIなどを使った場合と変わりません。
アンマウントする
マウントしたS3バケットをアンマウントするには、fusermount
で。
$ fusermount -u $HOME/charon-test-bucket