S3をマウントするgoofysを試してみた

2017–02–19

S3をEC2からマウントするgoofysを試してみた。 昔s3fsを試したことがあるんだけど、パフォーマンスが問題になったりしたことがありました。 巷では爆速と噂のgoofysですが、とりあえずパフォーマンスは置いておいて、できないことが何かを見ておきました。

何ができないのか

公式にもPOSIXは二の次ということで、できないことを書いてくれています。 group,modeとかは固定,simlinkは動かないそうです。 後、atime,mtime,ctimeが全部同じになります。

インストール

とはいえ使い心地を見ときたかったので、インストールして見ました。 ansibleで環境を作って見ました。 fuseとgoが必要です。

---
- hosts: tag_Name_gside_goofys
  remote_user: gentoo
  become: true
  tasks:
    - name: install sys-fs/fuse
      portage: >
        package=sys-fs/fuse
        state=present
    - name: install dev-lang/go
      portage: >
        package=dev-lang/go
        state=present
    - name: goofys Download
      get_url: url="https://github.com/kahing/goofys/releases/download/v0.0.10/goofys" sha256sum="78baba6f9c3d8cb06a55a872f0380bc8b37af649a0a7d6961d0789a3bdcd62d4" dest="/usr/local/bin" mode="744"	  

実はmountの設定も書いていたのですが、IAM RoleでEC2に権限を与えて動作させようとした場合、fstabの設定ではマウントしてくれませんでした。 Credentialを置きたくない・置けないポリシーの場合はネックになりそうですね。

検証

IAM Role + fstabは動作しなかったので、コマンドでマウントします。

$ goofys gside-goofys /mnt/s3/

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
udev              10M     0   10M    0% /dev
/dev/xvda2       8.6G  2.3G  5.9G   28% /
tmpfs             49M  240K   49M    1% /run
shm              242M     0  242M    0% /dev/shm
cgroup_root       10M     0   10M    0% /sys/fs/cgroup
gside-goofys     1.0P     0  1.0P    0% /mnt/s3	  

ファイルを作ってみました。

$ touch /mnt/s3/hoge
$ ls -la /mnt/s3/hoge
-rw-r--r-- 1 root root 0  2月 19 21:09 /mnt/s3/hoge	  

ヘルプにもありますが、fileのモードは644,uid,gidは0がデフォルトで固定です。 これらの固定値はオプションで違う値に変更は可能ですが、固定値であることは変わりません。

$ ln -sf hige /mnt/s3/foo
ln: シンボリックリンク '/mnt/s3/foo' の作成に失敗しました: 関数は実装されていません	  

シンボリックリンクは作れません。

まとめ

この割り切りが受け入れれるかというところでしょうね。 それでも爆速という点を重視して、制限を受け入れた上での使い道はいくらでもあると思います。 が、IAM Role+fstabの部分は対応を切望したいところです。