S3をマウントする方法としてメジャーなs3fs-fuseというプロダクトがありますが、パフォーマンスが良くないです。色々調べたところ、よりパフォーマンスを重視した、Goofysというプロダクトがあったので、試してみました。
POSIXの規格を厳密に実装せず、パフォーマンスを重視した実装になっているそうです。
以下、セットアップ方法です。
環境
AMI: Amazon Linux AMI 2016.03.0 (HVM), SSD Volume Type - ami-f80e0596
Type: c4.large
S3でバケツを作成しておきます。
バケツ名は my-goofys-bucket としました。
Goofysをセットアップ
Goとfuseをインストール。
$ sudo yum install -y golang fuseGoofysをインストール。
$ sudo wget https://github.com/kahing/goofys/releases/download/v0.0.5/goofys -P /usr/local/bin/ $ sudo chmod 755 /usr/local/bin/goofys $ /usr/local/bin/goofys -hAWS CLIを設定。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:マウントするディレクトリを作成。
$ mkdir ~/mountpointユーザのidを確認。
$ id uid=503(yako) gid=503(yako) groups=503(yako),10(wheel)マウント。ここでは、オプションで、allow_other, uid, gidを付けます。現在のユーザ、rootユーザ以外でもディレクトリのファイルを見ることができるようにします。
$ sudo /usr/local/bin/goofys my-goofys-bucket ~/mountpoint -o allow_other,--uid=503,--gid=503Goofysプロセスが立っているのがわかります。
$ ps auxf | grep goofys yako 3624 0.0 0.0 110456 2196 pts/1 S+ 05:41 0:00 \_ grep --color=auto goofys yako 3586 0.0 0.4 223236 15592 ? Ssl 05:38 0:00 /usr/local/bin/goofys my-goofys-bucket /home/yako/mountpointログを確認。
# grep goofys /var/log/messages Apr 15 05:38:37 ip-172-31-10-234 /usr/local/bin/goofys[3586]: s3.INFO Switching from region 'us-west-2' to 'ap-northeast-1' Apr 15 05:38:37 ip-172-31-10-234 /usr/local/bin/goofys[3586]: main.INFO File system has been successfully mounted.テストファイルを置いてみます。
$ touch mountpoint/test.txtAWS CLIから確認。
$ aws s3 ls s3://my-goofys-bucket 2016-04-15 05:38:53 0 test.txtちゃんとファイルが設置されていますね。
アンマウントするには?
rootユーザでアンマウントを実行します。
ディレクトリを使用していないか確認。
$ sudo lsof | grep mountpointアンマウント実行
$ sudo umount /home/yako/mountpoint
リブート後も自動マウントされるようにするには?
fstabに追記します。
$ sudo vi /etc/fstab /usr/local/bin/goofys#my-goofys-bucket /home/yako/mountpoint fuse _netdev,allow_other,--uid=503,--gid=503 0 0rootユーザにAWS CLIを設定
$ sudo su # aws configureリブート。
$ sudo su reboot起動したら、ファイルを確認してみます。
$ ls mountpoint/ test.txt無事、マウントされていました。
Goofysが『やらないこと』
・S3に載せたファイルに任意のContent-Typeを設定しない。すべて、 binary/octet-stream になる。
※最新版で対応したそうです。https://github.com/kahing/goofys/releases
・S3のアクセスコントロールの設定をしない。
もし、コントロールしたいときは、別のスクリプトや、AWS Lambdaを回して設定しましょう。
まとめ
Goofysを使って、S3をマウントしました。
1ヶ月くらい使っていますが、とくに問題は起きていないです。
S3にファイルを集中して損失リスクの責任を持たせるので、個人的には、自前で分散ファイルシステムのNFSを組むより安心感があります。
AWSでは、Amazon EFSを準備中で、プレビュー版を提供中です。リリースされたら、くらべてみたいですね。
Top photo from mezosurfer Goofy Golf Sign