Gadget 39:R2 オブジェクトストレージ
S3 互換・送信課金なしの R2 を、バックアップやメディア保存に使い倒す
R2 オブジェクトストレージ
大きなバイナリ(バックアップ・画像・動画)を置くなら R2 です。
目的
- バックアップやメディアの保存先として R2 を導入する
- S3 互換 API での運用方法を把握する
前提条件
- Workers 基礎(35-workers-basics)
- 公式: https://developers.cloudflare.com/r2/
R2 とは
- S3 互換のオブジェクトストレージ
- ダウンロード(送信)料金が無料(一般の CDN と違い課金されない)
- ファイル・画像・バックアップの保存に向く
使い分け(再掲)
| 要件 | 選ぶもの |
|---|---|
| リレーショナル・SQL | D1(38) |
| 高速キャッシュ的 KV | KV(40) |
| 大きなバイナリ | R2 |
| 強整合の状態 | DO Storage(36) |
手順
1. バケット作成とバインド
npx wrangler r2 bucket create cfos-backup[[r2_buckets]]
binding = "BACKUP"
bucket_name = "cfos-backup"2. Worker から使う
async fetch(request, env) {
const obj = await env.BACKUP.get("backups/cfos-2026-08-10.tgz");
if (!obj) return new Response("Not found", { status: 404 });
return obj.body;
}3. S3 互換ツールからも操作(rclone)
rclone config # S3 provider → R2 を選択、Account ID / Access Key / Secret
rclone copy ./cfos-backup r2:cfos-backup/backups --checksumよくある失敗
| 症状 | 原因 | 対処 |
|---|---|---|
| rclone で認証失敗 | Account ID / キーの設定誤り | Cloudflare ダッシュボードの R2 API トークンから再設定 |
| 公開 URL が要るのに 404 | バケット未公開設定 | カスタムドメイン or 公開バケット設定を検討 |
| バックアップが増え続ける | 保持管理なし | ライフサイクル / 定期削除を設定 |
| 課金を誤解 | 送信無料を「全無料」と誤解 | 操作料金は存在。ダッシュボードで確認 |
確認
次に読む
- バックアップ運用 → 07-backup-restore
- S3 的な保存の代替 → 38-d1-database
- キャッシュ的高速な保存 → 40-kv-and-cache