言語を切り替える
テーマを切り替える

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以上のトラフィックがあるなら、この記事を読むだけで年間数千ドルの節約になるはずです。

$10,896
年間節約額
SaaSアプリの事例
90%
コスト削減率
出口料金ゼロ効果
80-90%
API互換率
主要機能は網羅
数据来源: 実測データおよびCloudflare試算

なぜ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月額年間節約額
個人ブログ50GB500GB$50$0.75$591
SaaSアプリ1TB10TB$923$15$10,896
動画PF10TB50TB$4,730$150$54,960

SaaSアプリなら年間150万円、動画系なら800万円近く浮きます。これはもう、エンジニアを一人雇えるレベルです。

$54,960
動画サービスでの年間節約額
来源: 10TB保管・50TB転送のケース

移行すべきでないケース

公平性のために、R2が向かないケースも挙げておきます。

  1. AWSエコシステムへの深い依存: Athena, Glue, EMRなどでS3のデータを直接分析している場合、移行は困難です。
  2. 特殊なコンプライアンス: 金融・医療などで「Object Lock (WORM)」や特定の認証規格が必須の場合(R2は順次対応中ですが確認が必要)。
  3. 極小トラフィック: 月間転送量が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の「キャッシュ/プロキシ」のように振る舞います。

  1. ユーザーがファイルAをリクエスト。
  2. R2にファイルAがない場合、裏でS3から取得してユーザーに返す&R2に保存。
  3. 次回からR2から配信。
    これを繰り返すと、よく使われるデータから自然にR2に移行されていきます。
  • メリット: ダウンタイムゼロ。移行作業不要。
  • デメリット: 誰もアクセスしない「冷たいデータ」はS3に残る(別途コピーが必要)。
  • 向いている人: サービスを止められない、データ量が巨大(50TB超)。

3. rclone(ギーク向け)

コマンドラインツールの定番 rclone を使う方法。

  • メリット: 完全に制御可能。同期、チェックサム検証、帯域制限などが自由自在。
  • デメリット: コマンド操作が必要。サーバーを用意してスクリプトを走らせる手間がある。
  • 向いている人: 細かく制御したいエンジニア。

実践:30分で完了する移行手順(Super Slurper編)

ここでは最も一般的な「Super Slurper」を使った手順を解説します。

S3からR2への移行手順(Super Slurper)

Cloudflare公式ツールを使って、S3のデータをR2へ一括コピーするステップバイステップガイド

⏱️ Estimated time: 30 min

  1. 1

    Step1: R2バケットの作成

    Cloudflareダッシュボードの「R2」から「Create bucket」をクリック。S3と同じ名前にしておくと管理が楽です。
  2. 2

    Step2: AWS IAMユーザーの作成

    AWS IAMコンソールで、移行用のユーザーを作成します。権限は「AmazonS3ReadOnlyAccess」で十分です。Access Key IDとSecret Access Keyをメモします。
  3. 3

    Step3: Super Slurperの設定

    R2画面の「Data Migration」タブ → 「Migrate files」をクリック。「Super Slurper」を選択し、先ほどのAWS認証情報とS3バケット名を入力します。
  4. 4

    Step4: 移行開始と確認

    設定を確認して「Start Migration」をクリック。バックグラウンドでコピーが始まります。100GB程度なら30分もかかりません。完了後、ファイル数とハッシュをチェックして整合性を確認しましょう。
  5. 5

    Step5: アプリケーションの切り替え

    アプリの環境変数を更新し、エンドポイントをR2に向けます。最初は一部のトラフィックでテスト(カナリアリリース)することを推奨します。

移行後のTIPS

  1. AWSからの転送量無料化: 実はAWSは2024年から「他のクラウドへのデータ移行(脱出)」にかかる転送料金を無料化しました(条件あり)。大量データの移行時はAWSサポートに「GBO(Global Bytes Out)の免除」を申請すると、移行コストすらゼロになる可能性があります。
  2. CDNの活用: R2バケットにカスタムドメインを接続すると、自動的にCloudflare CDN経由で配信されます。これで配信速度も世界最速クラスになります。
  3. S3はすぐに消さない: 念の為、S3のデータは1ヶ月ほど保持し、問題がないことを確認してから削除(またはGlacier化)しましょう。

まとめ

「データの重力」という言葉がありますが、一度入れたデータを動かすのは大変だと思われがちです。しかし、R2への移行は驚くほどスムーズで、その経済的メリットは計り知れません。
月額コストを90%削減できる施策なんて、そうそうあるものではありません。まずは無料枠を使って、開発環境でR2の使い勝手を試してみてください。請求書を見たときの感動を、ぜひ味わってほしいです。

FAQ

R2に移行して本当に安くなりますか?
はい、特に転送量が多い場合は劇的に安くなります。S3の転送料金($0.09/GB)がR2では完全無料になるため、SaaSやメディア配信サービスではコストが1/10になることも珍しくありません。
既存のコードをどれくらい書き直す必要がありますか?
ほとんどの場合、書き直しは不要です。Cloudflare R2はS3互換APIを提供しているため、AWS SDKのエンドポイント設定と認証情報をR2のものに差し替えるだけで動作します。
移行中にサービスを止める必要はありますか?
いいえ、「Sippy」という移行ツールを使えば、ダウンタイムなしで移行可能です。ユーザーからのリクエストに応じて動的にデータをS3からR2へコピーしつつ配信するため、サービスを継続したまま裏側で移行が完了します。

4 min read · 公開日: 2025年12月1日 · 更新日: 2026年1月22日

コメント

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

関連記事