Cloudflareの従量課金で高額請求が起きるパターン:2026年の6事例と、予算アラートが上限にならない理由

開発misc-dev

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ドル
D1APIがエラーを返す行書き込み100万行あたり1.00ドル、行読み取り100万行あたり0.001ドル
Queues1日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月)D14,586.64ドル全額免除
@unvalley_(4月末)Images の変換約20万円交渉中(6月)
RetainDB(5月ごろ)KV、Durable Objects、Queues3万〜3.6万ドル(報道)不明
@jpschroeder(8月)Durable Objects8,846ドル調整あり
@shmily7(9〜10月)Durable Objects10,811.41ドルほぼ全額
@babynarc(10月)Durable Objects300→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万回実行され、死にました

出典:@unvalley_ の投稿(2026-05-01)

250万回に1,000件あたり0.50ドルを掛けると約1,250ドルになり、報告された「20万円くらい」と合う。

Images の変換は、画像と変換パラメータの組み合わせごとに1件と数えられる。 画像が多いサイトでクローラーがサイズ違いのURLを片端から取りに来ると、その組み合わせの数だけ課金の件数が増える。 人間の閲覧数(PV)が少なくても、クローラーが叩けば件数は増える。 本人は Google Analytics ばかり見ていたことが仇になったと振り返っている。 Google Analytics は人間の訪問しか数えないので、ボットの急増はそこに表れない。

管理画面でオフにしても、コード側の経路が生きている

同じ件には、もう1つ見落としやすい点がある。

Image Transformは管理画面でdisabledになっていても設定しているなら従量課金される

出典:@unvalley_ の投稿(2026-05-01)

管理画面のスイッチを切っても、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 の公式情報

事例

#cloudflare#インフラ#従量課金#Durable Objects#R2#セキュリティ