AWS S3からCloudflare R2へ移行してコスト90%削減!実録・完全移行ガイド

はじめに
先月末、AWSの請求書を見てコーヒーを吹き出しそうになりました。ストレージ料金はたったの$230なのに、転送(出口)料金が$4,500!?明細を確認すると、犯人はS3のデータ転送量でした。$0.09/GBは大したことないように見えますが、50TBも転送されれば財布に大穴が空きます。
動画配信や画像ホスティングをやっている友人に聞くと、みんな同じ悩みを抱えていました。「S3は保管料は安いけど、取り出すときに税金を取られる」と。
そこで浮上するのが Cloudflare R2 です。「出口料金ゼロ」という殺し文句。同じ10TBの転送でも、R2なら保管料の$15だけ。最初は「安かろう悪かろうでは?」と疑いましたが、2週間かけてAPI互換性をテストし、実際に移行してみた結果、これは「本物」だと確信しました。
この記事では、3つのリアルなコスト試算、API互換性の真実、そして30分で完了する移行手順を包み隠さずシェアします。月500GB以上のトラフィックがあるなら、この記事を読むだけで年間数千ドルの節約になるはずです。
なぜS3からR2へ? 数字で見る衝撃
S3の「出口料金」の罠
AWSの価格設定は巧妙です。保管料($0.023/GB)で安く見せておいて、データを取り出すときの転送料($0.09/GB)で利益を上げます。
例えば、10TBの動画を保存し、月に50TBの配信トラフィックがある動画サイトの場合:
- S3保管料: 10TB × $23 = $230
- S3転送料: 50TB × $90 = $4,500
- 合計: $4,730/月
なんと請求の95%が転送料です。
R2の破壊的価格設定
Cloudflare R2の最大の特徴は、帯域幅料金(出口料金)が完全に無料であることです。
- 保管料: $0.015/GB($15/TB)。S3より約35%安いです。
- 転送料: $0。1TBでも100TBでも無料。
- 操作リクエスト:
- Class A(書き込み等): $4.50/100万回
- Class B(読み込み等): $0.36/100万回
これには無料枠もあり(10GB保管、A操作100万回、B操作1000万回)、個人ブログ程度ならタダで使えます。
リアルな節約事例
3つのシナリオで比較してみましょう。
| シナリオ | 保管量 | 月間転送量 | S3月額 | R2月額 | 年間節約額 |
|---|---|---|---|---|---|
| 個人ブログ | 50GB | 500GB | $50 | $0.75 | $591 |
| SaaSアプリ | 1TB | 10TB | $923 | $15 | $10,896 |
| 動画PF | 10TB | 50TB | $4,730 | $150 | $54,960 |
SaaSアプリなら年間150万円、動画系なら800万円近く浮きます。これはもう、エンジニアを一人雇えるレベルです。
移行すべきでないケース
公平性のために、R2が向かないケースも挙げておきます。
- AWSエコシステムへの深い依存: Athena, Glue, EMRなどでS3のデータを直接分析している場合、移行は困難です。
- 特殊なコンプライアンス: 金融・医療などで「Object Lock (WORM)」や特定の認証規格が必須の場合(R2は順次対応中ですが確認が必要)。
- 極小トラフィック: 月間転送量が100GB以下なら、手間に見合うほどの節約にはなりません。
R2のS3互換性:どこまで動く?
互換性の真実
結論から言うと、**「日常的な操作はほぼ完璧に動く」**です。
CloudflareはS3互換APIを提供しており、以下の機能は問題なく動作します:
- 基本操作:
PutObject,GetObject,DeleteObject,ListObjects - 高度な機能: マルチパートアップロード、署名付きURL(Presigned URL)、CORS
- 権限: バケットポリシー、AWS SDK互換の認証
コードの変更点は、基本的にエンドポイントと認証情報だけです。
AWS SDK for JavaScriptの例:
// Before: S3
const s3 = new AWS.S3({
region: 'us-east-1'
});
// After: R2
const r2 = new AWS.S3({
endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
accessKeyId: R2_ACCESS_KEY_ID,
secretAccessKey: R2_SECRET_ACCESS_KEY,
signatureVersion: 'v4',
});これだけで、アップロードもダウンロードも同じメソッドで動きます。
非互換・注意点
- S3 Select: SQLでCSVをクエリする機能などは未対応。
- ストレージクラス: S3のようなGlacier(低頻度アクセス)への自動ライフサイクル移行は、独自の仕組み(Infrequent Access)になります。
- イベント通知: Lambdaをトリガーするような連携は、Cloudflare Workersを使う形に書き直す必要があります。
3つの移行戦略:あなたに合うのは?
Cloudflareは公式で強力な移行ツールを提供しています。
1. Super Slurper(一括移行)
初心者・小規模向け。
Cloudflareのダッシュボードから、S3の認証情報を入力してボタンを押すだけ。全データをR2にごっそりコピーします。
- メリット: 超簡単。メタデータも保持。
- デメリット: 移行中にS3に追加されたファイルはコピーされない(一回切り)。
- 向いている人: サービス停止が可能、またはデータ量がそこまで多くない場合(10TB以下)。
2. Sippy(オンデマンド・無停止移行)
大規模・本番稼働中向け。
これが凄いです。R2バケットがS3の「キャッシュ/プロキシ」のように振る舞います。
- ユーザーがファイルAをリクエスト。
- R2にファイルAがない場合、裏でS3から取得してユーザーに返す&R2に保存。
- 次回からR2から配信。
これを繰り返すと、よく使われるデータから自然にR2に移行されていきます。
- メリット: ダウンタイムゼロ。移行作業不要。
- デメリット: 誰もアクセスしない「冷たいデータ」はS3に残る(別途コピーが必要)。
- 向いている人: サービスを止められない、データ量が巨大(50TB超)。
3. rclone(ギーク向け)
コマンドラインツールの定番 rclone を使う方法。
- メリット: 完全に制御可能。同期、チェックサム検証、帯域制限などが自由自在。
- デメリット: コマンド操作が必要。サーバーを用意してスクリプトを走らせる手間がある。
- 向いている人: 細かく制御したいエンジニア。
実践:30分で完了する移行手順(Super Slurper編)
ここでは最も一般的な「Super Slurper」を使った手順を解説します。
S3からR2への移行手順(Super Slurper)
Cloudflare公式ツールを使って、S3のデータをR2へ一括コピーするステップバイステップガイド
⏱️ Estimated time: 30 min
- 1
Step1: R2バケットの作成
Cloudflareダッシュボードの「R2」から「Create bucket」をクリック。S3と同じ名前にしておくと管理が楽です。 - 2
Step2: AWS IAMユーザーの作成
AWS IAMコンソールで、移行用のユーザーを作成します。権限は「AmazonS3ReadOnlyAccess」で十分です。Access Key IDとSecret Access Keyをメモします。 - 3
Step3: Super Slurperの設定
R2画面の「Data Migration」タブ → 「Migrate files」をクリック。「Super Slurper」を選択し、先ほどのAWS認証情報とS3バケット名を入力します。 - 4
Step4: 移行開始と確認
設定を確認して「Start Migration」をクリック。バックグラウンドでコピーが始まります。100GB程度なら30分もかかりません。完了後、ファイル数とハッシュをチェックして整合性を確認しましょう。 - 5
Step5: アプリケーションの切り替え
アプリの環境変数を更新し、エンドポイントをR2に向けます。最初は一部のトラフィックでテスト(カナリアリリース)することを推奨します。
移行後のTIPS
- AWSからの転送量無料化: 実はAWSは2024年から「他のクラウドへのデータ移行(脱出)」にかかる転送料金を無料化しました(条件あり)。大量データの移行時はAWSサポートに「GBO(Global Bytes Out)の免除」を申請すると、移行コストすらゼロになる可能性があります。
- CDNの活用: R2バケットにカスタムドメインを接続すると、自動的にCloudflare CDN経由で配信されます。これで配信速度も世界最速クラスになります。
- S3はすぐに消さない: 念の為、S3のデータは1ヶ月ほど保持し、問題がないことを確認してから削除(またはGlacier化)しましょう。
まとめ
「データの重力」という言葉がありますが、一度入れたデータを動かすのは大変だと思われがちです。しかし、R2への移行は驚くほどスムーズで、その経済的メリットは計り知れません。
月額コストを90%削減できる施策なんて、そうそうあるものではありません。まずは無料枠を使って、開発環境でR2の使い勝手を試してみてください。請求書を見たときの感動を、ぜひ味わってほしいです。
FAQ
R2に移行して本当に安くなりますか?
既存のコードをどれくらい書き直す必要がありますか?
移行中にサービスを止める必要はありますか?
4 min read · 公開日: 2025年12月1日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


コメント
GitHubアカウントでログインしてコメントできます