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


関連記事

no image

オープンソースのWebロードバランサー(に使えるミドルウェア)をいろいろ調べてみる

  お客さんのWebシステムをハウジング環境からAWSへ移行するにあたり、一部のサイトにおいて仕様上ELBを使えない状況になってしまい、代替の方法を考える必要が出てきてしまった… ELB以外でロードバ …

nagios​/plugin​/SNMP​/インストール(コンパイル版)

  [pukiwiki] **nagiosプラグインの環境セットアップ(コンパイル版) [#oac4bee6] リモートホストへsnmpで値を取得する”check_snmp_*&#8221 …

no image

[MySQL] Percona xtrabackupを試す(Ver2.3)

PerconaのMySQL用バックアップツール。今回は2.3の最新版2.3.3を入れて検証してみる。リリースは2015年12月。 バックアップ対象のMySQLは、Percona謹製のMySQLだけでな …

no image

postfix + MailScanner

[pukiwiki] #contents *MailScannerインストール [#u6675e2d] MailScannerを試す。 これでウィルス/スパムを同時にスキャンできる。 【本家サイト】 …

no image

[Juniper]SRX アプリケーション別のタイムアウト設定

社内で利用しているアプリケーションのセッションが一定時間操作がない状態で切れてしまうため、回避のため設定を追加。 具体的にはTCPセッションにて、指定したポートの通信タイムアウトを指定する方法。 環境 …