海外Webサービス/ツール

Cloudflare R2の料金|エグレス無料でも請求が増える操作の数え方

Cloudflare R2の料金を公式ドキュメントの記載だけで整理します。課金されるのはストレージとClass A・Class Bの操作回数の3つで、転送量は無料です。無料枠、保存クラスの選び分け、r2.devを本番で使えない理由、公表単価での試算まで。

画像や動画の置き場を決めるとき、料金表で最初に見るのは保存料のことが多いはずです。ところがクラウドのオブジェクトストレージで請求が膨らむ原因は、保存料より先に、外へ出ていく転送量(エグレス)と操作の回数のほうに現れます。Cloudflare R2は、このうち転送量を請求の対象から外しています。公式ドキュメントの料金ページは、R2から直接エグレスする場合にデータ転送の料金は発生せず無料だと書いています。

では月額は何で決まるのか。残っているのは、保存しているデータの量と、操作の回数の2つです。そして操作が2つの区分に分かれていて、同じ1回でも単価が12倍以上違います。この区分を知らないまま「転送が無料だから安い」と読むと、請求書を見てから驚くことになります。

この記事は、R2の公式ドキュメントに書かれていることだけを使って、請求の数え方を整理します。金額は公式ページの表記どおり米ドルで書き、日本円へは換算していません。確認日は2026年10月20日です。

請求の対象は3つで、転送量は入っていない

料金ページが挙げている課金対象は3つです。保存しているデータの量、Class Aの操作回数、Class Bの操作回数。この3つだけで、転送量はどこにも出てきません。

Cloudflare R2の課金対象を3つに分け、それぞれの公表単価を対応させた図。保存量はStandardが1GB-monthあたり0.015ドル、Class Aの操作は100万回あたり4.50ドル、Class Bの操作は100万回あたり0.36ドルで、エグレスと削除操作と401で拒否された操作は請求に入らない
左が課金される対象、右が公表されている単価です。下の帯は、料金ページが請求に入らないと書いているものを並べたものです。 出典:Cloudflare R2「Pricing」(確認日 2026-10-20)

保存量は GB-month で数えます。操作は回数で数えます。どちらにも無料枠があり、月10 GB-month の保存、Class Aが月100万回、Class Bが月1,000万回までが無料だと書かれています。ここに1つ条件が付いていて、料金ページは無料枠はStandardストレージにだけ適用され、Infrequent Accessストレージには適用されないと明記しています。

2つの保存クラスの単価を並べると次のとおりです。

項目 Standard Infrequent Access
ストレージ $0.015 / GB-month $0.01 / GB-month
Class A の操作 $4.50 / 100万回 $9.00 / 100万回
Class B の操作 $0.36 / 100万回 $0.90 / 100万回
データの取り出し 単価の記載なし $0.01 / GB
最低保存期間 なし 30日
無料枠 10 GB-month・Class A 100万回・Class B 1,000万回 適用されない
エグレス 無料 無料

出典:Cloudflare R2 公式ドキュメント「Pricing」(確認日 2026-10-20)

表を横に見ると、Infrequent Accessは保存が安く、操作が高いことが分かります。ストレージは $0.015 から $0.01 へ下がる一方で、Class Aは $4.50 から $9.00 へ、Class Bは $0.36 から $0.90 へ上がります。さらに取り出しに $0.01 / GB が付き、無料枠が外れます。この構造が、後半の「どちらを選ぶか」に直結します。

請求に入らないものも料金ページに書かれています。エグレスのほかに、DeleteObject・DeleteBucket・AbortMultipartUpload が無料の操作として挙げられています。また、呼び出し元に権限がなく HTTP 401 Unauthorized が返った操作については課金されない、とFAQに書かれています。消す操作に料金がかからないのは、使い終わったデータを置いたままにする理由を1つ減らします。

高いのは書き込みと一覧、安いのは読み取り

ここが請求の形を決める部分です。料金ページは、どの操作がClass Aでどの操作がClass Bかを、名前で列挙しています。

