No.54


【AWS】【Linux】S3のマウントをgoofysで行う

ローカルへのS3バケットのマウントをgoofysで行う

 S3バケットのマウントはs3fsが一般的だったかと思うのだが、s3fsはとにかく遅い。100ファイルとかあるディレクトリをlsしようものなら、10秒くらいは固まること必至だ。

 便利ではあるけどこれではいかんせん使いづらい、と思っていた所、goofysという素敵なツールが開発されていることを知った。

s3fsよりも高速に使えるgoofysを試してみた

 上記の紹介サイトにもあるけどこのgoofys、確かに速い。上記以外にも速度比較をしているページがあるが、軒並み比較にならないほどの速度になっている。

 そんなわけで、これから主流になるんじゃ無いかと思うgoofysだが、使い方にちょっと癖がある。特にs3fsと同じ感覚で使えると思うと嵌まることになる。備忘録がてらその点をメモしておく。


注意点①:-oオプション

 システムのマウントに使うオプションだからs3fsと同じじゃね?とか甘く考えると大ハマリする。以下、自分が嵌まったポイント。

ハマリポイント 対策
goofysはキャッシュ機構がない use_cacheは使わない
uid、gidの設定は専用オプションで行う --uid--gidオプションを利用すること
iam_roleの設定はデフォルト設定で行う 実行ユーザーの.aws/credentialsを設定しておこう
エンドポイント なぜか--endpointオプションではうまくいかない。--regionオプションでregion指定することでうまくいく

注意点②:バケット表記

 s3fsではバケットだけでなく、バケット以下のフォルダにもマウントが行えた。しかし、goofysではマウントできるのはバケットのみである。「バケットのみ」と明記はされていないが、usageには「bucket」と書かれてる。つまりそういうことだ。

 原因はgoofysがS3に接続先URL(バケットへの直接のエンドポイント)を送るとき、コマンドラインから渡された文字列を「エスケープして」送信するため。HACKすれば直せるけど、あまりそういうことはしたくないので諦めた。