主夫ときどきプログラマ

データベース、Webエンジニアリング、コミュニティ、etc

LinuxサーバーにS3をマウントして利用する方法 (FUSE + s3fs)

アプリケーションのログや大容量のファイルを扱う場合に
S3のBucketをサーバーにマウントして利用する方法です。
s3fsを使用してマウントしますが、FUSEをベースに作られているためこれらをインストールします。

1.事前準備

FUSEに必要なライブラリをインストールします。

$ yum install gcc
$ yum install gcc-c++
$ yum install libstdc++-devel
$ yum install pkgconfig
$ yum install make
$ yum install curl-devel
$ yum install libxml2-devel

2.FUSEのインストール

http://sourceforge.net/projects/fuse/files/fuse-2.X/
こちらからソースをダウンロードしてコンパイルします。
CentOS5で利用する場合はmountコマンドでno-canonicalizeオプションがないので、FUSE2.8.5を利用する必要があります。
CentOS6の場合は最新版を利用するとよいでしょう。現時点で2.9.2が最新です。

$ cd /usr/local/src
$ wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz/download
$ tar xvf fuse-2.9.2.tar.gz
$ cd fuse-2.9.2
$ ./configure
$ make
$ make install

3.FUSEの設定

インストールしたFUSEの関連モジュールを読み込むための設定をします。

$ echo /usr/local/lib >> /etc/ld.so.conf
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
$ ldconfig

/etc/profile.d fuse.sh export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

4.s3fsのインストール

https://code.google.com/p/s3fs/downloads/list
ここからソースをダウンロードしてコンパイルします。現時点で1.61が最新です

$ cd /usr/local/src
$ wget https://s3fs.googlecode.com/files/s3fs-1.61.tar.gz
$ tar xvf s3fs-1.61.tar.gz
$ cd s3fs-1.61
$ ./configure
$ make
$ make install

5.s3fsの設定

S3へのアクセスキーを記述したファイルを作成します。アクセスキーIDとシークレットアクセスキーをコロン(:)でつなぎます。

$ echo AccessKeyID:SecretAccessKey > /etc/passwd-s3fs
$ chmod 600 passwd-s3fs

パーミッションを正しく設定しないと
 s3fs: credentials file /etc/passwd-s3fs should not have others permissions
というエラーになります。

6.マウント

今回は various-logs というS3のバケットを /s3 というディレクトリにマウントします。

$ cd /
$ mkdir /s3
$ modprobe fuse
$ s3fs various-logs /3 -o default_acl=public-read -o allow_other

/bin/mount: unrecognized option `--no-canonicalize'
のエラーが出る場合はFUSE2.8.5を使用してください。
すでに別バージョンをインストールしている場合はFUSEのディレクトリに移動して
$ make uninstall
でアンインストールできます。

7.再起動時の設定

サーバー再起動時にfstabに記録します。

$ vim /etc/fstab
s3fs s3-bucket-name /s3 fuse allow_other,default_acl=public-read 0 0