Cloudflare R2のClass AとClass Bに分類される操作名を左右に並べた図。左のClass AはPutObjectやListObjectsなど15個で100万回あたり4.50ドル、右のClass BはGetObjectやHeadObjectなど8個で100万回あたり0.36ドル
どちらの列も料金ページに列挙されている操作名です。回数が同じでも、どちらに当たるかで請求は一致しません。 出典:Cloudflare R2「Pricing」(確認日 2026-10-20)

Class Aに入っているのは、PutObject、CopyObject、ListBuckets、PutBucket、ListObjects、CreateMultipartUpload、UploadPart、UploadPartCopy、CompleteMultipartUpload、ListMultipartUploads、ListParts、PutBucketEncryption、PutBucketCors、PutBucketLifecycleConfiguration、LifecycleStorageTierTransition です。Class Bは、GetObject、HeadObject、HeadBucket、UsageSummary、GetBucketEncryption、GetBucketLocation、GetBucketCors、GetBucketLifecycleConfiguration の8つです。

名前を眺めて気づいてほしいのは3点です。1つ目は、一覧の取得がClass Aに入っていることです。ListObjects は読み取りのような語感ですが、単価は読み取り側の12倍以上です。同期や棚卸しのスクリプトは、ファイルを1つ読む前にまず一覧を取ります。処理の形によっては、配信そのものより一覧のほうが請求を押し上げます。

2つ目は、マルチパートアップロードに関わる操作がすべてClass Aだという点です。CreateMultipartUpload、UploadPart、CompleteMultipartUpload が並んでいるので、1つの大きいファイルを分割して上げると、パートの数だけClass Aが積まれます。動画のような大きいファイルを扱う場合、ファイル数で見積もると回数を読み違えます。

3つ目は、保存クラスの移動そのものがClass Aに数えられることです。LifecycleStorageTierTransition がClass Aに挙げられているため、ライフサイクル設定で大量のオブジェクトをInfrequent Accessへ移すと、移す行為に対して操作料がかかります。保存料を下げるための作業に、先に費用が立つ形です。

ネットワークラックが並ぶデータセンターの通路。オブジェクトストレージの請求は、置いた容量より出入りの回数で動く
オブジェクトストレージの請求は、置いてある容量よりも、そこへ出入りする回数の形で動きます。写真: Brett Sayles(Pexels)

公表単価で数えると、回数が少ない側が高くなることがある

単価を眺めるだけでは実感がわかないので、公表されている単価を使って月額を組み立ててみます。回数と保存量は仮定の値です。前提は図の中にすべて書いているので、自社の数字に置き換えて読んでください。

公表単価で計算した月額の例を2本の積み上げ横棒で比べた図。保存量が同じでも、読み取りが中心の構成と書き込みが中心の構成で月額が逆転する
どちらも保存量は同じで、違うのは操作の種類と回数だけです。単価は公表値、回数と保存量は仮定です。 出典:Cloudflare R2「Pricing」(確認日 2026-10-20)

Aは画像配信が中心の構成です。読み取りが無料枠の月1,000万回を超え、書き込みは無料枠の月100万回に収まります。超えた読み取りに掛かるのは $0.36 / 100万回、保存に掛かるのは $0.015 / GB-month です。

Bは書き込みが中心の構成で、保存量はAと同じにしてあります。読み取りは無料枠に収まり、代わりに書き込みが無料枠の月100万回を超えます。超えた分の単価は $4.50 / 100万回 なので、同じ1回が別の重さで数えられます。

結果は図のとおりです。操作の回数はAのほうが5倍以上多いのに、請求はBのほうが約2倍になります。保存量が同じで、回数の多い側が安くなるのは、単価の差が12倍以上あるからです。見積もりを作るときに「月間リクエスト数」をひとまとめに数えると、この差が消えます。読み取りと書き込みは分けて数えてください。

Infrequent Access が効く条件と、逆に高くつく条件

