goofysでAmazon S3をLinuxサーバにマウントする


はじめに

goofysを使用してLinuxにAmazon S3をマウントしてみました。

s3fsより動作が速いという特徴があるようです。
https://github.com/kahing/goofys#benchmark

環境

・新規構築したAmazon Linux 2を使用
・EC2のIAMロールにS3FullAccessを付与している

設定手順

1. goofysのインストール

最初にgoとfuseをインストールします。

$ sudo yum install -y golang fuse

続いて、goofysをインストールします。
記事投稿時点での最新バージョン(v0.24.0)を使用します。

$ sudo wget https://github.com/kahing/goofys/releases/download/v0.24.0/goofys -P /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/goofys

2. マウント

マウントポイントのディレクトリを作成します。
併せて、マウントポイントのユーザーとグループをec2-userとするため、uidとgidを確認しておきます。

$ sudo mkdir /mnt/goofys
$ id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)

S3バケットをマウントします。
他のユーザーからもマウントしたボリュームにアクセスできるよう、allow_otherをオプションに追加します。

$ sudo /usr/local/bin/goofys [バケット名] /mnt/goofys -o allow_other,--uid=1000,--gid=1000

実行結果を確認します。
S3バケット内のオブジェクトが取得できています。

$ df -h
mybucket  1.0P     0  1.0P   0% /mnt/goofys
$ ll /mnt/goofys
total 25
drwxr-x--- 1 ec2-user ec2-user 0 Jul 29  2020 object1
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object2
drwxr-x--- 1 ec2-user ec2-user 0 Jun 15  2020 object3
drwxr-x--- 1 ec2-user ec2-user 0 Mar 26 04:40 object4
drwxr-x--- 1 ec2-user ec2-user 0 Jun  5  2020 object5
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object6

3. S3へファイルをアップロード

AWSマネジメントコンソールからtest.txtをアップロードして、サーバ上で結果を確認します。

$ ll /mnt/goofys
total 25
drwxr-x--- 1 ec2-user ec2-user 0 Jul 29  2020 object1
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object2
drwxr-x--- 1 ec2-user ec2-user 0 Jun 15  2020 object3
drwxr-x--- 1 ec2-user ec2-user 0 Mar 26 04:40 object4
drwxr-x--- 1 ec2-user ec2-user 0 Jun  5  2020 object5
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object6
-rw-r--r-- 1 ec2-user ec2-user 4 May 15 23:24 test.txt

4. サーバ上でファイルを作成してAWSマネジメントコンソールから確認

test2.txtというファイルをマウントポイントに作成し、マネジメントコンソールから結果を確認します。

$ sudo touch /mnt/goofys/test2.txt
$ ll /mnt/goofys
total 25
drwxr-x--- 1 ec2-user ec2-user 0 Jul 29  2020 object1
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object2
drwxr-x--- 1 ec2-user ec2-user 0 Jun 15  2020 object3
drwxr-x--- 1 ec2-user ec2-user 0 Mar 26 04:40 object4
drwxr-x--- 1 ec2-user ec2-user 0 Jun  5  2020 object5
drwxr-x--- 1 ec2-user ec2-user 0 Jan  1  1970 object6
-rw-r--r-- 1 ec2-user ec2-user 0 May 15 23:25 test2.txt
-rw-r--r-- 1 ec2-user ec2-user 4 May 15 23:24 test.txt

マネジメントコンソールからもtest2.txtが追加されていることを確認できました。

5. 起動時の自動マウント設定

最後に、以下のコマンドでサーバが起動したときに自動的にマウントされるように設定します。
--dir-modeと--file-modeでマウントポイントの権限を設定できます。

$ echo "/usr/local/bin/goofys#mybucket /mnt/goofys fuse _netdev,allow_other,--dir-mode=0777,--file-mode=0666,--uid=1000,--gid=1000 0 0" | sudo tee -a /etc/fstab