2009年08月20日
概要
- s3fsを使い、Amazon S3をファイルシステム扱いする
前提条件
- Amazon Web Serviceのアカウントを持っている事
- s3foxなどでAmazon S3にバケットを作っておく事
作業環境
作業内容
■UNIXグループ設定
- AWSのキーを/etc/passwd-s3fsに設定(記述)する必要がある
- 一般ユーザーに見せたくないので、特定アカウント/特定グループにのみ公開する
- 特定ユーザー名: ubuntu
- 特定グループ名: s3fs
- 一般ユーザーに見せたくないので、特定アカウント/特定グループにのみ公開する
- ⇒と言う事で、グループ設定する
▼グループ名「s3fs」存在有無を確認
$ getent group s3fs
▼「s3fs」グループ作成
$ sudo addgroup --system s3fs
▼「s3fs」グループが作成された事を確認
$ getent group s3fs s3fs:x:120:
▼ubuntuを「fuse」と「s3fs」に追加
$ sudo vigr
▼ubuntuが「fuse」と「s3fs」に追加された事を確認
$ getent group fuse fuse:x:106:ubuntu $ getent group s3fs s3fs:x:120:ubuntu
▼s3fsビルド環境整理
必要に応じてパッケージをインストール。
今回は下記パッケージが不足していたのでインストール。
$ sudo apt-get install libcurl4-gnutls-dev $ sudo apt-get install libxml2-dev $ sudo apt-get install libfuse-dev
▼s3syncをビルド
$ wget http://s3fs.googlecode.com/files/s3fs-r177-source.tar.gz $ tar zxvf s3fs-r177-source.tar.gz $ cd s3fs $ make
▼s3fsをインストールし、setgid設定
$ sudo install -m 2755 -o root -g s3fs ./s3fs /usr/local/bin/s3fs $ ls -la /usr/local/bin/s3fs -rwxr-sr-x 1 root s3fs 697215 Aug 19 07:17 /usr/local/bin/s3fs
▼/etc/passwd-s3fs作成
$ sudo vi /etc/passwd-s3fs --- accesskey_id:secret_accesskey_id の形式で記述 ---
▼s3fsグループのみ公開する
$ sudo chown root:s3fs /etc/passwd-s3fs $ sudo chmod 640 /etc/passwd-s3fs
■実際にマウントしてみる
- S3バケット名: s3fs-sandbox-bucket
- マウントポイント: /home/ubuntu/mnt-s3fs
▼ユーザー確認
$ whoami ubuntu
▼マウントポイント作成
$ cd $ pwd /home/ubuntu $ mkdir mnt-s3fs
▼Amazon S3をs3fsでマウント
$ s3fs s3fs-sandbox-bucket mnt-s3fs/
▼マウント状況を確認
$ mount | grep s3fs s3fs on /home/ubuntu/mnt-s3fs type fuse.s3fs (rw,nosuid,nodev,user=ubuntu)
▼dfを実行してみる
$ df /home/ubuntu/mnt-s3fs Filesystem 1K-blocks Used Available Use% Mounted on s3fs 274877906944 0 274877906944 0% /home/ubuntu/mnt-s3fs $ df -h /home/ubuntu/mnt-s3fs Filesystem Size Used Avail Use% Mounted on s3fs 256T 0 256T 0% /home/ubuntu/mnt-s3fs
dfには256Tとして認識されている。
Amazon S3の容量に上限は無い。
いつまでもディスク使用率「0%」となるはずだ。
▼lsしてみる
$ cd mnt-s3fs $ ls -la total 0
▼ファイル生成
$ touch foo.txt $ ls -la total 1 -rw-r--r-- 1 ubuntu ubuntu 0 Aug 20 03:14 foo.txt
$ date | tee date.txt Thu Aug 20 04:31:22 UTC 2009 $ ls -la date.txt -rw-r--r-- 1 ubuntu ubuntu 29 Aug 20 04:31 date.txt $ cat date.txt Thu Aug 20 04:31:22 UTC 2009
$ df /home/ubuntu/mnt-s3fs Filesystem 1K-blocks Used Available Use% Mounted on s3fs 274877906944 0 274877906944 0% /home/ubuntu/mnt-s3fs
極小ファイルとは言え、ファイルを生成した。
しかし、使用サイズに変化が見られない。
Amazon S3の無制限を表している。
あとがき
- Amazon S3をファイルシステムとして扱えるのが面白い
- 手元の環境に巨大ストレージを構築可能となってしまった
- しかも、共有ストレージとして利用が可能だ。遅いNFSのようなもの。
- リアルタイム性が求められる場面、更新頻度が高いファイル(例えばアクセスログ)にはs3fs(Amazon S3)は向かない。
Amazon S3の特性・性質を十分理解した上でs3fsを上手に使えば、様々な利用方法が考えられる。
s3fsは面白いので、色々とハックしてみる予定。