Cloudflareの従量課金で高額請求が起きるパターン:2026年の6事例と、予算アラートが上限にならない理由
Cloudflareの従量課金で高額請求が起きるパターン:2026年の6事例と、予算アラートが上限にならない理由
Cloudflareで数千ドルから1万ドルを超える請求が来た、という報告を2026年に入って何度も見かけた。 自分のアカウントを点検し直したついでに、公開されている事例を集めて原因を分類した。
結論は3つある。
- 無料プランは上限に達するとエラーを返して止まり、有料プランは上限なく課金が続く。 集めた6件は、どれも有料の従量課金製品で起きていた
- 原因は2系統に分かれる。自分のコードが無限ループした場合と、クローラーが課金される入口を大量に叩いた場合である
- 予算アラートは通知を送るだけで、使用量を止めない。支出の上限(ハードキャップ)について、Cloudflareは2026年10月の時点で「試作中で、2026年第4四半期に早期提供する」と書いている
無料プランと有料プランでは、上限を超えたときの振る舞いが逆になる
無料プランで上限を超えると、Cloudflareは処理をエラーにして止める。 月5ドルの Workers Paid などの有料プランに入ると、同じ上限が「無料で使える量」に変わり、超えた分は止まらずに課金される。
| 製品 | 無料プランで上限を超えたとき | 有料プランの超過単価 |
|---|---|---|
| Workers(リクエスト) | エラー1027を返す(1日10万件) | 100万件あたり0.30ドル |
| Workers KV | 操作がエラーになる | 書き込みと削除と一覧は100万件あたり5.00ドル、読み取りは0.50ドル |
| Durable Objects | 操作がエラーになる(SQLite型のみ使える) | リクエスト100万件あたり0.15ドル、SQLiteの行書き込み100万行あたり1.00ドル |
| D1 | APIがエラーを返す | 行書き込み100万行あたり1.00ドル、行読み取り100万行あたり0.001ドル |
| Queues | 1日1万操作まで使える(超えたときの扱いは料金ページに記載がない) | 100万操作あたり0.40ドル |
| Images の変換 | 5,000件を超えるとエラー9422を返し、課金はされない | 1,000件あたり0.50ドル |
| R2 | (R2 Paid は基本料0ドルで、保存容量と操作回数だけを従量で課金する) | 読み取り(Class B)100万回あたり0.36ドル、書き込み(Class A)4.50ドル、転送量は無料 |
単価と振る舞いは、Cloudflare の料金ページと制限ページ(Workers、D1、Durable Objects、Images)から取った(2026-10-14 閲覧、リンクは末尾)。 1件あたりの単価は小さい。 しかしループが毎秒数百回の処理を回し続けると、億単位の件数が数日で積み上がる。
2026年に報告された6件
| 報告者(時期) | 製品 | 請求額 | 返金 |
|---|---|---|---|
| Little Bear Apps(1月) | D1 | 4,586.64ドル | 全額免除 |
| @unvalley_(4月末) | Images の変換 | 約20万円 | 交渉中(6月) |
| RetainDB(5月ごろ) | KV、Durable Objects、Queues | 3万〜3.6万ドル(報道) | 不明 |
| @jpschroeder(8月) | Durable Objects | 8,846ドル | 調整あり |
| @shmily7(9〜10月) | Durable Objects | 10,811.41ドル | ほぼ全額 |
| @babynarc(10月) | Durable Objects | 300→500ドル | 不明 |
原因は次の節から1件ずつ見る。 金額と経緯は、いずれも本人の投稿か、本人の投稿を引いた記事による。 請求書そのものは確かめていない。 リンクは記事末尾にまとめた。
製品別では Durable Objects が3件で最も多い。
自分のコードが無限ループした5件
6件のうち5件は、自分たちのコードが止まらなくなった事例である。 どのバグも小さく、1行の書き方で決まっている。
アラームが自分を「いま」に再予約する(Durable Objects)
@shmily7 さんの件では、Durable Objects の alarm() が次のアラームを Date.now() に予約していた。
予約した時刻はもう過ぎているので、アラームはすぐにまた発火する。
サポートの説明によると、これが毎秒およそ600回続いた。
Durable Objects の料金ページでは、アラームの発火もリクエストとして数えられ、アラームを1回予約するたびに1行の書き込みとしても数えられる。
このコードは OpenAI Codex が8月31日に書いたもので、9月23日ごろから暴走が始まった。 本人は、使っていない実験用のプロジェクトだったと書いている。 利用者もアクセスもないプロジェクトで、2週間近く課金が積み上がったことになる。
@babynarc さんの件も同じ型で、使っていないと思っていた古いオブジェクトのアラームがループしていた。 止めたあとも、請求額は300ドルから500ドルへ増えたという。
@jpschroeder さんは「スタックの奥にある Durable Objects が2つ無限ループした。Cloudflare には支出の上限を設定する方法がない。請求書が来て初めて気づいた」と書いている(原文は英語)。
書き込みが自分自身をキューへ入れ直す(KV と Queues)
AIエージェント用のメモリサービスを81人に提供していた開発者が、1か月で約3万ドルを超える請求を受けたと Reddit に投稿した。 投稿を伝えた PPC Land の記事によると、内訳は次のとおり。
- KV の書き込み 31.3億回:15,635ドル
- KV の読み取り 166.2億回:8,306ドル
- Durable Objects の行書き込み 40.1億行:3,962ドル
- KV の一覧取得 5.74億回:2,870ドル
原因は3つ重なっていた。
最も大きいのは、取り込み用の Worker が write_mode の既定値 "async" をそのまま渡していたことで、APIは書き込みのたびにその処理をキューへ入れ直していた。
ほかに、1回のメモリ書き込みで storage.put() を12回呼んでいたことと、古いAPIキーの認証が kv.list() の全件走査に回っていたことがある。
本人は後から、リクエストの大半はボットで、先に書いてあったレート制限が移行の途中で外れていたとも書き足している。
金額は、記事のタイトルで3.6万ドル、本文で3.5万ドル、内訳の合計で約3.08万ドルと揺れている。 内訳の各行に上の表の単価を掛けると、どの行も料金ページの単価と合う。 Reddit の元投稿はこちらの環境からは読めなかったので、報道経由の数字として扱う。
定期処理が同じデータを書き直す(D1)
Little Bear Apps の件は、普段は月5ドルで済んでいた D1 で起きた。 2つのバグが重なっていた。
- 埋め込みを作る定期処理が、処理済みの位置を記録しておらず、毎回同じバッチを処理し直していた(1月11日〜14日)
- GitHub のデータを集める処理の INSERT に
ON CONFLICTがなく、実行のたびに既存の行を入れ直していた(1月1日〜4日)
1月の行書き込みは合計48.3億行に達し、最も多かった1月13日には1日で約14.2億行を書いている。 無料で使える5,000万行を引いて100万行あたり1ドルを掛けると、請求額とほぼ一致する。 本人によれば、この4日間に Cloudflare からの警告は何も来なかった。
クローラーが課金される入口を叩いた1件
@unvalley_ さんの件では、自分のコードはループしていない。 外から叩かれて課金が膨らんだ。
前提、自分のサイトは画像を多く持っているが、作ったばかりでPV数はかなり少ない。OpenNextを使っていたが、R2の画像に対してnext/imageの画像最適化が無駄に有効になっていた。その期間 MetaのAI crawler が /_next/image のURLを死ぬほど叩き、Images Transform が約250万回実行され、死にました
250万回に1,000件あたり0.50ドルを掛けると約1,250ドルになり、報告された「20万円くらい」と合う。
Images の変換は、画像と変換パラメータの組み合わせごとに1件と数えられる。 画像が多いサイトでクローラーがサイズ違いのURLを片端から取りに来ると、その組み合わせの数だけ課金の件数が増える。 人間の閲覧数(PV)が少なくても、クローラーが叩けば件数は増える。 本人は Google Analytics ばかり見ていたことが仇になったと振り返っている。 Google Analytics は人間の訪問しか数えないので、ボットの急増はそこに表れない。
管理画面でオフにしても、コード側の経路が生きている
同じ件には、もう1つ見落としやすい点がある。
Image Transformは管理画面でdisabledになっていても設定しているなら従量課金される
管理画面のスイッチを切っても、OpenNext のようにコード側から変換を呼ぶ設定が残っていれば、課金は続く。 止めたつもりでも止まっていない、という状態が起こりうる。
気づくのは請求書が来てから、返金は交渉しだい
6件のうち、異常に早く気づけた例は見当たらなかった。 @jpschroeder さんは請求書で気づき、D1 の件では4日、@shmily7 さんの件では2週間近く、暴走が続いていた。
返金が出るかどうかは、事例ごとにまちまちだった。
- @shmily7 さんは、サポートに一度断られたあと、X で公表してから返金を受けた
- Little Bear Apps は、サポート窓口とコミュニティフォーラム、請求部門の責任者へのメール、Reddit の4経路を使い、18日かけて全額免除を受けた。その途中で自動のアカウント停止警告が届き、サービスの一部を止められている
- @jpschroeder さんは「自分たちの落ち度なのに調整してくれた」と書いている
- @unvalley_ さんは「返金ポリシーがAWSとかより厳しい気がするんで多分無理そう」と書き、6月の時点でもまだ交渉中だった
自分のバグで生じた請求を免除するという約束は、Cloudflare の文書のどこにも見当たらない。 返金を前提にした運用はできない。
予算アラートは上限ではない
Cloudflare には予算アラート(Budget alerts)がある。 2026年の夏からは、予算アラートを持っていない従量課金のアカウントに、10ドルのアラートが自動で作られるようになった。
ただし 予算アラートのドキュメントには、次のように書かれている。
Budget alerts are informational only. They do not pause or cap usage.
予算アラートは、しきい値を超えたときにメールを1通送るだけで、利用を止めない。 導入時の changelog によれば、アラートの判定は1日1回の計算で行われる。 しきい値を超えてからメールが届くまでに最大で1日ほどかかり、毎秒600回のループならそのあいだも課金は進む。
使いすぎたら止める上限(ハードキャップ)について、Cloudflare は2026年10月2日の ブログ記事で「試作中で、2026年第4四半期に早期提供する」と書いている。 この記事を書いた10月14日の時点では、まだ使えない。
自分のアカウントで確かめたこと
この記事のきっかけは、自分のアカウントの点検だった。
cf CLI で読み取りだけを実行し、次のことを確かめた。
- ゾーンはすべて無料プランだった
- Workers Paid は契約していなかったので、Workers と Pages Functions と D1 は無料枠のままで、上限に達すればエラーになって止まる
- 従量課金になっているのは R2 Paid だけだった
- 10ドルの予算アラートが自動で作られていて、通知先は普段読んでいるメールアドレスだった
1つだけ直した。 R2 のバケットの1つで、r2.dev の公開URLが有効になっていた。 r2.dev は CDN のキャッシュを通らないので、そこを叩かれると、その回数がそのまま R2 の読み取り操作として課金される。 同じファイルは独自ドメインからも配信していて、r2.dev のURLはどこからも参照されていなかった。 そこで r2.dev の公開を止め、r2.dev は401を、独自ドメインは200を返すことを確かめた。
とはいえ、R2 の読み取りは月1,000万回まで無料で、超えても100万回あたり0.36ドルにとどまる。 r2.dev には、Cloudflare 側でアクセス数の制限もかかっている。 今回の6件のような桁の請求にはなりにくく、開けておく理由がないので閉じた、という程度の話である。
点検するときの項目
事例から逆算すると、点検する項目は次のようになる。
- 有料プラン(Workers Paid、Images Paid、R2 Paid など)に何が入っているかを把握する。無料プランのままで足りるなら、上限で止まる無料プランのほうが安全
- 予算アラートの金額と通知先を確かめる。10ドルのほかに30ドルなどの2段目を置いてもよい
- Durable Objects のアラームが、過去や「いま」の時刻に再予約していないかを確かめる
- キューやアラームの処理に、自分自身を入れ直す経路がないかを確かめる
- 定期処理の INSERT に重複を防ぐ仕組み(
ON CONFLICTや処理済みの位置の記録)があるかを確かめる - 使っていない Worker や Durable Objects、定期処理を削除する。暴走した6件のうち2件は、使っていないはずのコードだった
- 画像変換のように、URLのパラメータで件数が増える入口にAIクローラーを通していないかを確かめる(Cloudflare には AI Crawl Control という機能がある)
- 機能を止めるときは、管理画面のスイッチだけでなく、コード側の設定も外す
- 量は Google Analytics ではなく、ボットを含めて数える Cloudflare の Billable Usage で見る
出典
Cloudflare の公式情報
- Budget alerts(Cloudflare Docs)
- Billable Usage と予算アラートの導入(Cloudflare changelog)
- 予算アラートの既定有効化(Cloudflare changelog)
- Updates on our pledge to make Cloudflare features accessible to everyone(Cloudflare Blog、2026-10-02)
- Workers の料金(Cloudflare Docs)
- Workers の制限(Cloudflare Docs)
- Durable Objects の料金(Cloudflare Docs)
- D1 の料金(Cloudflare Docs)
- Images の料金(Cloudflare Docs)
事例
- Little Bear Apps:D1 の請求事故と、その後に作った遮断の仕組み
- @unvalley_:Images の変換で約20万円(2026-05-01)
- @unvalley_:支払いの件はまだ交渉中(2026-06-04)
- PPC Land:キューのループで約3.6万ドルの請求(Reddit 投稿の紹介)
- @jpschroeder:Durable Objects で8,846ドル(2026-08-08)
- @jpschroeder:請求の調整を受けた(2026-08-17)
- @shmily7:Durable Objects のアラームのループで約1万ドル(2026-10-06)
- @shmily7:返金の連絡(2026-10-09)
- @shmily7 さんの件の経緯をまとめた記事
- @babynarc:古いオブジェクトのアラームのループ(2026-10-09)