GCS(Google Cloud Storage)にファイルをバックアップする(最新N個のみ保持)

例えば運営しているサービスのデータベースのダンプをデータベースサーバで毎日とっているとして、 そのダンプファイルをどこか別のところにコピーしておかないと、結局サーバごと死んだときに復旧できなくなる。

適当なバックアップ用のサーバを用意して、そこにrsyncやscpしても良いのだが、 バックアップ用サーバの運用もめんどくさいので、今回はGoogleクラウドストレージであるGoogle Cloud Storage(GCS)にバックアップ設定を行う。

この際、常に新しいバックアップファイルを別の名前でアップすると課金額が増えてしまうし、 逆に毎日同じファイル名で上書き保存していくと、数日前のものに戻したいという時に対応できない。 (そもそもそんな要求があるかは知らないが)

そこで、GCSのバージョニング機能と、ライフサイクル管理の機能を使う。 まず、バージョニング機能を有効にする。この操作はGUIからは現時点では行えないため、 gsutil コマンドを利用する。 gsutil コマンドのインストールは色々なサイトで解説されているので、ここでは説明しない。 (aptで無邪気に apt install gsutil とか打つと、全然関係ないツールが落ちてくるので注意)

バージョニングを有効にする

バージョニングはBucket単位で有効/無効の設定を行う。

gsutil versioning set on gs://<bucket_name>

ちなみに現在の設定は以下で確認できる

gsutil versioning get gs://<bucket_name>

ライフサイクル管理の設定を行う

バージョニングが有効の場合、ライフサイクル管理の設定がGUIから行えないので、 こちらも gsutil コマンドを利用する。

まずはライフサイクルを定義したJSONファイルを作成する 今回は、新しい3バージョンのみを保持する設定を行った。詳細なオプションは下記のページで確認できる

Buckets  |  Cloud Storage  |  Google Cloud

$ cat gcs_lifecyscle.json
{
    "lifecycle": {
        "rule": [
            {
                "action": {"type": "Delete"},
                "condition": {
                    "numNewerVersions": 3
                }
            }
        ]
    }
}

ここまで来たら、あとはgsutilを打つだけ

$ gsutil lifecycle set gcs_lifecyscle.json gs://<bucket_name>

ライフサイクルの反映はGoogleのドキュメントによると、反映に最大で24時間かかるとのことなので、気長にまとう。

Managing Object Lifecycles  |  Cloud Storage  |  Google Cloud

ファイルのアップロード

アップロードは下記のように簡単に行える。

gsutil cp backup/hoge.sql gs://<bucket_name>/backup.sql

ファイルの確認

バージョニングされたファイルを含めて見たいときはGUIから見れないようなので下記のように -a をつけた gsutil ls コマンドで確認する

gsutil ls -a gs://<bucket_name>/db/backup.sql

さらに詳細な情報(アップロードされた日付など)が見たい場合は、オプションに -l を追加すれば良い。 (ちなみに、もっと詳細な情報は -L で確認できる)

gsutil ls -la gs://<bucket_name>/db/backup.sql