Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

goofysを使ってAmazon LinuxにS3をマウントする。

More than 3 years have passed since last update.

はじめに

AWSを利用していて、S3をサーバーマウントする技術としてs3fsが有名だと思います。
ですが、s3fsは遅いと感じる人は少なくないかと思います。
そこで他に何かないかなと思って調べたところ、goofysというのがあるみたいです。

goofysのREADMEに、以下のBenchmarkが載っていました。

goofys-benchmark

ということで、とりあえずgoofysを使ってS3をマウントしたいと思います。

goとfuseのインストール

まず、goofysを利用するにあたり、goとfuseが必要となるためパッケージをインストールします。

インストール
$ sudo yum install golang fuse

golangをインストールする際に依存関係がたくさんあるためyumで一気にインストールしてしまいましょう。

AWS CLIの設定

aws cli環境を設定します。

設定
$ aws configure
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]:

バケットの作成

aws cli環境の設定ができたらマウントするためのバケットを作成します。

バケット作成
$ aws s3 mb s3://kohei-goofys
make_bucket: s3://kohei-goofys/
バケット確認
$ aws s3 ls s3://kohei-goofys

作成したばかりだとバケットには何も無いのでaws s3 lsしても戻り値はありません。

goofysインストール

まず、GOPATHを設定します。

パス設定
$ export GOPATH=$HOME/go
$ echo $GOPATH
/home/ec2-user/go

今回はec2-userのホームディレクトリにインストールするようにしています。
設定ができたらインストールです。

インストール
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys

*getもinstallもプロンプトが戻ってくるまでに若干時間がかかる可能性があります。

S3マウント

インストールができたらいよいよマウントです。

マウントポイントの作成
$ mkdir ~/mount-goofys
マウント
$ ./go/bin/goofys kohei-goofys ~/mount-goofys

プロンプトが帰ってきたら完了です。
マウントに成功してもしなくても、何も戻ってこないので実際に確認してみます。

確認

確認ポイントは幾つかあります。

プロセス確認
$ ps auxf |grep goofys
ec2-user  3030  0.0  0.4 110472  2144 pts/0    S+   03:08   0:00              \_ grep --color=auto goofys
ec2-user  3022  0.3  2.7 197876 13668 ?        Ssl  03:08   0:00 /home/ec2-user/go/bin/goofys kohei-goofys /home/ec2-user/mount-goofys
ログ確認
$ sudo grep goofys /var/log/messages
Jul  1 03:08:50 ip-172-31-3-125 /home/ec2-user/go/bin/goofys[3022]: s3.ERROR code=incorrect region, the bucket is not in 'us-west-2' region msg=301 request=#012
Jul  1 03:08:51 ip-172-31-3-125 /home/ec2-user/go/bin/goofys[3022]: s3.INFO Switching from region 'us-west-2' to 'ap-northeast-1'
Jul  1 03:08:51 ip-172-31-3-125 /home/ec2-user/go/bin/goofys[3022]: main.INFO File system has been successfully mounted.
ボリューム確認
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       7.8G  1.6G  6.1G   21% /
devtmpfs         238M   56K  238M    1% /dev
tmpfs            246M     0  246M    0% /dev/shm
kohei-goofys     1.0P     0  1.0P    0% /home/ec2-user/mount-goofys

無事マウントができたようです。
では、ファイルの作成を行います。

ファイルの作成
$ touch ~/mount-goofys/test
$ ls ~/mount-goofys/
test

作成できたらaws s3コマンドでバケット内を直接確認してみます。

バケット内の確認
$ aws s3 ls s3://kohei-goofys
2016-07-01 03:14:44          0 test

先ほど作成されたコマンドがこちらからでも確認できました。

自動マウント設定

マウントはできるようになりましたが、毎回手動でマウントするのは大変です。
なので/etc/fstabにサーバー起動時にマウントされるように設定します。

ただ、ここでポイントはサーバー起動時はrootで処理が実行されます。
ということはaws cliの設定もrootで行う必要があります。

設定
$ sudo aws configure
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]:

設定ができたらfstabを修正します。

fstab修正
$ sudo vi /etc/fstab
$ cat /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/home/ec2-user/go/bin/goofys#kohei-goofys /home/ec2-user/mount-goofys fuse _netdev,allow_other,--file-mode=0666,--uid=500,--gid=500 0 0

ここでとても重要なのがオプションでallow_otherが指定されていることです。
このオプションがないとroot以外のユーザーからは見えなくなってしまいます。
また、--file-mode--uid--gidはファイルやディレクトリが作成された際のデフォルト権限/所有者の設定になります。

今回の場合はec2-userがUID、GIDともに500でした。

id確認
$ id
uid=500(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel)

修正が完了したら自動マウントを確認します。

自動マウント
$ sudo mount -a
確認
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1       7.8G  1.6G  6.1G   21% /
devtmpfs         238M   56K  238M    1% /dev
tmpfs            246M     0  246M    0% /dev/shm
kohei-goofys     1.0P     0  1.0P    0% /home/ec2-user/mount-goofys

ちゃんとマウントができたのが確認できます。
もし、ここでマウントが見えなかったらsudo df -hを試してみてください。
それで見える場合は権限周りがうまくできてない可能性があります。

オプション 説明
_netdev ネットワークが有効になるまでマウントを待つためのオプション。
ネットワーク経由のデバイスを起動時にマウントさせたい場合などに指定する。
allow_other 他のユーザーでも利用できるようにする。
--file-mode マウントする際のファイル権限を設定する。
--uid マウントするユーザーIDを指定する。
--gid マウントするグループIDを指定する。

また、上記は今回使ったオプションの説明となるので参考にしてもらえればと思います。

おわりに

とりあえずgoofysがどんな感じかを試したくて行いましたが、導入はとても簡単でした。
ただ、自動マウント設定の際のアクセス権限周りの挙動を確認するのに少々時間かかったかなという感じです。
GitHubのBenchmarkではs3fsよりかなり優秀な感じですが、実際比較はまだしてないのでそっちの方もできたらなと思っています。
また、実際に利用している方がいましたらそこらへんの情報についてコメントいただけると嬉しいです。

hengjiu
AWSであなたの仕事を快適に。 〜 For your Comfortable Working 〜
https://www.hengjiu.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away