Cloudflare R2とS3を比較:画像保存はどちらが安い?【2026年版】
ブログや Web サービスの画像の置き場所として、よく比べられるのが Cloudflare R2 と Amazon S3 です。どちらも同じ S3 の API で使えるオブジェクトストレージですが、料金の数え方、とくに「転送料金」の扱いがまったく違います。

この記事では、Cloudflare R2 と S3 を 保存・リクエスト・転送の料金、無料枠、CDN を前に置いた場合、機能の違い で比較します。料金は R2 の公式料金ページと、AWS が公開している東京リージョン(ap-northeast-1)の価格表から、個人ブログ・中規模メディア・大量配信の3つの規模で試算 しました。「どちらが上か」ではなく、自分の画像の量と表示回数に合う方を選ぶための比較 という位置づけです。
この記事はこんな人向けです
- ブログや Web サービスの画像を、Cloudflare R2 と Amazon S3 のどちらに置くか迷っている人
- S3 の転送料金(egress)が気になっていて、規模ごとの月額の目安を知りたい人
- S3 互換 API で R2 に乗り換えるとき、どこを書き換えればいいか知りたい人
Cloudflare R2とAmazon S3の違いとは?一言でまとめると
一言でまとめると、R2 は「インターネットへの転送が無料」な S3 互換ストレージ、S3 は 「機能と AWS 連携が最も充実した」本家のストレージ です。
画像の配信では、保存している量よりも 何回・何GB表示されたか のほうが料金を大きく左右します。S3 は東京リージョンからインターネットへ出すと1GBあたり 0.114ドル かかりますが、R2 はこの料金が 0ドル です。
| 項目 | Cloudflare R2(Standard) | Amazon S3 Standard(東京) |
|---|---|---|
| 保存 | 0.015ドル/GB-月 | 0.025ドル/GB-月(最初の50TB) |
| 書き込み(PUT など) | 4.50ドル/100万回(Class A) | 4.70ドル/100万回 |
| 読み出し(GET など) | 0.36ドル/100万回(Class B) | 0.37ドル/100万回 |
| インターネットへの転送 | 無料 | 月100GBまで無料、以降 0.114ドル/GB |
| ずっと続く無料枠 | 保存10GB・書き込み100万回・読み出し1,000万回/月 | なし(新規は最大200ドルのクレジット) |
| API | S3 互換(一部未対応あり) | S3 そのもの |
| 置き場所 | 地域のヒント(apac など)はベストエフォート | 東京などリージョンを選んで固定 |
※ 2026年11月13日時点。米ドル・税別。S3 の書き込み・読み出しは公式の「1,000回あたり」「1万回あたり」を100万回あたりに直した値です。
表のとおり、保存とリクエストの単価は大差がなく、差はほぼ転送料金だけ です。逆に言えば、画像をほとんど外に出さない「保管庫」としての使い方なら、両者の差は小さくなります。

結論:画像保存はどちらが安い?用途別の選び方
結論から書くと、画像をインターネットにそのまま配信するなら R2 が安い です。S3 を選ぶ理由があるのは、AWS の他のサービスと密につなぐ場合 や、バージョニング・Object Lock などの機能が必要な場合 です。
| こんな使い方なら | おすすめ | 理由 |
|---|---|---|
| ブログ・メディアの 画像を直接配信 | R2 | 転送が無料。表示が増えても料金が増えにくい |
| すでに AWS で Web サービスを動かしている | S3+CloudFront | 同じ AWS の中で権限・連携をまとめられる |
| 誤って消した画像を 版で戻したい | S3 | バージョニングがある。R2 は未実装 |
| アクセスが 急に増えるかもしれない | R2 か CloudFront 定額プラン | どちらも転送量で請求が跳ねにくい |
| あまり見られない古い画像 を安く残したい | R2 の IA か S3 の低頻度クラス | 保存単価が下がる。取り出しに料金がかかる |

IT Picks としては、新しく画像の置き場所を作るなら、まず R2 を候補にする のがおすすめと考えています。S3 を選ぶなら、直接配信ではなく CloudFront を前に置くことを前提 にしないと、転送料金で R2 との差が大きく開きます。
料金の仕組みを比較:保存・リクエスト・転送の3つ
どちらのサービスも、料金は 「保存」「リクエスト(操作の回数)」「転送」 の3つで決まります。画像のサイトに当てはめると、次のようになります。
- 保存:アップロードした画像の合計の大きさ。1GB を1か月置くと「1GB-月」
- リクエスト:画像をアップロードする回数(書き込み)と、表示のたびに読み出す回数(読み出し)
- 転送:訪問者のブラウザに画像を送った量。画像1枚200KBなら、5,000回表示で約1GB
R2 は操作を Class A(書き込み・一覧) と Class B(読み出し) に分けて数えます。削除(DeleteObject)は 無料 です。S3 も同じく、書き込み系の PUT・COPY・POST・LIST と、GET などの読み出し系で単価が分かれています。

