Ubuntu12.04でgoofysを使ってS3マウント
amazon s3を共有ストレージっぽく使いたいと思って、s3fs使っていたんですが、lsでタイムアウトするくらい激重になってきました。
なんかもうちょっと軽くてかつ楽に導入できる何か、ということで次の3つを候補にしました。
候補
1. Amazon EFS
Amazon Elastic File System (Amazon EC2のファイルストレージサービス) | AWS
これが本命かと思ったんですが、NFSv4.1推奨なんですね。。
Ubuntu12.04はデフォでNFSv4.1がサポートされていなかったので、
mount.nfs4: an incorrect mount option was specified
というメッセージが出てコケました。
NFSv4でもいけるような気もしますが、深く掘らずに次案を考えます。
※カーネル再構築すればNFSv4.1対応できます。
2. s3 + awscli + lsyncd
個人的にベストなS3との連携方法 | takayukii.blog
これは良さげですが、ローカルディレクトリと同期するので、データサイズが増え続ける場合などは後で手を入れる必要があるかもしれません。ということで次案を考えます。
3. goofys
Ubuntu に goofys をインストールして s3 をマウントする (サーバー起動時の自動マウント設定と予期せずマウントが外れた際の対策を含む) – Qiita
なんやかんや前置きしましたが、早くなるしマウントするというところもs3fsと同じでわかりやすいのでこれでいくことにしました。
やってみる
golangダウンロード・展開
# wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz # tar xvzf go1.6.3.linux-amd64.tar.gz -C /usr/local
パス設定
# mkdir ~/go # export GOROOT=/usr/local/go # export GOPATH=$HOME/go # export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# vi ~/.bashrc ... export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
バージョン確認
# go version go version go1.6.3 linux/amd64
goofysインストール
# go get github.com/kahing/goofys # go install github.com/kahing/goofys
AWS CLI設定
公式が詳しいです。使えるようにしておきましょう。
IAMユーザーにs3権限を付与
ここは色々やりようがあると思いますが、男ならユーザーインラインポリシーでしょ(?)ということで以下のように設定しました。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListAllMyBuckets" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname" ] }, { "Action": [ "s3:Put*", "s3:Get*", "s3:Delete*" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*" ] } ] }
マウントディレクトリ作成
# mkdir /mnt/goofys
起動時マウント設定
今回はwww-dataユーザーから使いたかったのでuid、gidを設定しました。
# vi /etc/fstab /root/go/bin/goofys#bucketname /mnt/goofys fuse auto,rw,allow_other,--dir-mode=0755,--file-mode=0644,--uid=33,--gid=33 0 0
その他
もし「s3://bucketname/subA/subB」のようなパスをマウントしたい時は、
goofys#bucketname:subA/subB /mnt/goofys(略)
という風に記述すればマウント可能なようです。
しばらく使ってみましたが、実用に堪える速度になったので満足しています。