CentOS5.8にs3fsをインストールする方法

S3をCentOSからファイルシステムっぽく使えないだろうか。
そんな事を考えつつ色々探していてたら
s3fsというのを見つけました。

やったこと

  • FUSEをインストール
  • s3fsのコンパイルに必要なパッケージをyumでインストール
  • s3fsをインストール
  • S3にバケットを作成
  • IAMでs3用のユーザー作成
  • S3のバケットをマウント

事前に必要なもの

git,make,gcc-c++が必要なので、
事前にインストールしておく必要があります。

FUSEのインストール

CentOSのyumリポジトリのFUSEはバージョンが古いらしく、
yumからインストールした場合、s3fsのコンパイルに失敗してしまいます。

なので、最新っぽいソースファイルをダウンロードし、
コンパイルしてインストールする必要があります。

1
2
3
4
5
6
7
cd /usr/local/src
curl -OL http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz
tar xvzf fuse-2.9.2.tar.gz
cd fuse-2.9.2
./configure
make
make install

s3fsに必要なパッケージインストール

s3fsのインストールに必要なパッケージを幾つかインストールします。

1
yum -y install curl-devel libxml2-devel openssl-devel

s3fsをインストール

gitでソースファイルを取得し、s3fsをインストールします。

1
2
3
4
5
6
cd /usr/local/src
git clone git://github.com/memorycraft/s3fs-cloudpack.git
cd s3fs-cloudpack
./configure
make
make install

S3にバケットを作成

S3にバケットを作らないと何も始まらないので、
Management Consoleからバケットを作成します。

「Create Bucket」をクリックし、バケットを作成します。

バケット名とリージョンを入力し、「Create」をクリックします。
同じバケット名のバケットを、他のユーザーが既に作成していた場合はエラーになります。

MacやLinuxなどのPCからファイルをアップロードする場合は、
s3cmdを使うと便利です。

IAMでs3用のユーザー作成

IAMをManagement Consoleで開き、 S3にアクセスするためのユーザーを作成します。

「Create New User」をクリックします。

ユーザー名を入力し、作成を行うと
Access Key IDとSecret Key IDが作成されます。
この情報をテキストファイルにコピーしておくなどして保存しておきます。

ユーザーを作成後、一覧に作成したユーザーが表示されているので、
チェックボックスにチェックを入れ、選択状態にした後、
一覧の下のタブから「Permissions」を選択し、
「Attach User Policy」をクリックします。

s3への全てのアクセス権限を与えたい場合、
「Select Policy Template」から「Amazon S3 Full Access」の「Select」をクリックします。

「Policy Generator」や「Custom Policy」を使うと、細かくアクセス権限を指定できます。

「Apply Policy」をクリックし、アクセス権限の設定を適用します。

s3のバケットをマウント

S3に作成したバケットを、CentOSからファイルシステムっぽくマウントを行います。
まずは、/etc/passwd-s3fsファイルを作成します。

1
2
echo "bucket_name:access_key_id:secret_key_id" >> /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs 

上記のファイルの内容は以下の通りです。

設定する値
bucket_name 作成したバケット名
access_key_id IAMで作成したユーザーのAccessKeyID
secret_key_id IAMで作成したユーザーのSecretKeyID

s3fsを使って、マウントを行います。

1
2
3
mkdir -p /mnt/s3
echo "s3fs#backet_name /mnt/s3 fuse allow_other,url=https://s3.amazonaws.com 0 0" >> /etc/fstab
mount -a

マウント時のオプションの説明は以下の通りです。

オプション 説明
allow_other root以外のユーザーも/mnt/s3に読込・書込が行えます
url=https://s3.amazonaws.com httpsを使ってS3にアクセスします

s3fsを使ってみた感想など

一応、動いているようには見えるのですが、
自分のMacからs3cmdを使ってファイルを更新した場合、
s3fsでマウントしたディレクトリからファイルを読むと
ファイルがちゃんと読めない事があります。

なので、Macからs3cmdでファイルを更新する度に
s3fsでマウントしたディレクトリをunmountしてmountしなおすといった作業が必要でした。

S3をCDNの代わりっぽく運用できるらしいので、
s3fsを使えばアプリに手を入れずにそういう事できるかなーとか思ってましたが、、、
もうちょい検証しないといけなさそう。

Comments