以前は自宅サーバからさくらのVPSのバックアップをrsyncなどで取得していたんだけど、自宅サーバをRaspberry Piに置き換えた機会に自宅サーバの事業仕分けを行った結果、バックアップはさくらのVPSから直接Amazon S3に置くことにした。
Amazon S3を使う
AWSを使うにはAmazonのアカウントが必要になるけど、もともと商品検索API(Product Advertising API)でアカウントを持っていた。
Amazon S3では Bucket という単位でストレージを管理する。BucketはS3 Management Consoleから生成、管理できる。
Bucketを作る際のポイントとしては、
Bucket Name
は 全ユーザで一意 である必要がある- Bucketにあるファイルを独自ドメインで公開したい場合は、 Bucket Nameをホスト名を一致させる必要がある
- 例えば、static.example.com というホスト名で運用したい場合、Bucket Nameを
static.example.com
にする
- 例えば、static.example.com というホスト名で運用したい場合、Bucket Nameを
Region
を Tokyo にする
といったあたりか。今回のバックアップデータ置き場としてはHTTPで公開しないのでBucket Nameは com-example-backup
のようにドメインを逆向きにして使った。
Chefでs3cmdをセットアップ
Amazon S3へのバックアップ方法を調べると、s3syncやs3cmdといったツールを使う記事が見つかる。結局、どっちがメジャーなのかよくわからなかったんだけどDebianだと apt-get install s3cmd
で入るので s3cmd を使うことにした。というかChefのレシピ書いた。
s3cmdはまず s3cmd --configure
で ~/.s3cfg
に構成ファイルを作って使うので、その代わりとしてChefのtemplate
リソースでファイルを配置するようにした。このテンプレートは1.1.0-beta3のs3cmd --configure
でできたファイルを元にした。具体的にはキーの所を変数を参照するようにして、locationをap-northeast-1
に変更した。
[default]
access_key = <%= node[:aws][:access_key] %>
bucket_location = ap-northeast-1
cloudfront_host = cloudfront.amazonaws.com
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = s3-ap-northeast-1.amazonaws.com
host_bucket = %(bucket)s.s3-ap-northeast-1.amazonaws.com
human_readable_sizes = False
invalidate_on_cf = False
list_md5 = False
log_target_prefix =
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key = <%= node[:aws][:secret_key] %>
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = True
verbosity = WARNING
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
website_error =
website_index = index.html
package 's3cmd'
template "/home/#{node[:aws][:user]}/.s3cfg" do
source "s3cmd/s3cfg.erb"
mode 0600
owner node[:aws][:user]
group node[:aws][:user]
end
Debian(Vagrant)上で動作確認済み。
default[:aws][:user] = ''
default[:aws][:access_key] = ''
default[:aws][:secret_key] = ''
あたりを設定してください。
バックアップ
s3cmd ls
でBucket一覧が取れる。
s3cmd put
がscp
のようなものだと思う。rsync
のようなs3cmd sync
もあるようだ。
ファイルを置くには以下のようにコマンドを実行する。
s3cmd put <file> s3://<bucket-name>[/<prefix>]
とりあえず動いた。S3の料金体系は便利な計算ページがあるんだけど、それでもよくわからない。Amazon S3はそんなに高くはなさそうだけど通信量で計算されるので週一くらいの間隔でcron回してバックアップしようかと思う。
まぁさくらのVPS自体もさくらインターネット側でバックアップしてくれてると思うしね。