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-s3fsS3バケット「BACKET」を/mnt/s3にマウントする。
ACCESSKEY:SECRETKEY
$ sudo chmod 600 /etc/passwd-s3fs
$ 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も使ってみる。
ということで、まずはaws-cliとかaws-sdkとか調べれば、だいたい出来るよ、という話でした。
と、ここまでやっておいて、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クラウドデザインパターン設計ガイド 玉川 憲 日経BP社 売り上げランキング : 2736 Amazonで詳しく見る by AZlink |