保存料だけを見れば、Infrequent Accessは $0.015 から $0.01 へ下がります。ただし条件が3つ付きます。

1つ目は最低保存期間です。料金ページは、指定された最低保存期間より前にオブジェクトを削除したり移動したりしても、その期間ぶんの料金がかかると書いています。Infrequent Accessの最低保存期間は30日です。2つ目は取り出しで、Infrequent Accessにはデータの取り出しに $0.01 / GB が付きます。3つ目は無料枠で、先に見たとおりInfrequent Accessには適用されません。

この3つを重ねると、向く用途と向かない用途が分かれます。向くのは、置いたまま読まないデータです。世代として残すバックアップ、監査のために保管するログ、撮影した原本のように、保存期間が長く取り出しが例外的なものがここに当たります。向かないのは、読み取りが続くデータと、短い期間で消すデータです。公開中の画像をInfrequent Accessへ移すと、保存で下がった分を取り出し料とClass Bの単価差が上回る可能性があります。30日より早く消す一時ファイルは、消しても最低保存期間ぶんが請求されます。

判断の順番としては、保存料の差と取り出しの単価を並べるのが分かりやすいはずです。ストレージの差は $0.015 と $0.01 の間しかないのに、取り出しには $0.01 / GB が付きます。1か月に1回でも全量を取り出す使い方なら、保存で下がった分より取り出し料のほうが大きくなります。移す前に、そのデータが月に何回読まれているかを数えてください。

配信URLの作り方で、前提が変わる

R2に置いたファイルを公開するとき、入口は2つあります。料金表には出てきませんが、請求と運用の両方に効きます。

1つは r2.dev のサブドメインです。公式ドキュメントは、r2.dev サブドメイン経由の公開アクセスはレート制限がかかっており、開発の目的だけに使うべきだと書いています。あわせて、r2.dev サブドメインへCNAMEレコードを向けることは避けるようにと書かれていて、本番で使うなら自分のドメインをCloudflareへ追加するよう案内しています。検証のときに通った配信URLを、そのまま本番へ持ち込む設計にはできません。

もう1つはカスタムドメインです。ドキュメントは、公開アクセスでアクセス管理・キャッシュ・Bot Managementの機能を使うにはカスタムドメインの設定が必要だとしています。WAFのカスタムルール、キャッシュ、アクセス制御、Bot Managementを使う場合は、バケットをカスタムドメインの背後に置く必要があるという書き方です。キャッシュ側のドキュメントは、Cloudflareのキャッシュを通してR2のオブジェクトを配信するにはバケットへ自分のドメインを結び付ける必要があり、そうすると保存したファイルへのリクエストは毎回R2へ当たるのではなくCloudflareのキャッシュを通る、と説明しています。

ここで止めておきたい推論が1つあります。キャッシュを通せば読み取りの回数が減りそうに見えますが、キャッシュに当たったリクエストがClass Bの課金対象から外れるかどうかは、参照した3ページのいずれにも記載がありませんでした。この記事では「キャッシュを入れれば操作料が下がる」とは書けません。確認できたのは、本番ではカスタムドメインが前提になり、その構成ではリクエストが毎回R2へ届くとは限らない、というところまでです。

制限は、構成を決める前に見る

限度の一覧も公式ドキュメントに出ています。あとから設計を変えにくくなる前に見ておく値です。

項目 記載されている値
1オブジェクトの最大サイズ 5 TiB
単一のアップロードで送れる大きさ 5 GiB
マルチパートアップロードの上限 4.995 TiB
マルチパートの最大パート数 10,000
オブジェクトキーの長さ 1,024バイト
オブジェクトのメタデータ 8,192バイト
1バケットのデータ量・オブジェクト数 無制限
1アカウントのバケット数 1,000,000
1バケットのカスタムドメイン数 100
同じオブジェクトへの書き込み 1秒あたり1回
バケット管理の操作 1秒あたり50回
REST APIのレート制限 5分あたり1,200リクエスト(アカウント全体)