R2 の料金表で注目したいのは 「Egress (data transfer to Internet)」が Free になっている行です。S3 にはこの行に当たる料金があり、東京リージョンでは 月100GB(AWS の全サービス合算)を超えた分から1GBあたり0.114ドル かかります。
| 東京リージョンからインターネットへの転送(S3) | 1GBあたり |
|---|---|
| 月100GBまで(全サービス・全リージョン合算) | 0ドル |
| 次の10TBまで | 0.114ドル |
| 次の40TB | 0.089ドル |
| 次の100TB | 0.086ドル |
| 150TB超 | 0.084ドル |
※ 2026年11月13日時点の AWS の価格表(AWS Data Transfer、ap-northeast-1)。米ドル・税別。
なお R2 の保存量は 30日間の「日ごとのピーク」の平均 で数え、利用量は請求の単位に 切り上げ られます。認証で失敗したリクエスト(401 や 403)は課金されません。
無料枠の比較:R2はずっと無料枠、S3は期限つきのクレジット
無料枠の考え方も違います。R2 は 毎月ずっと使える無料枠 があり、S3 は 新規アカウントの期限つきクレジット が中心です。
| 項目 | Cloudflare R2 | Amazon S3 |
|---|---|---|
| 無料の形 | 毎月の無料枠(期限なし) | 新規アカウントに 最大200ドルのクレジット(6か月) |
| 保存 | 10GB-月 | クレジットから差し引き |
| 書き込み | 100万回/月 | クレジットから差し引き |
| 読み出し | 1,000万回/月 | クレジットから差し引き |
| 転送 | 無料(無料枠とは別) | 月100GBまで無料(全サービス合算) |
| 注意点 | 無料枠は Standard だけ。IA には効かない | 無料プランは6か月かクレジットを使い切るとアカウントが閉じる |
※ 2026年11月13日時点。
個人ブログ程度の画像(10GB以内・月1,000万回以内の表示)なら、R2 は無料枠の中に収まります。S3 は最初の6か月はクレジットで賄えますが、その後は少額でも毎月の請求が発生します。AWS・Google Cloud・Azure などの無料枠の違いは、次の記事で詳しくまとめています。

3つのシナリオで月額を試算
ここからは、規模の違う3つのサイトを想定して 月額を試算 します。試算は公式の単価を使ったスクリプト(計算式は記事の作成記録に保存)で計算したもので、実際の請求額ではありません。
試算の前提
| 項目 | 個人ブログ | 中規模メディア | 大量配信 |
|---|---|---|---|
| 保存している画像 | 10GB | 100GB | 1TB(1,000GB) |
| 月の表示回数(画像の配信回数) | 10万回 | 500万回 | 1億回 |
| 月の転送量(1枚200KB) | 20GB | 1,000GB | 20,000GB |
| 月のアップロード回数 | 1,000回 | 1万回 | 10万回 |
- S3 は東京リージョンの S3 Standard。転送の無料分(月100GB)はすべて S3 に使える前提です
- CDN を前に置く場合は、キャッシュヒット率90%(表示の10%だけ保存先に読みに行く)としました
- CloudFront の定額プランは、表示回数と転送量が収まる いちばん安いプラン を選んでいます
- AWS の新規クレジット、一覧取得などの管理操作、税金は含めていません
試算の結果
| 置き方 | 個人ブログ | 中規模メディア | 大量配信 |
|---|---|---|---|
| R2(直接) | 0ドル | 約1.35ドル | 約47.25ドル |
| R2+Cloudflare のキャッシュ | 0ドル | 約1.35ドル | 約14.85ドル |
| S3 東京(直接) | 約0.29ドル | 約107ドル | 約2,090ドル |
| S3+CloudFront(従量課金) | 約0.26ドル | 約2.73ドル | 約2,056ドル |
| S3+CloudFront(定額プラン) | 約0.13ドル(Free) | 約16.48ドル(Pro) | 約204ドル(Business) |
※ 試算。2026年11月13日時点の公式単価から計算。米ドル・税別。

