コラム / 技術選定 /
Cloudflare R2 vs AWS S3 ─ 1TB/10TB/20TB の3規模で見える損益分岐点と乗り換えの罠
📖 約9分 / 公開日: 2026/05/26
「S3 はもう古い」「Cloudflare R2 に乗り換えれば毎月の請求が半分になる」── こうしたセールス文句を持って相談に来る経営者が、ここ数ヶ月で目に見えて増えています。直近4ヶ月で受けたストレージ移行の相談は7件。実際に R2 に全面移行すべきだったのは2件、S3 のまま据え置いた方が良かったのは3件、残り2件は両者を併用するハイブリッド設計が正解でした。
半分は R2 が答えで、半分は違う。この見極めを感覚論ではなく数値で書きます。為替は1ドル=152円、料金は2026年5月時点の公開価格を使います。
## ストレージ単価そのものは大差ない
S3 Standard が GB あたり 0.023 ドル/月、R2 が 0.015 ドル/月。差は約35%。1TB を載せた場合、S3 が約 23 ドル、R2 が約 15 ドル。月額換算で 1,200円ほどの差です。これだけ見て「R2 は3割安い」と乗り換えを決断するのは早計で、ストレージ単価で判断するのは本質を外しています。
本当に効くのはここから先です。
## 致命的に違うのは egress(外向き転送料金)
R2 を語るうえで本質はここに尽きます。S3 の egress は GB あたり 0.114 ドル(東京リージョン、CloudFront 経由なし)、R2 は egress 完全無料。1ヶ月に 10TB をユーザーに配信するワークロードで比較すると、S3 は egress だけで月額約 1,140 ドル(約17万円)、R2 はゼロ円。年間で約 205万円の差が出ます。
画像配信、動画配信、SaaS のファイルダウンロード、PDF レポート提供 ── egress が支配的なワークロードでは R2 が圧倒的に有利です。Cloudflare のグローバル網に直接置けるので、CDN を別途契約しなくても配信パフォーマンスが出るという副次的なメリットも乗ります。
「CloudFront を経由すれば S3 の egress 単価は下がる」という反論が必ず出ます。これは半分しか正しくない。CloudFront 経由でも東京から日本国内への配信は GB あたり 0.114 ドルから動かず、米国経由のキャッシュヒット時のみ 0.085 ドル前後まで下がるだけです。R2 の egress 無料には敵いません。CloudFront を入れるとリクエストごとに 0.012 ドル/万件の課金も乗るため、安くなるどころか高くつくケースすらあります。
## R2 の「無料」を打ち消す Class A / Class B 料金
R2 が egress 無料を謳う一方、API 呼び出し料金は意外に高い水準で設定されています。Class A(PUT、COPY、POST、LIST)が 100万リクエストあたり 4.50 ドル、Class B(GET、HEAD)が 100万リクエストあたり 0.36 ドル。S3 は Class A 5.00 ドル、Class B 0.40 ドル。R2 が割安ではあるものの、劇的に安いというほどではない。
ここでハマる典型例が、画像 CDN として 1日 1,000万 GET、月3億 GET が走るサイトです。R2 でも GET 料金だけで月額 108 ドル(約16,400円)。S3 の Class B 料金 120 ドルとほぼ同水準で、egress 無料の恩恵を打ち消すほどの差はありません。「R2 は無料だから」という雑な理由で乗り換えると、リクエスト料金で結局 S3 と変わらない請求書が来て、社内で説明に困る展開になります。事前に CloudWatch なり Cloudflare Analytics でトラフィックの GET 回数を実測してから判断すべきです。
## ストレージ階層がない、という構造的な弱点
ここが R2 の最大の弱点です。S3 には Standard、Standard-IA、One Zone-IA、Glacier Instant Retrieval、Glacier Flexible Retrieval、Glacier Deep Archive と6段階の階層があり、アクセス頻度に応じて GB 単価が 0.023 → 0.00099 ドルまで段階的に落ちます。90日以上アクセスがない長期保管なら、Glacier Deep Archive で 1TB あたり月額 1.30 ドル。これは R2 の 15 ドルから見ると 1/11 の単価です。
R2 にはこの階層が存在しません。「アクセス頻度が低い長期保管データ」の費用最適化が効かない、という構造的な制約です。動画素材、過去のバックアップ、規制対応で7年保管している会計帳簿、退職者が残した社内文書 ── こうした冷たいデータが大量にある事業者は、R2 一本に寄せると逆に高くつきます。Glacier Deep Archive に振るべきデータが TB 単位で存在するなら、S3 を残す合理性は揺るぎません。
保管期間が長く、再アクセス頻度が年に数回というアーカイブ用途を、R2 で運用するのは反対です。
## 移行コストという見落とされる罠
R2 への移行で見落とされがちなのが「移行時の egress 料金」。S3 から R2 にデータを移すとき、S3 側からの egress として料金が発生します。20TB を移すと約 2,200 ドル(約33万円)が一回限りで請求書に乗る計算。「S3 から R2 への移行時に egress 料金を Cloudflare が肩代わりする Super Slurper」という仕組みが用意されており、これは積極的に使うべきです。条件を読まずに rclone で手動移行を始め、後から AWS の請求書を見て青ざめる事例を、過去半年で2件見ました。両件とも30万円超の想定外請求でした。
API 互換性についても誤解が多い。S3 と R2 の API はほぼ互換ですが、完全ではありません。Multipart Upload の挙動、Versioning、Lifecycle Policy、Bucket Notification の挙動は微妙に異なります。aws-sdk-js から S3 と R2 の両方を扱うコードを書く場合、endpoint URL の切り替えと署名バージョン v4 の region 指定(R2 は `auto` 推奨)を正しく分岐させないと、プリサインド URL が動かない、というハマりが起きます。同じコードベースで両方を扱う場合、SDK のラッパー層を1枚被せるのが現実的です。
## いつ R2、いつ S3、いつ両方
判断基準を一段抽象化すると、こうなります。Egress が月 5TB を超えるワークロードは R2 に寄せる。総容量のうち30%以上をコールドデータが占めるなら S3 を残す。Egress 1〜5TB、リクエスト数が中規模、コールドデータも一定量ある ── という中間ケースは、配信側を R2、長期保管とバックアップを S3、という二刀流が現実解になります。
直近で当センターが担当した EC 事業者の構成は、商品画像 8TB を R2、注文書 PDF と会計関連のアーカイブ 12TB を S3 Glacier Instant Retrieval、毎日のデータベースバックアップ 2TB を S3 Standard-IA に振り分ける形に再設計しました。R2 一本に寄せていた当初構成では月額 38万円。再設計後は月額 14万円。年間 288万円のコスト圧縮になりました。乗り換え当初は「R2 で全部いける」と社内で議論されていたものを、踏みとどまって計算し直した結果です。
## 結論を曖昧にしない
「R2 が安い」は半分正しく、半分は嘘です。Egress が支配的なら正解、コールドデータが多いなら不正解。ストレージ移行は2〜3年単位で結果が見えてくる判断なので、現時点のトラフィック構造だけでなく、3年後の事業規模、配信パターンの変化、アーカイブ義務のあるデータの増え方まで見越して設計しないと、半年後に「やはり S3 に戻したい」となります。一度移行したものを戻すのは、移行時よりも工数が大きい。
Cloudflare R2 と AWS S3 のどちらかに偏る前提を一旦疑い、自社のデータが実際にどう振る舞っているかを CloudWatch・S3 Storage Lens・Cloudflare Analytics で実測してから判断するのが最短ルートです。営業トークではなく、自社の請求書で判断する。これだけが正解への道筋です。
半分は R2 が答えで、半分は違う。この見極めを感覚論ではなく数値で書きます。為替は1ドル=152円、料金は2026年5月時点の公開価格を使います。
## ストレージ単価そのものは大差ない
S3 Standard が GB あたり 0.023 ドル/月、R2 が 0.015 ドル/月。差は約35%。1TB を載せた場合、S3 が約 23 ドル、R2 が約 15 ドル。月額換算で 1,200円ほどの差です。これだけ見て「R2 は3割安い」と乗り換えを決断するのは早計で、ストレージ単価で判断するのは本質を外しています。
本当に効くのはここから先です。
## 致命的に違うのは egress(外向き転送料金)
R2 を語るうえで本質はここに尽きます。S3 の egress は GB あたり 0.114 ドル(東京リージョン、CloudFront 経由なし)、R2 は egress 完全無料。1ヶ月に 10TB をユーザーに配信するワークロードで比較すると、S3 は egress だけで月額約 1,140 ドル(約17万円)、R2 はゼロ円。年間で約 205万円の差が出ます。
画像配信、動画配信、SaaS のファイルダウンロード、PDF レポート提供 ── egress が支配的なワークロードでは R2 が圧倒的に有利です。Cloudflare のグローバル網に直接置けるので、CDN を別途契約しなくても配信パフォーマンスが出るという副次的なメリットも乗ります。
「CloudFront を経由すれば S3 の egress 単価は下がる」という反論が必ず出ます。これは半分しか正しくない。CloudFront 経由でも東京から日本国内への配信は GB あたり 0.114 ドルから動かず、米国経由のキャッシュヒット時のみ 0.085 ドル前後まで下がるだけです。R2 の egress 無料には敵いません。CloudFront を入れるとリクエストごとに 0.012 ドル/万件の課金も乗るため、安くなるどころか高くつくケースすらあります。
## R2 の「無料」を打ち消す Class A / Class B 料金
R2 が egress 無料を謳う一方、API 呼び出し料金は意外に高い水準で設定されています。Class A(PUT、COPY、POST、LIST)が 100万リクエストあたり 4.50 ドル、Class B(GET、HEAD)が 100万リクエストあたり 0.36 ドル。S3 は Class A 5.00 ドル、Class B 0.40 ドル。R2 が割安ではあるものの、劇的に安いというほどではない。
ここでハマる典型例が、画像 CDN として 1日 1,000万 GET、月3億 GET が走るサイトです。R2 でも GET 料金だけで月額 108 ドル(約16,400円)。S3 の Class B 料金 120 ドルとほぼ同水準で、egress 無料の恩恵を打ち消すほどの差はありません。「R2 は無料だから」という雑な理由で乗り換えると、リクエスト料金で結局 S3 と変わらない請求書が来て、社内で説明に困る展開になります。事前に CloudWatch なり Cloudflare Analytics でトラフィックの GET 回数を実測してから判断すべきです。
## ストレージ階層がない、という構造的な弱点
ここが R2 の最大の弱点です。S3 には Standard、Standard-IA、One Zone-IA、Glacier Instant Retrieval、Glacier Flexible Retrieval、Glacier Deep Archive と6段階の階層があり、アクセス頻度に応じて GB 単価が 0.023 → 0.00099 ドルまで段階的に落ちます。90日以上アクセスがない長期保管なら、Glacier Deep Archive で 1TB あたり月額 1.30 ドル。これは R2 の 15 ドルから見ると 1/11 の単価です。
R2 にはこの階層が存在しません。「アクセス頻度が低い長期保管データ」の費用最適化が効かない、という構造的な制約です。動画素材、過去のバックアップ、規制対応で7年保管している会計帳簿、退職者が残した社内文書 ── こうした冷たいデータが大量にある事業者は、R2 一本に寄せると逆に高くつきます。Glacier Deep Archive に振るべきデータが TB 単位で存在するなら、S3 を残す合理性は揺るぎません。
保管期間が長く、再アクセス頻度が年に数回というアーカイブ用途を、R2 で運用するのは反対です。
## 移行コストという見落とされる罠
R2 への移行で見落とされがちなのが「移行時の egress 料金」。S3 から R2 にデータを移すとき、S3 側からの egress として料金が発生します。20TB を移すと約 2,200 ドル(約33万円)が一回限りで請求書に乗る計算。「S3 から R2 への移行時に egress 料金を Cloudflare が肩代わりする Super Slurper」という仕組みが用意されており、これは積極的に使うべきです。条件を読まずに rclone で手動移行を始め、後から AWS の請求書を見て青ざめる事例を、過去半年で2件見ました。両件とも30万円超の想定外請求でした。
API 互換性についても誤解が多い。S3 と R2 の API はほぼ互換ですが、完全ではありません。Multipart Upload の挙動、Versioning、Lifecycle Policy、Bucket Notification の挙動は微妙に異なります。aws-sdk-js から S3 と R2 の両方を扱うコードを書く場合、endpoint URL の切り替えと署名バージョン v4 の region 指定(R2 は `auto` 推奨)を正しく分岐させないと、プリサインド URL が動かない、というハマりが起きます。同じコードベースで両方を扱う場合、SDK のラッパー層を1枚被せるのが現実的です。
## いつ R2、いつ S3、いつ両方
判断基準を一段抽象化すると、こうなります。Egress が月 5TB を超えるワークロードは R2 に寄せる。総容量のうち30%以上をコールドデータが占めるなら S3 を残す。Egress 1〜5TB、リクエスト数が中規模、コールドデータも一定量ある ── という中間ケースは、配信側を R2、長期保管とバックアップを S3、という二刀流が現実解になります。
直近で当センターが担当した EC 事業者の構成は、商品画像 8TB を R2、注文書 PDF と会計関連のアーカイブ 12TB を S3 Glacier Instant Retrieval、毎日のデータベースバックアップ 2TB を S3 Standard-IA に振り分ける形に再設計しました。R2 一本に寄せていた当初構成では月額 38万円。再設計後は月額 14万円。年間 288万円のコスト圧縮になりました。乗り換え当初は「R2 で全部いける」と社内で議論されていたものを、踏みとどまって計算し直した結果です。
## 結論を曖昧にしない
「R2 が安い」は半分正しく、半分は嘘です。Egress が支配的なら正解、コールドデータが多いなら不正解。ストレージ移行は2〜3年単位で結果が見えてくる判断なので、現時点のトラフィック構造だけでなく、3年後の事業規模、配信パターンの変化、アーカイブ義務のあるデータの増え方まで見越して設計しないと、半年後に「やはり S3 に戻したい」となります。一度移行したものを戻すのは、移行時よりも工数が大きい。
Cloudflare R2 と AWS S3 のどちらかに偏る前提を一旦疑い、自社のデータが実際にどう振る舞っているかを CloudWatch・S3 Storage Lens・Cloudflare Analytics で実測してから判断するのが最短ルートです。営業トークではなく、自社の請求書で判断する。これだけが正解への道筋です。