Amazon S3をCentOSにマウントする方法

2016年2月5日

きっかけは、Amazonクラウドにて、ELB + EC2 2台という構成があり、このEC2 2台にてファイル共有をする必要があるということから始まりました。リアルタイム性が低いことから、Amazonのストレージ系サービスであるS3をEC2上でマウントして、ファイル共有させる案がでてきました。

そのときのメモです。実際まだ検証段階なのでどの程度運用に耐えられるものなのかは未知数です。これからですね。

1.Amazon S3のバケット作成

これは非常にシンプルな作業です。
Amazonの管理画面にログインし、サービスの中からS3を選択します。そこに「バケットを作成」というボタンがあるので、押下しバケット名を決めて作成です。

バケットの作成

バケットの作成

2.Amazon S3の接続ユーザの作成

次にS3に接続するためのユーザを作成します。
サービスの中からIAMを選択します。ユーザメニューから「新規ユーザの作成」を選択します。名前を入力して作成します。このとき「ユーザごとにアクセスキーを生成」にはチェックを入れたままにします。

ユーザ作成

ユーザ作成

その後の画面で、ユーザの認証情報が見られるのでメモするか、ダウンロードしておきます。(念のため保存しておくのが良いかと思います。)

認証情報

認証情報

次にユーザにポリシーをアタッチします。
作成したユーザを押下すると、ユーザの画面が表示されます。アクセス許可タブからポリシーのアタッチを選択します。フィルターで「S3」を検索すると、「AmazonS3FullAccess」が出てくるので選択します。

3.s3fsのインストール

次にs3fsをインストールします。
EC2にログインし、必要なモジュールをインストールします。

yum -y install git gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel

gitコマンドにて、s3fsのソースをダウンロードします。

git clone https://github.com/s3fs-fuse/s3fs-fuse.git

s3fsをインストールします。

cd s3fs-fuse
./autogen.sh
./configure --prefix=/usr
make
make install

4.s3fsの設定、S3のマウント

S3への接続に利用するパスワードファイルを作成します。

echo "[bucketname]:[access_key]:[secret_access_key]" | sudo tee -a /etc/passwd-s3fs
chmod 640 /etc/passwd-s3fs

[bucketname]:S3のバケット名
[access_key]:作成したユーザのアクセスキー
[secret_access_key]:作成したユーザのシークレットアクセスキー

マウントするディレクトリを作成します。

mkdir /home/******/share

S3をマウントします。

/usr/bin/s3fs [bucketname] /home/******/share -o rw,allow_other,uid=501,gid=48

uid、gidにはマウント時のオーナーユーザを指定します。idコマンドで確認すると良いでしょう。これを指定しないとrootになってしまうのでうまくいかないです。

ここまででマウント完了です。以下のコマンドでマウントの確認ができます。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
[省略]
s3fs            256T     0  256T   0% /home/******/share

5.起動時のマウント設定

このままでは再起動するとマウントが外れてしまうので、起動時にマウントされるように設定をいれます。
「rc.local」の最後に記述を入れます。

vi /etc/rc.d/rc.local

#S3
fusermount -u /home/******/share
/usr/bin/s3fs [bucketname] /home/******/share -o rw,allow_other,uid=501,gid=48

以上で完了です。このあとデータ投入をしてみたのですが、結構速度は遅めですね。少し検証をした上で、実用可能かの判断をしたいところです。