EC2とS3を連携させて使う方法【S3をマウントする】

マウントするだけなら簡単。マウントした後にURLで公開したり自動マウントさせる方法がややこしかったのでメモ。



s3fsのインストール


s3fsは、S3をファイルシステムにマウントするために必要なコマンドです。派生型がいくつかあるようですが、これが大元かつこれで充分っぽいです。


s3fsのインストール方法はこのページに書いてある通り。

Amazon S3をファイルシステムとしてマウントする


yumで必要なパッケージをインストール、makeしてmake install、/etc/passwd-s3fsにアクセスキーを追記する、だけ。


アクセスキーは、アクセスキーIDとシークレットアクセスキーで構成されます。Amazonの管理画面からコピーできます。



S3をEC2へマウントする方法


上記のページに書いてある通りなんですが、一部ややこしかったので自分用メモとして書いておきます。


マウントする前準備

$ su -
# mkdir /mnt/[マウントしたいディレクトリ名]
# chmod 777 /mnt/[さっき作ったディレクトリ] ## ここがポイント!

コマンドでマウントする場合(URLで公開するバージョン)

# s3fs [作成したS3バケット名] /mnt/[さっき作ったディレクトリ] -o allow_other -o default_acl=public-read

自動起動の設定をして、その設定でマウント(URLで公開するバージョン)

# vi /etc/fstab
追記↓
# s3fs#[作成したS3バケット名] /mnt/[さっき作ったディレクトリ] fuse allow_other,default_acl=public-read 0 0 # コンマに注意!
# mount -a

コマンドでマウントしても、自動起動の設定からマウントしても、結果は同じです。どっちか片方だけ実行すればOKです。


S3のバケットにアクセスするためのURLは、"http://[作成したバケット名].s3.amazonaws.com/[バケット内の相対パス]になります。httpsにする方法もあるようです。



URLで公開しない設定でマウント

# 上記の「URLで公開する方法」から、default_acl=public-read の部分を全部削除して実行する

URLで公開しない場合は、default_acl=public-readを削除してから実行すればOKです。



注意点


S3のWeb側からディレクトリを作ってはいけないらしいです。マウントしたファイルシステムからは見えないディレクトリになってしまうそうです。


「s3fsでマウントした後にファイルシステムからディレクトリを作ると、0バイトで同名のファイルが作成されます」と記述されているページをよく見かけますが、s3fs-1.64.tar.gz(2013年3月時点で最新)を使った限りでは、そういうことはありませんでした。


マウントするディレクトリはパーミッションを777にしましょう。2013年3月23日に開発メンバーがそう発言しています。バグかも?なので後日対処済みのバージョンがリリースされるかもです。

https://code.google.com/p/s3fs/issues/detail?id=321



まとめ


S3便利ですけどアップロードが遅いですねー。既存のサーバープログラムをS3を使うように移植するときは速度に要注意です。


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール