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(略)

という風に記述すればマウント可能なようです。
しばらく使ってみましたが、実用に堪える速度になったので満足しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です