EC2にS3バケットをマウントして古いsyslogを保管(2) ~s3fsの導入~

takaokaです。前回S3にアクセス可能なIAMのユーザを作成しました。
今回はCentOS6.5のEC2インスタンスにs3fsを導入しバケットをマウントしてみたいと思います。

s3fsの最新版はhttps://github.com/s3fs-fuse/s3fs-fuseからダウンロード可能です。
現時点で最新版であるバージョン1.78を使用しました。

■1. 依存パッケージ導入(その1)
READMEを見るとs3fs導入にはいくつかのパッケージ必要であることがわかります。
下記のパッケージを事前に導入しておきます。
kernel-devel
libxml2-devel
curl-devel
gcc
gcc-c++
pkgconfig
openssl-devel
gnutls
nss
git

■2. 依存パッケージの導入(その2)
バージョン2.8.4以降のFUSEも必要ですが、CentOS6.5の最新版は2.8.3であるため、別途最新版tarボールをダウンロードしてインストールしておきます。現時点で最新版であるバージョン2.9.3を使用しました。

# ./configure --prefix=/usr/local/fuse/2.9.3
# make
# make install

■3. s3fsの導入
早速冒頭でダウンロードしたs3fsを導入します。

# ./autogen.sh
# export PKG_CONFIG_PATH=/usr/local/fuse/2.9.3/lib/pkgconfig/
# ./configure --prefix=/usr/local/s3fs-fuse/1.78
# make
# make install

※export行はconfigure時、PKG_CONFIG_PATHが見つからないエラーとなるため実行しています。

■4. s3fs用パスワードファイルの設定
導入後manページもインストールされます。
manページを見るとマウント方法、コマンドオプションや認証に関する設定について記載されています。

認証にはLinuxOSが持っているパスワードファイルとは別にs3fs用のパスワードファイルが必要で、1つもしくは複数のアクセスキー(及びシークレットキー)を使用する場合のパスワードファイル記述例が記載されています。

前回作成したIAMユーザのアクセスキーとシークレットキーを使って、パスワードファイルを作成します。 ホームディレクトリもしくは/etc配下に作成可能ですが、今回は/etc配下に作成しました。

# echo "accessKeyId:secretAccessKey" > /etc/passwd-s3fs

※"accessKeyIdとsecretAccessKey" は前回メモしたものを入れます。  

manに従ってパーミッションを変更します。

# chmod 0640 /etc/passwd-s3fs

■5. S3バケットをマウントする
今回はシステムログのローテート先をS3にするので、下記のようにマウントポイントを作成しマウントします。

# mkdir /var/log/archive/

  s3fsマウントコマンドを発行するにあたり、fuseを使用するための共有ライブラリを登録しておきます。

# ldconfig -p | grep fuse
# echo '/usr/local/fuse/2.9.3/lib' > /etc/ld.so.conf.d/fuse.conf
# ldconfig
# ldconfig -p | grep fuse
    libulockmgr.so.1 (libc6,x86-64) => /usr/local/fuse/2.9.3/lib/libulockmgr.so.1
    libulockmgr.so (libc6,x86-64) => /usr/local/fuse/2.9.3/lib/libulockmgr.so
    libfuse.so.2 (libc6,x86-64) => /usr/local/fuse/2.9.3/lib/libfuse.so.2
    libfuse.so (libc6,x86-64) => /usr/local/fuse/2.9.3/lib/libfuse.so
#

  そしてマウント。

# /usr/local/s3fs-fuse/1.78/bin/s3fs XXXXXXXX /var/log/archive

※"XXXXXXXX" はバケット名。  

マウント確認

# mount
/dev/xvde on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
s3fs on /var/log/archive type fuse.s3fs (rw,nosuid,nodev)
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvde ext4 7.8G 1.1G 6.4G 14% /
tmpfs tmpfs 296M 0 296M 0% /dev/shm
s3fs fuse.s3fs 256T 0 256T 0% /var/log/archive

 

■6. fstabの設定 /bin直下でs3fsコマンドが使えるようにシンボリックリンクを貼っておきます。

# ln -s /usr/local/s3fs-fuse/1.78/bin/s3fs /bin/s3fs

サーバ起動時に自動マウントされるよう/etc/fstabに下記1行を追記設定していきます。

# vi /etc/fstab s3fs#XXXXXXXX /var/log/archive fuse _netdev,allow_other 0 0

netdevを指定することでネットワークが開始されるまでマウントを待ってくれます。
初め
netdevを指定しないでサーバ再起動後したところ下記エラーでマウントできませんでした。READMEに書いてあるのを見逃していました。

_netdev無しの/var/log/boot.log
ounting filesystems: s3fs: unable to access MOUNTPOINT /var/log/archive: Transport endpoint is not connected [FAILED]

_netdev有りの/var/log/boot.log
Checking network-attached filesystems [ OK ]

 

次回は/etc/logrotate.d/syslogを対象とし、マウントしたS3ディレクトリにローテートする設定について書いてみたいと思います。