はじめに
IDCFクラウドのオブジェクトストレージはAWSのS3との高い互換性を謳っています。
また、IDCFクラウドでもs3cmdよりawscliを使ったほうが性能が出るそうです(例えばこの記事)
awscliでバックアップする場合cpとsyncがあります。
バックアップ用途ではsyncのほうが使い勝手が良いです。
しかし、IDCFクラウドでsyncを使ってバックアップをしたよという記事は見かけません。
やってみたらできましたので手順を書いておきます。
awscliのcpとsyncの違い
どうやるかだけ知りたい人は飛ばしてください。
cpは(ローカル|S3)から(ローカル|S3)へオブジェクトをコピーします。
一方、syncは再帰的に指定したディレクトリからS3へオブジェクトをコピーします。
syncは差分バックアップにも対応しています。
したがって、特定ディレクトリのバックアップを取りたいという場合にはsyncを使ったほうが良いです。
バックアップの実装
まずはIDCFのWeb UIからオブジェクトストレージにAPIユーザを追加します。
APIキーとSecretキーは控えておきましょう。
その後、IDCFのWeb UIからバケットを作ります。
今回はcontents-backupというバケットを作成しました。
次にサーバ側での操作です。
まずはawscliを導入します。
pipが入っていなければ入れてください。
# pip install awscli
これでawscliが入ります。
次にバックアップを実行するユーザで下記コマンドを実行し
「AWS Access Key」と「AWS Secret Access Key」の入力を促されますので
先ほど控えたAPIキーとSecretキーを入れます。
その後の質問は特に答えずEnterで問題ないです。
$ aws configure
AWS Access Key ID [None]: myAPIKey
AWS Secret Access Key [None]: mySecretKey
設定がうまくいっているか確かめるために下記コマンドを実行します。
$ aws s3 --endpoint-url https://ds.jp-east.idcfcloud.com ls
2017-04-16 17:31:15 contents-backup
作成したバケット(この例だとcontents-backup)が表示されれば正常です。
"--endpoint-url"オプションはAPIのエンドポイントを指定します。
今回はIDCFクラウドの東日本リージョンを利用しているのでこのようなURLです。
次に実際にバックアップをしてみましょう。
$ aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 sync contents/ s3://contents-backup/ --exact-timestamps --delete
"--exact-timestamps"オプションはタイムスタンプをみてアップロードするオプションです。
"--delete"オプションはバックアップ元にないファイルがバックアップ先にあれば削除するオプションです。
したがって、この例では下記の例では"contents/"というディレクトリを"contents-backup"バケットにタイムスタンプをみて更新のあったものだけバックアップして"contents/"にないファイルはcontents-backupから削除しています。
あとはこれをcron等に仕込めば自動バックアップの完成です。