Amazon S3にファイルのバックアップを取るコマンドラインの手法を試してみた
検証環境は
・Ubuntu 14.04LTS
・s3fs バージョン 1.78
・s3cmd バージョン 1.5.0-rc1
s3fsのインストール
s3fsはGitHubの公式ページより最新版をダウンロードする
$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git $ cd s3fs-fuse
READMEファイルのインストラクションの通りビルドし、checkinstallでdebパッケージ化してインストールする
$ ./autogen.sh $ ./configure --prefix=/usr/local --with-openssl $ make $ sudo checkinstall
s3fsでファイルシステムとしてマウントする
s3fsはmountコマンドを利用できる権限でしか利用できない。fstabで一般ユーザに読み書き権限を開放しても、うまくいかなかった
まず、認証データを保存する。/etc
に保存して全ユーザが使えるようにするのか~/
に保存して当該ユーザのみ使えるようにするのかのどちらか
アクセス・キー : シークレット・キー
という書式で格納する。また、S3のバケット毎にアクセスキーが違う場合はバケット名 : アクセス・キー : シークレット・キー
とするようだ。(公式マニュアルによる)
$ echo AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY > ~/.passwd-s3fs 又は $ sudo echo AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY > /etc/passwd-s3fs
他のユーザから見えないようにする
$ sudo chmod 640 /etc/passwd-s3fs $ chmod 600 ~/.passwd-s3fs
マウント・ポイントのディレクトリを用意する
$ sudo mkdir /mnt/s3mnt $ sudo chmod 777 /mnt/s3mnt
コマンドラインでマウントする。なお、接続がSSL経由になるようurlオプションをつけている
$ s3fs [BACKET NAME] /mnt/s3mnt -o rw,url=https://s3.amazonaws.com
fstabに記述して、ブート時にマウントさせるには
s3fs#BACKET_NAME /mnt/s3mnt fuse rw,user,_netdev,url=https://s3.amazonaws.com 0 0
なお、値段のお安い『Reduced Redundancy Storage』を使う場合は-o url=https://s3.amazonaws.com,use_rrs=1
のようにオプションを追加する。
rsyncでファイル同期
ローカル・ストレージと同じく、rsyncを使えば良い
$ rsync -avz FROM_DIR /mnt/s3mnt/backup_dir
s3cmdのインストール
もうひとつのツール s3cmd のファイル同期機能を使うため、s3cmdをインストールしてみる。s3toolの公式ページからソースコードをダウンロード。SourceForgeとGitHubの2箇所でソフトウエアが配布されているが、GitHubが日々修正されていく最新版が格納されている(アップデート作業中かも…)ようなので、GitHubからダウンロードしてみる
$ git clone https://github.com/s3tools/s3cmd.git $ cd s3cmd
ドキュメントファイル INSTALL の通りにインストール作業
$ sudo checkinstall python setup.py install
初期設定を行う
$ s3cmd --configure
〜 中略 : アクセスキー等を入力する質問が幾つかある 〜
〜 全て入力が終わると、継ぎのような一覧表示がされる 〜
New settings:
Access Key: [アクセス・キーが表示される]
Secret Key: [シークレット・キーが表示される]
Default Region: ap-northeast-1 ← 東京の設定
Encryption password:
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
ディレクトリの同期(sync)を行う
$ s3cmd sync --no-delete-removed ./data_dir/ s3://my_backet/data_dir/
rsyncの-nオプション(プレビューのみ)を意味するのは、--dry-run
になる
$ s3cmd sync --dry-run --no-delete-removed ./data_dir/ s3://my_backet/data_dir/
同期の動作確認で、(touch等で行う)ファイル日付のみの変更では、『変更があった』とみなされない。ファイルサイズが変更になって初めて転送されるようだ。
なお、値段のお安い『Reduced Redundancy Storage』を使う場合は--rr
オプションを追加する。
s3cmdでの暗号化
s3cmd sync
ではGPGによる暗号化はサポートされていない。s3cmd put
なら可能。公開鍵方式ではなく、単なるパスワードによる暗号化だが…
暗号化パスワードはs3cmd --configure
で設定するか、直接設定ファイルの~/.s3cfg
に書き込む
$ s3cmd put --dry-run --encrypt ./data_dir/test.txt s3://my_backet/data_dir/