2014/02/20

EC2上のディレクトリとS3を同期する

会社Blogに書く程のネタじゃないのでこっちで。
EC2上の特定のディレクトリをS3のバケットと自動的に同期する必要性があって、s3fsを使ってみた。

まずは必要なパッケージをごっそりインストール。
$ sudo yum install fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap
コンパイルするのに必要なのでgcc-c++をインストール。
$ sudo yum install gcc-c++
tar ballをダウンロードしてきて展開、コンパイル。
$ wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
$ tar xvzf s3fs-1.74.tar.gz
$ cd s3fs-1.74/
$ ./configure --prefix=/usr
$ make
$ sudo make install
必要な認証情報を設定。IAM Role for EC2でPowerUsersに設定していたんだけど、ACCESSKEYの設定が必要だった。
$ sudo vi /etc/passwd-s3fs
ACCESSKEY:SECRETKEY

$ sudo chmod 600 /etc/passwd-s3fs
S3バケット「BACKET」を/mnt/s3にマウントする。
$ sudo s3fs BACKET /mnt/s3 -o allow_other,default_acl=public-read
確認。
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.4G  18% /
tmpfs           298M     0  298M   0% /dev/shm
s3fs            256T     0  256T   0% /mnt/s3
試しに/mnt/s3にファイルを書き込んでみる。
$ cp /var/log/* /mnt/s3
そうするとちゃんとS3バケットにファイルが出来ている。 


試しに一つファイルを消してみる。
$ rm /mnt/s3/wtmp
そうするとちゃんとS3バケットからもファイルが消えてる。


と、ここまでやっておいて、aws-cliでsyncというコマンドが使えることを知った。去年の9月に追加されたらしい。おおっと。

なのでsyncも使ってみる。
$ sudo aws s3 sync /var/log s3://BACKET/log/ --region=ap-northeast-1 --delete
一撃です。/var/logをBACKET/logに同期する。「--delete」をオプションを付けているので、/var/logからファイルを削除してもう一度コマンドを実行するとちゃんとS3バケットからも削除される。

ということで、まずはaws-cliとかaws-sdkとか調べれば、だいたい出来るよ、という話でした。



Amazon Web Servicesクラウドデザインパターン設計ガイドAmazon Web Servicesクラウドデザインパターン設計ガイド
玉川 憲

日経BP社
売り上げランキング : 2736

Amazonで詳しく見る by AZlink