harumaki.net

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

AWS infra 運用

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

投稿日:2013年3月25日

Last Updated on 2021年7月4日 by かんりにん

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

作業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	←こんなかんじ。

    編集したら、パーミッションを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"を使うとよいらしい。

  • 普通にマウントした場合
    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

net-snmp v3設定

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

no image

postfinger

postfinger Simon Mudd氏作のpostfix用ユーティリティスクリプト。 #postfixのsrc.rpmを探していてたまたま見つけた… postfixのインストール環境とコンフィグ …

nagiosgraph​/3.グラフ設定追加

  nagiosgraphへのグラフ設定追加 † nagiosgraphは監視対象のホストにプラグインを追加すると、プロセス再起動時に認識し 追加したプラグインのステータスを取得し、ログ …

[AWS] EC2 HVMタイプを使う時のファイルシステム周りの作業1(容量拡張、growpart利用)

hvmタイプのAMIを使用する際に初期設定として、ファイルシステムの容量拡張が必要になる。 インスタンス作成時にEBSを標準サイズから拡張してセットしても マウントされたストレージサイズが上がるだけで …

no image

CentOSにwmiクライアントを入れてみる

何気にLINUX PACKAGE SEARCHでwmi(Windows Management Instrumentation)の RPMパッケージが紹介されていたので、空き時間に入れて試してみる。難易 …