結果から読み取れるポイントは3つです。
- 個人ブログなら、どれを選んでも月1ドル未満。R2 は無料枠に収まり 0ドル になります
- 中規模メディアで S3 に直接配信すると約107ドル。そのうち約103ドルが転送料金です。R2 なら保存料金の 約1.35ドル だけで済みます
- 大量配信では差が約2,000ドルに広がります。R2 は読み出しが1億回あるので Class B に約32ドルかかりますが、キャッシュを効かせれば保存料金の約15ドルまで下がります
意外なのは、中規模メディアでは S3+CloudFront(従量課金)でも約2.73ドルと安い ことです。CloudFront には毎月 1TB・1,000万リクエストまでずっと無料 の枠があり、この規模ならそこに収まります。ただし転送が1TBを超えると、その先は1GBあたり0.114ドルがかかり始めます。
CloudFrontを前に置くとS3はどう変わる?
S3 の画像を配信するなら、CloudFront(AWS の CDN)を前に置くのが基本 です。理由は、S3 から CloudFront への転送が無料 になり、訪問者への転送は CloudFront の料金で数えられるからです。

① 従量課金:1TBまでは無料
CloudFront の従量課金には、毎月1TBの転送と1,000万リクエストが無料 になる枠があります。日本のエッジからの転送は、1TBを超えると 次の9TBが1GBあたり0.114ドル です。HTTPS のリクエストは無料枠を超えると 1万回あたり0.0120ドル かかります。
S3 側には、キャッシュに無かったときだけ GET が届くので、S3 の読み出し料金も大きく減ります。それでも、転送量が数TB〜数十TBになると、R2 との差は埋まりません。
② 定額プラン:超過料金なしの月額制
CloudFront には 超過料金がかからない定額プラン もあります。CDN・WAF・DDoS 対策・DNS などがまとまっていて、S3 Standard の保存料金に充てられるクレジット も付きます。

| プラン | 月額 | リクエスト | 転送 | 付属の S3 ストレージ |
|---|---|---|---|---|
| Free | 0ドル | 100万回 | 100GB | 5GB |
| Pro | 15ドル | 1,000万回 | 50TB | 50GB |
| Business | 200ドル | 1億2,500万回 | 50TB | 1TB |
| Premium | 1,000ドル〜 | 5億回 | 50TB | 5TB |
※ 2026年11月13日時点。米ドル。1つのディストリビューションにつき1プラン。
定額プランの許容量は 上限ではなく目安 です。超えても追加料金はかかりませんが、大きく超え続けると配信が調整されることがある(遠いエッジから配信されるなど)と明記されています。最初の急増は、許容量の 3倍までならその月は影響なし です。
注意したいのは、AWS の無料プラン(Free Tier)のアカウントでは定額プランを使えない 点です。新しく AWS を始めた人は、有料プランに切り替えてから使うことになります。
試算では、大量配信のサイトは定額プランの Business で 約204ドル と、従量課金(約2,056ドル)の10分の1になりました。AWS の中で完結させたい大きなサイトは、定額プランを先に検討する と、R2 との差をかなり縮められます。
Cloudflareのキャッシュを使うとR2はさらに安くなる
R2 にも「前に置く CDN」があります。バケットに 自分のドメイン(独自ドメイン)をつなぐ と、Cloudflare のキャッシュを通して配信されます。
キャッシュにヒットした表示では R2 の操作が発生しません。Cloudflare は帯域にも料金をかけないので、残るのは保存料金と、キャッシュに無かったときの読み出しだけです。大量配信の試算で、約47ドルが約15ドルに下がったのはこのためです。
設定で押さえておきたいポイントは次のとおりです。
| 項目 | 内容 |
|---|---|
| r2.dev の URL | レート制限があり開発用。本番の画像配信には使わない |
| 独自ドメイン | Cloudflare に追加したドメイン(同じアカウントのゾーン)が必要 |
| キャッシュの範囲 | 既定では 一部のファイル形式だけ キャッシュされる。全部をキャッシュするなら Cache Everything のルール |
| おすすめの設定 | R2 の近くの拠点に問い合わせをまとめる Smart Tiered Cache |
| WAF・アクセス制御 | 独自ドメインでだけ使える(r2.dev では使えない) |
※ 2026年11月13日時点の Cloudflare のドキュメントの内容。
もう1つ知っておきたいのが CDN の利用規約 です。Cloudflare は、Developer Platform・Images・Stream などの有料サービスを使わずに、画像などの大きなファイルを不釣り合いに多く CDN で配信することを制限できる としています。R2 は Developer Platform の製品の一つなので、画像は R2 に置いて独自ドメインで配信する 形が、規約の案内に沿った使い方です。自分のサーバーの画像を無料プランの CDN だけで大量に配信している場合は、この規約を一度読んでおくと安心です。
独自ドメインの前に置く WAF の設定は、次の記事で解説しています。

