【脱・中間ツール】Restic + Cloudflare R2で「Rclone」を外してS3ネイティブ直結にした理由と移行手順

この記事は約6分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

Linuxサーバーのバックアップ先として「Restic」と「Cloudflare R2」を組み合わせる際、ネット上の解説記事の多くで紹介されているのが「Rcloneを中継役(プロキシ)として挟む構成」です。

Plaintext
【一般的な構成】
[Restic] ──(コマンド連携)──> [Rclone] ──(API通信)──> [Cloudflare R2]

当初はこの構成で組んでいましたが、最終的にRcloneを完全にアンインストールし、Restic単体でCloudflare R2へ直接通信させる構成(ネイティブS3直結)へ切り替えました。

なぜ余計なツールを1枚挟むのをやめたのか、その技術的理由と具体的な設定手順をまとめました。

1. なぜRcloneを挟むのをやめたのか?(3つの理由)

① Cloudflare R2は「S3互換」であり、ResticはネイティブでS3を話せる

RcloneはGoogle DriveやOneDriveなど、独自APIを持つ無数のクラウドストレージを抽象化するのには非常に便利です。
しかし、Cloudflare R2は標準でAmazon S3互換のAPIエンドポイントを提供しています。そして、Restic自身も最初から強力なS3ネイティブ通信機能(s3:プレフィックス)を内蔵しています。
つまり、「S3を喋れるクライアント」と「S3を受け付けるストレージ」の間に、わざわざ別のS3対応ツールを中継させる必然性がそもそもありませんでした。

② 依存関係・設定ファイルの二重管理の解消

Rcloneを挟む場合、以下の2箇所に設定が分散します。

  • バックアップスクリプト本体(暗号化パスワードや実行スケジュール)
  • ~/.config/rclone/rclone.conf(Cloudflare R2のトークンやアクセスキー)

設定ファイルが別ファイルとして残ると、パーミッション管理の隙が生まれたり、スクリプトの移行時に設定の引っ越し作業が発生します。Rcloneを排除すれば、スクリプト内で環境変数を渡すだけで完結します。

③ プロセス・オーバーヘッドの削減とトラブル切り分けの単純化

バックアップ実行時、Resticが裏でRcloneのサブプロセスを立ち上げて標準入出力でデータを流し込みます。
この多重構造はわずかながらCPU・メモリのオーバーヘッドを生むだけでなく、通信エラーが発生した際に「Resticのエラーなのか、Rcloneの不具合なのか、R2側の障害なのか」の切り分けを複雑にします。ツールを1つ減らすことは、システムの信頼性向上に直結します。

2. ネイティブS3接続への移行手順

設定は驚くほどシンプルです。Rclone専用の設定ファイルは不要になります。

ステップ1:Cloudflare R2の認証情報を環境変数にセット

R2のバケット管理画面から発行した「アクセスキーID」と「シークレットアクセスキー」を、シェルスクリプト内で環境変数としてエクスポートします。

Bash
# AWS互換の環境変数名を使用
export AWS_ACCESS_KEY_ID="your-r2-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-r2-secret-access-key"
export RESTIC_PASSWORD="your-restic-encryption-password"

ステップ2:S3エンドポイントを指定してリポジトリを初期化

リポジトリURLの形式を rclone:... から s3:https://... に切り替えます。

Bash
# 書式: s3:https://<CloudflareアカウントID>.r2.cloudflarestorage.com/<バケット名>
R2_REPO="s3:https://xxxxxxxxxxxxxxxxxxxxxxxx.r2.cloudflarestorage.com/server-backup"

# 初回初期化
restic -r "${R2_REPO}" init

これだけで、Resticが直接Cloudflare R2とHTTPS/S3プロトコルでハンドシェイクし、暗号化リポジトリが作成されます。

ステップ3:バックアップとスナップショットの実行

バックアップや確認コマンドも、通常のローカル指定と同じ感覚で使えます。

Bash
# バックアップ実行
restic -r "${R2_REPO}" backup /var/www/example.com

# スナップショット確認
restic -r "${R2_REPO}" snapshots

3. 不要になったRcloneの安全な完全撤去

移行が確認できたら、サーバー上に残った不要な設定とバイナリを削除してシステムをクリーンに保ちます。

Bash
# 1. 残存設定ファイル(APIキー等)の削除
sudo rm -rf /root/.config/rclone ~/.config/rclone

# 2. パッケージの完全削除
sudo apt purge -y rclone
sudo apt autoremove -y

# 3. 手動配置バイナリの掃除(念のため)
sudo rm -f /usr/bin/rclone /usr/local/bin/rclone

which rclone を実行して何も返ってこなければ撤去完了です。

まとめ:シンプルな構成こそが最強のバックアップ基盤

  • S3互換ストレージ相手なら、Restic単体で完結させるのが最も堅牢
  • Rcloneを省くことで、設定の分散を防ぎ、不要なプロセスやセキュリティリスクを削減できる
  • 「動くから残す」のではなく「使っていない依存関係は即座に削る」ことが、長期運用のトラブルを減らす鉄則

コメント

タイトルとURLをコピーしました