EC2にS3をマウントしたので、手順を記録します。
1) s3fs-fuseのダウンロード
gitからダウンロードしました。
$ sudo yum install git (gitが入っていない場合はインストール)
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git
2) s3fs-fuseインストール準備
s3fs-fuseのインストールに必要なパッケージがない場合はインストールします。
以下のパッケージが足りなかったためインストールしました。
$ sudo yum install automake gcc-c++ fuse-devel openssl-devel libcurl-devel libxml2-devel
3) s3fs-fuseのインストール
s3fs-fuseをダウンロードした場所へ移動し、インストールしました。
$ cd s3fs-fuse/
$ ./autogen.sh
$ ./configure –prefix=/usr
$ make
$ sudo make install
4) マウントポイントの作成
今回は/usr/share/nginx/の下へs3というディレクトリを作成しました。
$ cd /usr/share/nginx/
$ mkdir s3
5) マウントに必要な情報を調べる
マウントを実行するためには以下の情報が必要です。
- マウント先バケット名
- マウントポイント
- マウントポイントのuid
- マウントポイントのgid
- ロール名(EC2にアタッチされているS3アクセス用ロール)
- エンドポイント(リージョン)
マウントポイントのユーザーはec2-user、グループはnginxとしたいため、それぞれのidを調べました。
$ id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),…
$ id nginx
uid=996(nginx) gid=994(nginx) groups=994(nginx)
6) マウント
s3fsコマンドを実行します。
$ sudo s3fs <マウント先バケット> <マウントポイント> -o rw,allow_other,uid=1000,gid=994,iam_role=<S3へのロール>,endpoint=ap-northeast-1
アンマウントをする時は以下のコマンドを実行します。
$ sudo umount <マウント先バケット>
7) 確認
$ df -h
$ ls <マウントポイント>
等で指定したS3バケットがマウントがされているか確認します。



—発生したトラブルと解決した方法—
トラブル1) s3fsコマンドを実行してもマウントされていない
s3fsコマンドを実行してもマウントされていない(コマンド実行時にエラーも出力されない)というトラブルが発生しました。
【原因】
読み込みと書き込み権限のみでロールを作成していましたが、マウント実行にはリスト権限も必要だったようです。
【解決方法】
マネジメントコンソールIAM⇒該当のロール(ポリシー)を選択しリスト権限を追加しました。



トラブル2) マウントポイントでlsやcatコマンドを実行するとエラーが表示される
マウントポイントのlsでエラー(No such file or directory)が表示されたり、ls -lでファイルの詳細を表示したときにパーミッションやユーザーなどの情報が???となっていたり、ファイルは存在するのにcatコマンドでファイルの中身が参照できないというトラブルが発生しました。



【原因】
ロールでバケットへのアクセス権限は設定していましたが、バケットの中身に対してのアクセス権限が設定されていなかったことが原因でした。
【解決方法】
ロール(ポリシー)のリソースへバケットの中身(バケット名/*)を追加で設定することで解決しました。
マネジメントコンソールIAM⇒該当ロールのポリシー選択⇒リソース⇒bucket項目へarn:aws:s3:::<バケット名>/*を追加しました。



トラブル3) /var/log/messagesへエラーメッセージ
こちらはマウントが失敗するわけではありませんが、トラブル1)の原因を探っているときに/var/log/messagesへ(Failed to connect region ‘us-east-1′(default), so retry to connect region ‘ap-northeast-1’.)というエラーメッセージが出力されているのを見つけ、原因を調べました。
【原因】
s3fsコマンド実行時にendpointの指定がないとデフォルトでus-east-1へ接続しにいくようです。
【解決方法】
マウント実行コマンドにendpoint=ap-northeast-1を追加することでエラーメッセージが表示されなくなりました。
8) 自動マウント設定
再起動したときに自動的にマウントされるように設定しました。
・/etc/rc.localへマウント実行コマンドの追加
$ sudo vi /etc/rc.local
最終行に以下追加
s3fs <マウント先バケット> <マウントポイント> -o rw,allow_other,uid=1000,gid=994,default_acl=public-read,iam_role=<S3へのロール>,endpoint=ap-northeast-1
・実行権限の付与
$ sudo ls -l /etc/rc.d/rc.local
-rw-r–r– 1 root root 635 Feb 25 11:20 /etc/rc.d/rc.local
はじめはパーミッション644となっていましたが、744に変更しました。
$ sudo chmod 744 /etc/rc.d/rc.local
$ sudo ls -l /etc/rc.d/rc.local
-rwxr–r– 1 root root 635 Feb 25 11:20 /etc/rc.d/rc.local
これで設定完了です。
参考にさせていただいたサイト