移行・使い始める手順:S3互換APIでR2に接続する方法
R2 は S3 の API に対応しているので、AWS CLI や boto3 などの S3 用のツールを、接続先を変えるだけで使えます。全体の流れは次のとおりです。

① バケットと API トークンを作る
Cloudflare のダッシュボードの R2 でバケットを作ります。日本の読者向けなら、地域のヒント(Location Hint)に apac(アジア太平洋) を選べます。ただしヒントは ベストエフォート で、置き場所を保証するものではありません。
次に、R2 の Overview から API Tokens の「Manage」 を開き、トークンを作ります。画像のアップロードだけなら、権限は Object Read & Write にして、使うバケットだけに限定 するのが安全です。作成後に表示される Secret Access Key は二度と表示されない ので、すぐに控えておきます。
② AWS CLI の設定を R2 に向ける
AWS CLI では、まず次のように認証情報を入れます。リージョンは auto にします(R2 では使われませんが、ツールが値を求めるためです)。
ターミナル(ローカルの PC)
aws configure
入力する値
AWS Access Key ID [None]: <ACCESS_KEY_ID>
AWS Secret Access Key [None]: <SECRET_ACCESS_KEY>
Default region name [None]: auto
Default output format [None]: json
コマンドには、毎回 --endpoint-url で R2 の接続先 を付けます。<ACCOUNT_ID> は Cloudflare のアカウント ID です。
ターミナル(ローカルの PC)
aws s3api list-objects-v2 --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com --bucket my-bucket
期限つきで画像を見せたいときは、署名つき URL(presigned URL)も S3 と同じ書き方で作れます。--expires-in は秒数です。
ターミナル(ローカルの PC)
aws s3 presign --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com s3://my-bucket/photo.png --expires-in 3600
③ Python(boto3)から使う
Python の boto3 では、クライアントを作るときに endpoint_url と region_name="auto" を指定します。それ以外は S3 のときと同じコードで使えます。
r2_client.py
import boto3
s3 = boto3.client(
service_name="s3",
endpoint_url="https://<ACCOUNT_ID>.r2.cloudflarestorage.com",
aws_access_key_id="<ACCESS_KEY_ID>",
aws_secret_access_key="<SECRET_ACCESS_KEY>",
region_name="auto",
)
キーをコードに書かず、環境変数 AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY に入れておけば、aws_access_key_id などの行は省けます。キーをリポジトリにコミットしない ためにも、環境変数を使う形がおすすめです。
④ S3 から移す前に見ておきたい違い
S3 互換といっても、すべての機能があるわけではありません。S3 で次の機能を使っている場合は、移す前に代わりの方法を考えておきます。
| S3 の機能 | R2 での扱い |
|---|---|
| ACL(オブジェクトごとの公開設定) | 未実装。公開は独自ドメイン・r2.dev で設定 |
| バージョニング | 未実装 |
| Object Lock | 未実装 |
| オブジェクトのタグ | 未実装 |
| 保存クラスの指定 | STANDARD と STANDARD_IA だけ |
| リージョンの指定 | auto(空や us-east-1 も auto として扱われる) |
※ 2026年11月13日時点の Cloudflare「S3 API compatibility」。
S3 の API をローカルで試してからつなぎたい人は、AWS 公式のローカルエミュレーターも役に立ちます。

料金以外の違い:機能・制限の比較
料金以外では、S3 は機能の幅、R2 はシンプルさ が特徴です。画像の配信だけなら R2 で困る場面は少ないものの、バックアップや監査の用途では S3 の機能が効いてきます。
| 項目 | Cloudflare R2 | Amazon S3 |
|---|---|---|
| 保存クラス | Standard・Infrequent Access の2つ | Standard・Intelligent-Tiering・Standard-IA・Glacier 系など8種類 |
| 低頻度クラスの条件 | IA は 最低30日分 の課金、取り出し0.01ドル/GB | クラスごとに条件が異なる |
| 自動で安いクラスへ移す | ライフサイクルで Standard → IA(逆は不可) | ライフサイクルで各クラスへ |
| バージョニング | なし | あり(既定は無効) |
| 置き場所の指定 | ヒント(apac など)、eu・us などの法域の固定 | 東京など明示的に選ぶ |
| バケット数 | 10万個まで追加料金なし | ― |
| CDN | Cloudflare(独自ドメインで) | CloudFront(従量・定額) |
※ 2026年11月13日時点。
あまり見られない古い画像を大量に持っている場合は、R2 の Infrequent Access も選択肢です。試算では、1TB を Standard に置くと月約14.85ドル、IA なら 月10ドル です。ただし IA は読み出すたびに1GBあたり0.01ドルがかかり、無料枠も効かないので、よく表示される画像には向きません。
S3 でバケットを消したあとに DNS の設定が残ると、そのドメインを他人に使われるおそれがあります。S3 から R2 に移したあとの片付けでは、次の記事の注意点も見ておくと安心です。