出典:Cloudflare R2 公式ドキュメント「Limits」(確認日 2026-10-20)

効いてくるのは下の4行です。REST APIの上限はアカウント全体に対する値だと書かれているので、移行の一括処理を並列で走らせる設計では、バケットを分けても上限は分かれません。同じオブジェクトへの書き込みが1秒あたり1回という制限は、同じキーを更新し続ける使い方(カウンタや最新状態の保存)に当たります。

キーの長さが文字数ではなくバイト数で定義されている点にも注意してください。日本語を含むキーは、同じ文字数でも上限に早く近づきます。そして単一アップロードの上限が 5 GiB なので、それを超えるファイルはマルチパートになり、前の節で見たとおりClass Aの回数が増えます。

保存場所は指定できるが、保証ではない

日本の会社が検討するときに最後まで残るのが、データの置き場所です。ドキュメントには3つのことが書かれています。

既定の自動配置では、バケット作成のリクエストの発信元の位置にもとづいて、もっとも近い利用可能な地域が選ばれます。地域のヒント(Location Hints)として指定できるのは wnam、enam、weur、eeur、apac、oc です。そして管轄(jurisdiction)として指定できるのは eu、fedramp、us の3つです。

重要なのは次の1文です。ドキュメントはLocation Hintsはベストエフォートであり保証ではないと明記し、主に頻繁にアクセスされるコンテンツを利用者の近くへ置いて性能を最適化するために使うものだとしています。つまり apac を指定しても、その地域に置かれることを約束する仕組みではありません。管轄として指定できる3つにも、日本国内に限定する区分の記載はありません。データを国内に置くことが要件になっている組織では、この時点で条件を満たせません。

エグレスの扱いは、設計そのものの違い

転送量が無料だという点は、他のオブジェクトストレージと並べたときにいちばん分かりやすい差です。ただし、この記事で確認できた範囲には限りがあります。

Amazon S3の料金ページは、中国とGovCloudを除くすべてのAWSサービスとリージョンを合計して、インターネットへ転送する最初の100GB/月が無料だと書いています。その先は使用量に応じた段階制で、料金の段はインターネットへのData Transfer Outの合計使用量で決まるとされています。ただし、段ごとの1GBあたりの単価は、参照した料金ページの表示からは読み取れませんでした。地域を選び替える形式のため、この記事では単価を書いていません。

したがって「R2のほうがいくら安い」とは書けません。確認できたのは、転送量が課金の設計に入っているかどうかという違いまでです。差が効くのは、保存量に対して外へ出る量が多い使い方(画像や動画の配信、公開データの配布)です。逆に、外へほとんど出さずに溜めるだけの使い方では、この差はあまり現れません。

導入を決める前に自分で確かめる3つ

公式ドキュメントで分かることと、自社で数えないと決まらないことを分けておきます。

1つ目は、自社の読み取り回数と書き込み回数です。請求は保存量ではなくここで決まります。すでに別の置き場を使っているなら、アクセスログから GetObject に相当する回数と、アップロードに相当する回数を別々に数えてください。2つ目は、キャッシュに当たったリクエストの扱いです。参照したページに記載がないため、見積もりではキャッシュが効かない前提で数え、実際の請求で確かめるのが安全です。3つ目は、データの置き場所の要件です。管轄として指定できるのは3つで、日本の区分はありません。

海外のWebサービスを、公表されている条件だけで読み解く作業は、どのサービスでも同じ形になります。当サイトでは、月間ページビューで段が変わる料金を扱ったPlausible Analyticsの記事、無料プランの上限と実装の負担を見たCloudflare Turnstileの記事、クローラーのアクセスに値付けする仕組みを扱ったペイ・パー・クロールの記事でも、同じ読み方をしています。海外の事業とサービスの動きは海外ビジネスにまとめています。

この分野の実務を相談したい方へ

記事で扱っている内容は、当社が実務として支援している領域です。 自社で進めるか外部に任せるかの判断からご相談いただけます。

支援サービスを見る 相談する