harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

AWS infra 運用

[AWS]EC2インスタンスにS3をマウントしてみる(s3fs)

投稿日:2013年3月25日

Last Updated on 2013年5月4日 by かんりにん

EC2インスタンスにS3のバケットをファイルシステムとしてマウントし、ファイル転送などを試してみる。
実際に使ってみた感じではmountコマンドと同様に利用でき、扱いやすそう。

-参考ページ:お世話になっております。
s3fs

作業docs

ためしに使ったEC2インスタンスがRHEL6系で、fuseが古かったのでs3fsも古いバージョンを使っている。

0)fuseインストール

# yum install fuse fuse-devel

1)事前準備

gcc-c++やら開発環境やら足りないものをインストール。

# yum install gcc-c++ curl-devel libxml2-devel

 

2)s3fsインストール

redhad6.*系のRPM版fuseは2.8.3、これに対してs3fsは1.19まではfuse-2.8.3でコンパイル可能、これより新しいの1.25以降はfuse-2.8.4を必要とするので要注意。
今回は検証のためfuse-2.8.3+s3fs-1.19の組み合わせで、とりあえず入れるだけ入れてみた。

$ cd /home/awsuser
$ mkdir src
$ cd src/
$ wget https://s3fs.googlecode.com/files/s3fs-1.19.tar.gz
$ tar zxvf s3fs-1.19.tar.gz
$ cd s3fs-1.19
$ ./configure
$ make
$ su -c "make install"
# ll /usr/local/bin/s3fs
-rwxr-xr-x 1 root root 1109284 3月 25 06:03 2013 /usr/local/bin/s3fs

3)環境設定

s3ストレージをマウントするためのAWSのアクセスキー、シークレットキーを記載するファイルを作成。/etc/passwd-s3fsというファイルを作成し、中にアクセスキーとシークレットキーを入力しておく。
※rootで作業。

$ su -
# touch /etc/passwd-s3fs
# vi /etc/passwd-s3fs

[編集内容]

{AWSAccessKeyId}:{AWSSecretKey}

アクセスキー、シークレットキーをセミコロンで区切ってそのまま記入しておく。

[記入例]

ABCDEFGHIJKLMNOPQ12345:AWSSECRETKEY123:abcde!"#$%&12345 ←こんなかんじ。

編集したら、パーミッションを600にしておく。

# chmod 600 /etc/passwd-s3fs

パーミッションの変更を忘れると、s3fs実行時に以下のメッセージが出て叱られる。

s3fs: credentials file /etc/passwd-s3fs should not have others permissions

ちなみにpasswd-s3fsファイルを作成し忘れた場合も同様に叱られる。

4)マウント

コマンド”s3fs”でマウントを実行。使い方はmountコマンドと同じ感じで。

[マウントポイント作成]

# mkdir -p /mnt/s3

 

[マウント実行]

# s3fs db-backup /mnt/s3 -o default_acl=public-read

 

[マウント確認]

# mount
/dev/xvde1 on / type ext4 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
s3fs on /mnt/s3 type fuse.s3fs (rw,nosuid,nodev)

[マウント解除]

マウントを解除するときはfusermountを使用する。

# fusermount -zu /mnt/s3

[マウント解除を確認]

# mount
/dev/xvde1 on / type ext4 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

マウントポイントが決まったら、/etc/fstabなどにブート時の自動マウントのための設定を書いてもOK。

5)ファイルを置いてみる

EC2インスタンス上からファイルをcp -aして置いてみる

# cp -a /home/awsuser/dbdump/20121109_dbbackup.tar.bz /mnt/s3/
# ls -al /mnt/s3/
合計 7613
-rw-rw-r-- 1 awsuser awsuser 7795431 3月 25 06:21 2013 20121109_dbbackup.tar.bz

→問題なくファイルコピー完了。
AWS Management Consoleからも見てみると、コマンド上からアップしたファイルが見えている。成功!

6)注意事項:s3fsマウント時の権限問題

S3のバケットをs3fsでマウントすると、s3fsを実行したユーザーのみアクセスが許可され、それ以外のユーザーアクセスは禁止される、という仕様らしい。
解決策としては、オプション”allow_other”を使うとよいらしい。

-参考:お世話になっております!
s3fsのallow_otherオプションとurlオプションとfstab

普通にマウントした場合

rootでマウントした場合

# s3fs backup-db1-tokyo /mnt/s3-tokyo
# ll /mnt/
合計 0
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-singapore
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-tokyo

と、このように普通にマウントポイントを見ることができるが
一般ユーザーでアクセスしようとすると…

# su - awsuser
$ ll /mnt/
ls: cannot access /mnt/s3-singapore: 許可がありません
ls: cannot access /mnt/s3-tokyo: 許可がありません
合計 0
d????????? ? ? ? ? ? s3-singapore
d????????? ? ? ? ? ? s3-tokyo

→/mntから、いきなり許可なしとして怒られる。

/mnt以下のマウントポイントへのアクセスは、言わずもがな。

$ ls -al /mnt/s3-tokyo
ls: cannot access /mnt/s3-tokyo: 許可がありません

ということで、オプション”allow_other”を使ってみる。

コマンド実行例

例によってrootアカウントでマウント。

# s3fs backup-db2-singapore /mnt/s3-singapore -o allow_other

マウント確認

# ll /mnt/
合計 0
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-singapore
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-tokyo

→マウントポイントのチェックは問題なし。

ここで一般ユーザーへsu -してみる。

# su - awsuser
$ ll /mnt
合計 0
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-singapore
drwxrwxrwx 1 root root 0 12月 31 19:00 1969 s3-tokyo

→問題なくアクセスできた!

$ ll /mnt/s3-tokyo/
合計 0

→フォルダ指定でもOK。ためしにファイルを置いてみて、問題なければ設定完了。

-AWS, infra, 運用
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

[AWS EC2] RHEL6のインスタンスでttyS0 のエラーが大量発生

  AWS EC2にてRedHat Enterprise Linux 6.5(以下RHEL6.5)のインスタンスを立ち上げ、MySQLサーバーをセットアップしてる最中 /var/log/message …

no image

net-snmp v3設定

[pukiwiki] 自分用メモです。 v3に対応していないアプライアンスもあるので、使い道は限定されますが・・・ *なんとなくOverview snmp v1、v2でのコミュニティによる認証をしてい …

no image

[メモ]rsyslog たくさんのNW機器のsyslogを振り分ける方法

客先にそこそこの数のルーター、スイッチ、APがあるので、syslogサーバーを立てて一括管理しておきたいのだけど、DBに放り込むほどではないのでrsyslogdでまかなうことに。 syslogファシリ …

nagios snmp ディスク使用率表示スクリプトのカスタマイズ

  [pukiwiki] もともとcheck_snmp_storageを使用していたが、nagiosgraphでグラフを出力させるための perfdataの表示を、nagiosgraph側でパーティシ …

nagiosgraph​/4.グラフ設定例​/check_mem_pl

  [pukiwiki] *nagiosgraphへのグラフ設定追加例[check_mem.pl] [#d79c6d0f] nagios exchangeから取得したcheck_mem.plの実行結果 …