Cloudflare Workers
V8アイソレートで動く、Cloudflareのエッジサーバーレス実行基盤
分野「実行基盤・ホスティング」:書いたコードを、自分のパソコンの外で動かし続ける場所。 分野の役割とつながりは分野の解説へ。
別名:Workers、CF Workers
できること
- 短時間の処理をオンデマンドで実行する :サーバーを持たずにコードを動かしたい
- 定期的に処理を実行する :毎日/毎時この処理を自動で回したい
- HTTP API を公開する :自分のデータや処理を他から呼ばせたい
- 処理をキューに入れて非同期に処理する :重い処理を後回しにして順に片付けたい
- キーと値を高速に読み書き・一時保存する :セッションやキャッシュを持ちたい
Cloudflare Workers ができないこと
- Node.js の child_process・cluster・worker_threads・sqlite などプロセス/OSレベルAPIの利用(nodejs_compat を有効にしてもスタブのみで実際には動作しない)
- インバウンドの生 TCP/UDP 接続の待ち受け(connect() は発信専用で、HTTP と WebSocket 以外のプロトコルでサーバーを公開できない)
- 128 MB を超えるメモリを要する単一処理(isolate ごとの固定上限で、有料プランに上げても引き上げられない)
- 無料プランで1リクエストあたり50件を超える外部 fetch 呼び出し(有料プランでも既定10,000件、上限1,000万件)
制約
先頭の行が、このツールで最も先に当たる制約。値はすべて出典の一次情報で確認したもの。
| 項目 | 値 | 影響 | 出典 | 検証日 |
|---|---|---|---|---|
| CPU 時間の上限 (主要制約) | 無料プラン 10ms/リクエスト。有料プラン(Workers Paid)は既定30秒、設定で最大5分(300秒)。Cron Triggers・Queue コンシューマは間隔に応じ最大15分 | 計測は壁時計時間ではなくCPU時間のため外部APIやKVへの待ち時間はカウントされないが、暗号化や画像処理など計算量の多い同期処理は無料プランでは実質使えない | developers.cloudflare.com | |
| メモリの上限 | 128 MB(isolate ごとに固定。プランを上げても変更不可) | 画像変換や大きなJSONのパースなどメモリを要する処理は、課金プランでは解決できず処理の分割や他基盤への切り出しが必要になる | developers.cloudflare.com | |
| 無料枠のリクエスト数と超過課金 | 無料10万リクエスト/日。有料は月額$5から、月1,000万リクエスト・CPU時間3,000万ミリ秒が込みで、超過は100万リクエストあたり$0.30、CPU時間100万ミリ秒あたり$0.02 | リクエスト課金自体は緩やかだが、CPU時間を多く使う処理を高頻度で回すとCPU時間の超過分がリクエスト課金より先に効いてくる | developers.cloudflare.com | |
| Cron Triggers の登録数 | 無料アカウント5個、有料アカウント250個(いずれもアカウント単位の上限) | 多数の定期ジョブを1アカウントに集約する運用では上限に当たり、複数ジョブを1つのWorker内でルーティングする設計に変える必要がある | developers.cloudflare.com | |
| Workers KV の書き込み・値サイズ制限 | 同一キーへの書き込みは1秒に1回まで。値は最大25 MiB、キーは最大512バイト。無料プランはアカウント全体で1 GBまで | カウンタやセッションのように同じキーを高頻度で更新する用途には向かない。頻繁な更新はDurable Objectsや別のインメモリストアに逃がす | developers.cloudflare.com | |
| Queues のメッセージサイズと保持期間 | 1メッセージ最大128 KB、1バッチ最大100件。保持期間は無料プラン固定24時間、有料プランは最大14日まで設定可 | 大きなペイロードはキューに直接積めず、R2やKVにデータを置いてIDだけを渡す設計にする必要がある | developers.cloudflare.com |
典型的な落とし穴
- CPU時間は壁時計時間ではなく実処理時間のため、外部APIやKVへの待ち時間は影響しない一方、JSON整形やハッシュ計算のような同期処理だけで無料プランの10msにすぐ到達する
- Node.js向けに書かれたライブラリ(ネイティブアドオンやfsに依存するもの)をnodejs_compat有効のまま持ち込むと、ビルドは通っても実行時に未実装エラーで落ちることがある
- Workers KVは同一キーへの書き込みが1秒に1回に制限されるため、アクセスカウンタのような高頻度更新の実装に使うとすぐ頭打ちになる
コスト
- 課金モデル
- 無料枠あり
- 跳ねる条件
無料プランは1日10万リクエスト・CPU時間10ms/回まで。Workers Paidは月額$5からで、含まれる分(月1,000万リクエスト・CPU時間3,000万ミリ秒)を超えると従量課金になる。KV・Queuesなど周辺サービスは別建てで加算される
- 出典
- developers.cloudflare.com 検証
代替手段と差分
| 代替 | 何が違うか |
|---|---|
| AWS Lambda | Lambdaはメモリを10 GBまで、実行時間を15分(Managed Instancesの非同期は90分)まで確保できるが、リージョン起点でエッジには乗らない。Workersはコールドスタートがほぼなく世界中のエッジで即応するが、メモリ128 MB・CPU時間は有料でも数分と小さい |
| Vercel | Vercelはフレームワーク統合とプレビューデプロイが厚く関数は最大800秒まで動くが、無料のHobbyプランは非商用限定。Workersは無料プランでも商用利用ができ1日10万リクエストまで使えるが、フロントエンドのビルド・デプロイ連携は薄い |
| Render | Renderは常駐プロセスを月額で動かすため、常時接続やバックグラウンドジョブ、大きなメモリを要する処理に向く。Workersは常駐プロセスを持てず、リクエスト単位の短時間処理に特化する |
このツールを代替として挙げているページ: Node.js 、Vercel 、AWS Lambda 、Cloudflare WAF / DDoS 保護 、Hono
選定判断
グローバルなエッジで低レイテンシに応答する軽量なAPIやWebhook処理、静的サイトに付随する薄いバックエンドでは第一候補。CPU時間の大きい計算処理、128 MBを超えるメモリが必要な処理、Node.js資産をそのまま持ち込みたい場合は避け、AWS LambdaやRenderのようなメモリ・実行時間に余裕のある基盤へ
Cloudflareのグローバルネットワーク上でV8 isolateとしてコードを実行するサーバーレス基盤で、コンテナやVMを起動しないためコールドスタートがほぼ発生しない。HTTPリクエストへの応答のほか、Cron Triggersによる定期実行、Queuesによる非同期処理、KVによるキーバリューストアを同一のWorkerから組み合わせて使える。
利用者が最初に当たるのはCPU時間の上限である。壁時計時間ではなく実際にCPUを使った時間だけが計測されるため外部APIやKVへの待ち時間は影響しないが、無料プランの10msは同期的な計算処理にはすぐ不足する。あわせてメモリが128MBに固定されている点も、Lambdaのようにプランを上げても解決できない制約として先に把握しておく必要がある。