2011年7月15日金曜日

S3ってなんじゃ?(s3fs編)

s3fsというS3の領域をファイルシステムとしてマウントできる仕組みがあります。
今回はそれを使ってみます。

インストール

s3fsはFUSEというファイルシステムを構築するためのフレームワークをベースとして作られているため、動作にはFUSEのインストールが必要です。

最初にインストールやベースとなる挙動に必要なものをyumからインストールします。
# yum -y install gcc
# yum -y install gcc-c++
# yum -y install libstdc++-devel
# yum -y install pkgconfig
# yum -y install make
# yum -y install curl-devel
# yum -y install libxml2-devel

次にFUSEのインストールです。FUSEはyumからも取得できますが、リポジトリにはs3fsが対応しているfuseのバージョンよりも古いものしかないためここからソースを取得してインストールします。
$ wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz?r=&ts=1310717181&use_mirror=jaist -O fuse-2.8.5.tar.gz
$ tar xvzf fuse-2.8.5.tar.gz
$ cd fuse-2.8.5/
$ ./configure prefix=/usr
$ make
# make install 

次にpkgconfigパスを環境変数に設定します。
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/
#configureにprefixをつけなかった場合は/usr/local/lib/pkgconfigです。

fuseをモジュールとしてカーネルにロードします。
# ldconfig
# modprobe fuse

続いてs3fsをインストールします。
ここからs3fsをダウンロードしてインストールします。
$ wget http://s3fs.googlecode.com/files/s3fs-1.40.tar.gz
$ cd s3fs-1.40
$ ./configure prefix=/usr
$ make
# make install
これでインストールは完了です。



設定

マウントするs3のアカウント情報をs3fsに教えるために、/etc/passwd-s3fsにキー情報を記載します。
# echo アクセスキー:シークレットキー > /etc/passwd-s3fs
# chmod 640 /etc/passwd-s3fs 
複数の認証を設定する場合は
# echo バケット名:アクセスキー:シークレットキー > /etc/passwd-s3fs
# chmod 640 /etc/passwd-s3fs 
とします。

それではマウントしてみます。
# mkdir /mnt/s3
# s3fs myfirst-bucket /mnt/s3

これでmyfirst-bucketというバケットが/mnt/s3というディレクトリとしてマウントすることができました。
# df -k
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1             10321208   3364700   6432220  35% /
none                    314952         0    314952   0% /dev/shm
fuse                 274877906944         0 274877906944   0% /mnt/s3





おまけ

ついでに起動時の自動マウントの設定を行います。

/etc/fstabの最終行に以下の設定を追記し、自動でボリュームをマウントするようにします。
# vi /etc/fstab
......

s3fs#myfirst-bucket /mnt/s3 fuse allow_other,default_acl=public-read 0 0


しかしこれだけでは、fuseが有効になっていないため、自動マウントに失敗します。
fstabの設定が実行される前にfuseを有効にするため、
rc.sysinit内のfstabの記述より前にfuseをカーネルにロードして有効にします。
# vi /etc/rc.d/rc.sysinit
.....

. /etc/init.d/functions
modprobe fuse ←----------------追記

....
fstabの記述

これで、起動時に自動的にマウントされるようになります。

以上、現場からでした。