実際にAWSの価格表を取得してみた
AWS は、各サービスの単価を 価格表(Price List) という JSON で公開しています。アカウントがなくても取得でき、curl と jq だけで中身を読めます。2026年11月13日に、東京リージョンの S3 の価格表を取得してみました。
ターミナル(ローカルの PC)
curl -s https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonS3/current/ap-northeast-1/index.json -o s3-tokyo.json
jq -r '.terms.OnDemand[][] .priceDimensions[] | .description' s3-tokyo.json | grep -E '(first 50 TB / month of storage used|PUT, COPY, POST, or LIST requests|per 10,000 GET and all other requests)$'
価格表の公開日時は 2026年11月9日 と出て、S3 Standard の行は次の3つが表示されました。
実行結果
$0.0047 per 1,000 PUT, COPY, POST, or LIST requests
$0.025 per GB - first 50 TB / month of storage used
$0.0037 per 10,000 GET and all other requests
同じ方法でデータ転送の価格表(AWSDataTransfer)を開くと、月100GBまで0ドル、その先の最初の10TBは 1GBあたり0.114ドル という行が並んでいました。この記事の試算は、これらの単価を使っています。

料金ページの表は地域を切り替えて読む必要がありますが、価格表なら リージョンを URL で指定して、その時点の単価を直接読めます。料金の改定が気になったときに、自分で単価を確かめる方法として便利です。
よくある質問
Q. R2 なら、どれだけ表示されても転送料金はかかりませんか? A. はい。R2 から直接(S3 API・Workers・r2.dev 経由で)インターネットに出す転送は 無料 です。ただし読み出しの回数(Class B)は数えられるので、月1,000万回を超えると 100万回あたり0.36ドル がかかります。独自ドメインでキャッシュを効かせると、この回数を減らせます。
Q. S3 の画像を R2 に移すと、URL は変わりますか? A. 画像の URL が S3 や CloudFront のドメインなら変わります。R2 の独自ドメインに合わせて、記事や HTML の画像の URL を書き換える必要があります。最初から自分のドメイン(例: img.example.com)で配信しておくと、将来の移行が楽になります。
Q. 個人ブログなら S3 でも安いのでは? A. 試算では、個人ブログ規模の S3 は 月約0.29ドル と十分安いです。ただし AWS の新規クレジットが切れたあとは毎月の請求が発生し、R2 は無料枠で 0ドル に収まります。どちらを選んでも負担は小さいので、使い慣れた方で問題ありません。
Q. WordPress の画像を R2 に置けますか? A. R2 は S3 互換なので、S3 にアップロードできるプラグインやツールで、接続先を R2 に変えて使える場合があります。プラグインが「エンドポイントの指定」に対応しているかは、それぞれの説明に書かれています。
Q. 試算の金額は日本円でいくらですか? A. どちらも米ドル建てで、為替によって変わるため円では書いていません。税金も含まれていない点に注意してください。
まとめ
Cloudflare R2 と Amazon S3 の比較のポイントをまとめます。
- 料金の最大の違い:R2 はインターネットへの転送が無料、S3(東京)は月100GBを超えると1GBあたり0.114ドル
- 保存の単価:R2 0.015ドル/GB-月、S3 東京 0.025ドル/GB-月
- 無料枠:R2 は毎月 保存10GB・読み出し1,000万回、S3 は新規に 最大200ドルのクレジット(6か月)
- 試算(中規模メディア・月500万回表示):R2 約1.35ドル、S3 直接 約107ドル、S3+CloudFront 従量 約2.73ドル
- 試算(大量配信・月1億回表示):R2+キャッシュ 約14.85ドル、S3+CloudFront 定額 約204ドル、S3 直接 約2,090ドル
- S3 を選ぶ理由:AWS との連携、バージョニング・Object Lock、細かい保存クラス
- 乗り換え:AWS CLI・boto3 の 接続先を R2 に変え、リージョンを auto にするだけ
新しく画像の置き場所を作るなら、まずは R2 の無料枠で小さく始め、表示回数が増えてきたら独自ドメインとキャッシュの設定を見直すのがおすすめです。
