定期的なファイルのバックアップにAmazon S3を使う [コンピュータ]
2007年12月におうちサーバのハードディスクが故障し、数ヶ月前のバックアップから復元した経験もあります。あのときの手間を考えると、毎日のバックアップは絶対必要ですね。
バックアップの要件として、以下のことを考慮してAmazon S3を選択しました。
- 信頼できる
- 自動化できる
- 簡単に利用できるツールがある
- 安価なこと
容量課金は、1GBあたり$0.15で通信料課金は1GBあたり$0.1です。
Amazon S3の準備
- Amazon S3のページにアクセスします
- 「Sign Up For This Web Service」をクリックし、後は指示に従って入力します
s3syncの準備
自動的に行うバックアップとしては、使いやすさを第一に考えs3sync.rbを選択しました。
また、この記事ではFedora OSでのs3sync.rbのインストール方法や環境設定方法を記述しています。
- ダウンロード
- 圧縮ファイルを展開
$ cd /usr/local $ tar zxvf /tmp/s3sync.tar.gz
- 環境設定ファイルを作成。アクセスキーなどは自分で取得したものを記述してください。
$ mkdir /etc/s3conf $ vi /etc/s3conf/s3config.yml aws_access_key_id: 11111111111111111111111 aws_secret_access_key: 222222222222222222222 $ chmod 600 /etc/s3conf/s3config.yml
- 動作確認
$ cd ~ $ mkdir dummy $ echo hello > dummy/hello.txt $ /usr/local/s3sync/s3sync.rb dummy/ hogehoge_bucket:dummy
定期的なバックアップ
現時点で定期的にバックアップを行っているデータは、
- MySQLデータベース
- Subversion
- /var/wwwディレクトリ以下のすべてのファイル
- /etcディレクトリ以下の更新しているファイルとオリジナルのファイル
s3sync.rbはローカルのディレクトリ単位でバックアップを行うので、バックアップ対象のファイルを一箇所のディレクトリに集めるようにしています。
ローカルディレクトリの/var/backup/dailyに毎日バックアップしたいファイルを集め、/var/backup/weeklyに毎週バックアップしたいファイルを集めています。
一例ですが、毎日のバックアップ用のスクリプトは、以下のようにしています。
#!/bin/sh # MySQLのダンプ /usr/bin/mysqldump --user root --password=hogehoge --all-databases | gzip > /var/backup/daily/all_databases.sql.gz # subversionのダンプ svnadmin dump hoge_hoge_repository | gzip > /var/backup/daily/svn_backup.gz #### # s3sync.rbを用いてバックアップ /usr/local/s3sync/s3sync.rb /var/backup/daily/ hogehoge_bucket:backup/fedora/daily/
これで、ハードディスクの故障が発生しても、安心です。
また、GUIのツールは、FireFoxのプラグインのAmazon S3 Firefox Organizer(S3Fox)を利用させてもらっています。
参考となった情報
娘の手作りガトーショコラ [お料理]
スケートの仲間は79歳 [スケート]
半年ぐらいしてから僕自身もスケートを習い始めました。娘は中学校にあがったときに吹奏楽の部活が忙しくなり、スケートはやめてしまいましたがねぇ。
でも、僕続けています。 7年目です。ちっともうまくはならないのですが、なぜだか楽しいです
そのスケート教室に79歳の方がお二人いらっしゃいます。 79歳ですよ。本当にすごいですよね。
その中のお一人は、43歳からスケートを始められたそうです。43歳から新たなことに挑戦される点でも脱帽してしまいます。その方も大変お元気で、息子さんとお孫さんの3世代でスケートを習っておられます。
僕はまだまだひよっこですが、お二人を見ていますと僕も長い間スケートを続けていけたらなぁと思います。
非同期な処理をRESTで記述するには [コンピュータ]
ポイントは、非同期処理の状態を1リソースとして考え、新たにリソースを作成すればよいということです。
処理の流れの概要は次のとおりです。
- 非同期処理を開始するため、POSTリクエストを送信
POST /message_queue HTTP/1.1 Host: example.com
- レスポンスを受信します。レスポンスコードの202も重要です。非同期処理を1リソースとし、Locationヘッダに非同期処理のリソースのURIを返却
HTTP/1.1 202 Accepted Location: http://example.com/message_queue/1234
- 非同期処理中のリソースの状態を取得するため、GETリクエストを送信
GET /message_queue/1234 HTTP/1.1
- レスポンスを受信する
HTTP/1.1 200 OK <status>completed</status>
- 非同期処理が完了すれば、リソースを破棄します。 リソースの破棄は、サーバが自発的にexpireしても、クライアントからDELETEメソッドを送信してもOKです。
RESTfulは、同期型のHTTPを使って、非同期処理やバッチ処理をうまく表現できるのがすばらしいねぇ。
少し残念だったこと [コンピュータ]
redmineというissue管理ソフトを使っているのですが、3日前ぐらいから期限が来るとメールが送信される機能を実装していました。
しかーし、googleグループのredmine-users-jaに同様の機能をほしいという要望と回答がありました。
オープンソースにcommitできるよい機会だと思ったのになぁ。
でも、せっかくだから完成させてパッチを送ろうかとも思っています。
ソフトは使ってくれる人のことを [日記]
ソフトウェアは使ってくれる人のことを思って作らないといけないね。
リリースの2週間前まで誰が使うのかに気づかなかったので、今痛い目にあっています。
まぁ、自業自得だけど、前向きに考えて、よい勉強をさせていただきました。
どうもありがとうございました。
subversionのコミット方法を間違っていたよ [コンピュータ]
subversionを使い始めて3年ぐらいになるけど、僕のコミットの方法が間違っているのに今頃気づいたよ(泣)
iさんから聞いたのですが、CruiseControlは、subversionでコミットするタイミングでビルド&テストを実行するそうです。
その話を聞いたとき、コミットするタイミングでビルドを実行するとうまくビルドができないのではと思ってしまいました。 僕自身がCVS的な方法でsubversionを使っていたための勘違いです。
subversionは、Atomicな操作は一度で行うべきだったのです。たとえば、あるひとつの変更が複数のファイルに関係する場合、必ず一回でコミットしなければならないのです。一回でコミットすることで変更に対してリビジョン番号が割り当てられ、トレーサビリティが確保されるのです。
明日から心を入れ替えよっと。
iさん、本当にありがとうございました。
身近で中野 友加里さんが練習 [スケート]
中野 友加里さんって本当にスケートが好きなんですね。
7/29(日)に新横浜プリンススケートリンクの一般営業時間中にスケートを滑りに来ていました。
ジャンプはものすごく上手だし、ドーナツスピンも近くで見ることができたし。
本当によい一日でした。
Developper Summit2007に行きました [記録]
Developper Summit2007のカンファレンスに行ってきました。
サイボウズの副社長の津幡靖久さんのお話で面白かったところを。
- 日本から世界的なソフトウェア企業を出したい。
志が高くて感銘しました。 - 「成長を測る評価軸を大切にしよう」
どのような尺度でも良いから自分自身が成長しているかどうかをいつも見つめるほうが良い。 - googleの技術力に感心するだけでなく、自分は何ができるかを
技術者たちとの会話で、「Google カレンダーっていいよね。」という話はするけれど、そこから先に技術者として何をしたくなるかを話さない。例えば、この機能は自分たちも取り込む必要があるよねと言ってほしい。確かに感心するだけではねぇ。 - 志を高く持とう
グーグルに憧れるだけでなく、自分の力で追いかけてみよう。
サイボウズの成功した要因は、
- 価格、20万円以下で決済が下りやすい価格。
- インストーラがよかった。
確かにインストーラが良くなくて使う気の起きないソフトは多いよね。 - 運用に手がかからない
誰にでも使ってほしいソフトには重要な要因だね。 - プロモーション
派手なプロモーション