きっかけは、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
以上で完了です。このあとデータ投入をしてみたのですが、結構速度は遅めですね。少し検証をした上で、実用可能かの判断をしたいところです。