IDCFクラウドのオブジェクトストレージを利用しバックアップ

シェアする

コンテンツや設定ファイル・DBのバックアップをしようと思ったのですが、その為に他のVPSを借りるとか低コスト運用を目標にしているため、割が合わないと思い低コストのオブジェクトストレージを利用する事としました。

比較したのは

  • Amazon S3
  • IDCFオブジェクトストレージ
  • さくらインターネット オブジェクトストレージ

結果、IDCFオブジェクトストレージを利用することとしました。

選定理由

AmazonS3(東京) IDCF  さくらインターネット
Storage(月当たり) $0.025/GB
(約2.6円)
50GB以下:無料
以降、7.8円/GB
100GB以下: 540円
以降、54円/10GB
Upload Traffic 無料 無料 無料
Download Traffic $0.140/GB
(約15円)
10円/GB 月間10GiBを超える
10GiB毎に108円
コマンド課金 あり なし なし
その他 DLが同一リージョンの
EC2場合、無料
DL先がIDCF
サーバなら無料
DL先がさくらの
サーバなら無料

と、簡単ですが、まとめてみました。
私は、さくらインターネットを利用しているのでDL先が必然的に、さくらインターネットなので、さくらインターネットがよかったのですが、、、

新規お申し込み停止のお知らせ
現在お客様に安定的にサービスを提供するため、新規のお申し込みを一時停止させて頂いております。すでに契約済みのお客様につきましては継続してご利用いただけます。お客様にはご不便、ご迷惑をお掛けいたしますが、何卒ご理解賜りますようお願い申し上げます。

!?!? 現在停止してますやん(2018年4月現在)

ま、結果として現在のバックアップするデータは、50GB未満なのでIDCFにしておきました。
DL費用がかかるけど、有事の際しか使わないしね。で、IDCFのオブジェクトストレージのバックボーンって、ScarityRing だっけ?データは三重ミラーなので、安心でしょう。

S3コマンド準備

オブジェクトストレージを利用するにあたり、Amazon S3 API互換 とあるが、単純にs3cmdを利用が考えられますが、以下記事からawscliを利用したほうが速度が速いとあったので、素直にawscliを利用とします。

https://qiita.com/motty/items/d0ff4a947e1436a105bb

awscliを利用するまでに、いくつかのパッケージが必要です。Googleとかで検索しインストールしてください。詳細は私が記載するより的確だと思います。

実際にインストールした流れは、以下の通りです。

yum install -y python-setuptools
easy_install pip
pip install --upgrade pip
pip install awscli
aws configure
aws configure set default.s3.signature_version s3

「# aws configure set default.s3.signature_version s3」は、実際 s3 コマンド発行時に、以下エラーが出ました。

An error occurred (InvalidRequest) when calling the ListBuckets operation: The authorization mechanism you have provided (AWS4-HMAC-SHA256) is not supported.

調査すると、認証には、v2とv4があり最新のawsの認証はデフォルトでv4になっている。IDCFオブジェクトストレージの認証はv2のため、v4認証でアクセスするとエラーとなる。とのことだったので、上記コマンドを発行しています。

S3 コマンド説明

S3コマンドで、バックアップを実行していますが、実際は以下コマンドを私は利用しています。

/bin/aws --endpoint-url https://ds.jp-east.idcfcloud.com --recursive s3 cp {対象ファイル} s3://{バケット名}/{日付}/{用途フォルダ} --exclude "*.log" --exclude "*.gz"

オプションの指定は、以下の通りです。

–endpoint-url  awscliのため、デフォルトでAWSへ接続されます。
このオプションで、APIキー設定時に
表示されるエンドポイントの値をセットします。
IDCFだと、https://ds.jp-east.idcfcloud.com ですね。
–recursive  再帰的にだと思います。でした。(2018/9/17)
s3 の sync オプションの場合だと、–recursive は知らない
オプションとしてエラーとなります。
 s3  s3コマンド発行です。
 cp  copyコマンド
 –exclude  除外ファイル。複数記載は、–exclude を何度も記載

S3コマンドを使ってバックアップ

実際にS3コマンドを使ってバックアップしてみました。事前にバックアップ先のフォルダとか事前作成が必要かと思っていたのですが、S3コマンドでは不要でした。

# aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 cp /etc/hosts s3://{Bucket}/20180427/test/
upload: ./hosts to s3://{Bucket}/20180427/test/hosts

Uploadできたか、確認

# aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 ls s3://{Bucket}/20180427/test/ | grep hosts
2018-04-27 09:37:18        181 hosts

保存されていますね。
では、フォルダ単位でバックアップを。

# aws --endpoint-url https://ds.jp-east.idcfcloud.com --recursive s3 cp /var/log/httpd s3://{Bucket}/20180427/test/
upload: ../var/log/httpd/access_log-20180410.gz to s3://{Bucket}/20180427/test/access_log-20180410.gz
upload: ../var/log/httpd/access_log-20180404.gz to s3://{Bucket}/20180427/test/access_log-20180404.gz
upload: ../var/log/httpd/access_log-20180330.gz to s3://{Bucket}/20180427/test/access_log-20180330.gz
upload: ../var/log/httpd/access_log-20180409.gz to s3://{Bucket}/20180427/test/access_log-20180409.gz
upload: ../var/log/httpd/access_log-20180405.gz to s3://{Bucket}/20180427/test/access_log-20180405.gz
upload: ../var/log/httpd/access_log-20180329.gz to s3://{Bucket}/20180427/test/access_log-20180329.gz
upload: ../var/log/httpd/access_log-20180407.gz to s3://{Bucket}/20180427/test/access_log-20180407.gz
 :
 (中略)
 :
upload: ../var/log/httpd/ssl_request_log-20180422.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180422.gz
upload: ../var/log/httpd/ssl_request_log-20180423.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180423.gz
upload: ../var/log/httpd/ssl_request_log-20180424.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180424.gz
upload: ../var/log/httpd/ssl_request_log-20180426.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180426.gz
upload: ../var/log/httpd/modsec_audit.log-20180311.gz to s3://{Bucket}/20180427/test/modsec_audit.log-20180311.gz
upload: ../var/log/httpd/ssl_request_log-20180425.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180425.gz
upload: ../var/log/httpd/ssl_request_log-20180401.gz to s3://{Bucket}/20180427/test/ssl_request_log-20180401.gz
upload: ../var/log/httpd/ssl_request_log-20180427 to s3://{Bucket}/20180427/test/ssl_request_log-20180427
upload: ../var/log/httpd/ssl_access_log-20180330.gz to s3://{Bucket}/20180427/test/ssl_access_log-20180330.gz
upload: ../var/log/httpd/ssl_error_log-20180401.gz to s3://{Bucket}/20180427/test/ssl_error_log-20180401.gz

お、うまくいきました。
続いて、sync で差分同期と。

# aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 sync /var/log/httpd s3://{Bucket}/20180427/test/
upload: ../var/log/httpd/access_log to s3://{Bucket}/20180427/test/access_log

こちらもうまくいきました。

S3のバックアップシェル(即興)

即興でバックアップシェルを作成してみました。
2018/9/17
スクリプトにて、「–recursive」が洩れていたことにより、毎日バックアップデータが増えて
気づいたら、課金されてしまいましたwww
下記削除スクリプトは修正しました。

#! /bin/bash

BKFILE="/var/lib/owncloud /var/named /etc /var/www"
BUCKET="backup"
DATE=`date +%Y%m%d`

for x in ${BKFILE}
do
  FOLDER=`echo ${x} | sed -e 's/\//_/g'`
  aws --endpoint-url https://ds.jp-east.idcfcloud.com --recursive s3 cp ${x} s3://${BUCKET}/${DATE}/${FOLDER} --exclude "*.log" --exclude "*.gz"
done

DELDATE=`date -d '7 days ago' +%Y%m%d`

aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 ls s3://${BUCKET}/ | grep ${DELDATE}

if [ $? -eq 0 ] && [ ${DELDATE} -gt 0 ]; then
  aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 rm s3://${BUCKET}/${DELDATE}/ --recursive
fi

s3なんで、差分なんて気にせず日々対象フォルダをフルバックアップして、7日経過したフォルダは削除する感じに作ってます。

あと、操作してて気づいたのですが空フォルダはアップされないんですね。

ファイル単位なので、何かあった際のリカバリも以外とらくちんですね。
2018/9/17
※逆にファイル数多いとレスポンス悪すぎて、場合によりかもです。。

ではでは。

トップへ戻る