バックアップ取得していますか?
さくらのオブジェクトストレージはAmazon S3互換APIを備えているので、resticのS3バックエンドがそのまま使えます。
restic を使い、保存先を さくらのクラウド オブジェクトストレージ に保存できるか検証してみました。
さくら側の準備
コントロールパネルの「オブジェクトストレージ」から、サイトの利用開始 → バケット作成 → パーミッション作成でアクセスキー発行、という流れです。
| サイト | エンドポイント | リージョン |
|---|---|---|
| 石狩第1 | s3.isk01.sakurastorage.jp |
jp-north-1 |
| 東京第1 | s3.tky01.sakurastorage.jp |
jp-east-1 |
| アーカイブプラン | s3.arc02.sakurastorage.jp |
jp-east-1 |
リポジトリの初期化
環境変数でまとめて設定します。
アクセスキーはパーミッション設定から発行したものを使います。resticは prune でオブジェクトの削除も行うので READ/WRITE を付与してください。シークレットアクセスキーは発行直後にしか表示されないので控え忘れに注意。
なお、さくらのS3互換APIには PUT Bucket が含まれていないため、バケットはコントロールパネル側で先に作っておく必要があります。
# /etc/restic/sakura.env
export RESTIC_REPOSITORY="s3:https://s3.isk01.sakurastorage.jp/your-bucket-name"
export RESTIC_PASSWORD_FILE="/etc/restic/password"
export AWS_ACCESS_KEY_ID="<アクセスキーID>"
export AWS_SECRET_ACCESS_KEY="<シークレットアクセスキー>"
export AWS_DEFAULT_REGION="jp-north-1"
以下でパスワードファイルの作成と権限設定 を行います。
このパスワードを失うと復元不能なので、別の場所にも必ず控えておきましょう。
# sudo mkdir -p /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/password > /dev/null
sudo chmod 600 /etc/restic/password /etc/restic/sakura.env
source /etc/restic/sakura.env
restic init
created restic repository 3f9c1a8b2e at s3:https://s3.isk01.sakurastorage.jp/your-bucket-name
バックアップとリストア
restic backup /var/www /etc --exclude-caches --verbose
Files: 12043 new, 0 changed, 0 unmodified
Added to the repository: 1.842 GiB (743.219 MiB stored)
snapshot 8a1f2c04 saved
2回目以降は差分だけになります。
restic backup /var/www /etc --exclude-caches --verbose
Files: 18 new, 42 changed, 11983 unmodified
Added to the repository: 24.118 MiB (9.402 MiB stored)
snapshot c73b9e51 saved
12,000ファイル・1.8GiBに対して追加保存は9MiB。この差分効率がresticの一番おいしいところです。バックアップは戻せることを確認するまで完了ではないので、リストアも試します。
restic snapshots
restic restore latest --target /tmp/restore
restic mount /mnt/restic でスナップショットをマウントできるので、「あのファイルの3日前の状態だけ見たい」というときに便利です。
世代管理と定期実行
forget でスナップショットを削除、prune で参照されなくなった実データを削除できます。--prune で一括実行できます。
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
cronやsystemd timerで回すこともできます。
#!/bin/bash
set -euo pipefail
source /etc/restic/sakura.env
restic backup /var/www /etc --exclude-caches --tag daily
# 世代管理と整合性チェックは週1回
if [ "$(date +%u)" -eq 7 ]; then
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check --read-data-subset=5%
fi
まとめ
resticのS3バックエンドで素直に動きました。押さえておくのは以下くらいです。
・バケットは先にコントロールパネルで作る(S3互換APIでは作れない)
・リージョンを明示する(未指定だと us-east-1)
・restic check --read-data-subset を定期実行して整合性は自分で担保する
・pack単位で保存するのでオブジェクト数課金に強く、アップロードは無課金。数十GiB規模なら月495円

