仮想待合室サービス NetFUNNEL を Cloudflare で試してみた
ウィスキー、シガー、パイプをこよなく愛する大栗です。
仮想待合室サービスである NetFUNNEL を試す機会があったため、Cloudflare に組み込んでみました。
仮想待合室サービス NetFUNNEL
以下のエントリで NetFUNNEL を解説しているため詳しい説明は省きますが、大量アクセスによるサーバーのダウンを防ぎユーザー体験を低下させないためのソリューションです。ECサイトの一斉セールなどで有用です。
やってみる
CDN として Cloudflare を使用しているサイトを対象とします。コンテンツとしては Bitnami の LAMP サーバーで phpinfo() を表示しているだけです。
- 対象ドメイン:netfunnel-1.example.com
- オリジンサーバー:203.0.113.1
- 制御タイプ:基本制御
- 侵入制御モデル:固定進入型
NetFUNNEL プロジェクト作成
こちらのエントリを元に NetFUNNEL のプロジェクトを作成しておきます。
NetFUNNEL セグメント作成
対象プロジェクトの [セグメント] で、+をクリックします。

制御タイプを選択します。ここでは基本制御を選択しました。次へをクリックします。

侵入制御モデルを選択します。ここでは固定進入型を選択します。⌄をクリックします。

セグメント名とセグメントキーを入力します。⌄をクリックします。

進入状態を選択します。ここでは待機を選択します。ブロックを選択するとブロックルームの画面が表示されます。⌄をクリックします。

待合室を選択し、ライブメッセージで表示する内容を記述します。ここでは待機室はサンプルのものを選択しています。⌄をクリックします。

進入許容数を設定します。ここでは固定型で許容数を1にしています。実運用では最大収容能力の約50%で設定することが推奨されています。⌄をクリックします。

トリガールールで待合室の対象を設定します。ここではドメインで条件を設定しています。必要に応じて、待機完了後に移動するページを変更します。⌄をクリックします。

必要に応じて、待機が発生したときのメール通知の設定を行います。⌄をクリックします。

必要に応じて高度な設定を実施します。ここではデフォルトのままです。作成をクリックします。

これで基本制御セグメントの設定が完了しました。

Cloudflare Workers 作成
以下のドキュメントを参考に、Cloudflare Workers を作成していきます。前提として、wrangler コマンドでログイン済みとします。
Workers の初期設定を行います。ここでは、category はHello World example、type はWorker only、lang はJavaScript にしています。デプロイはしていません。
$ npm create cloudflare@latest netfunnel-1
作成した Workers のプロジェクトフォルダに移動して、NetFUNNEL の Cloudflare Agent をダウンロードします。
$ cd netfunnel-1
$ curl -o ./src/netfunnel-cloudflare-agent.js https://agent-lib.stclab.com/agents/cdn/cloudflare/netfunnel-cloudflare-agent-latest.js
index.js でダウンロードしたファイルをインポートして、以下のように設定します。
import handleEvent from './netfunnel-cloudflare-agent.js'
export default {
async fetch(request, env, ctx) {
return await handleEvent(request, env, ctx);
},
};
設定ファイルwrangler.jsoncは以下のように記載します。routesのpatternは対象のドメインに/*を追加したもの。zone_nameはゾーン名です。varsでCLIENT_IDに NetFUNNEL のダッシュボード右上の統合資格証明から Client ID、COOKIE_DOMAINにゾーンのドメイン、GOOD_BOTSに問題無い BOT を設定します。
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "netfunnel-1",
"main": "src/index.js",
"compatibility_date": "2025-09-27",
"observability": {
"enabled": true
},
"compatibility_flags": [
"nodejs_compat"
],
"routes": [
{
"pattern": "netfunnel-1.example.com/*",
"zone_name": "example.com"
}
],
"vars": {
"CLIENT_ID": "<<client-id>>",
"COOKIE_DOMAIN": ".example.com",
"GOOD_BOTS": "Googlebot, Bingbot, Slurp, Applebot, facebookexternalhit"
}
}
Workers をデプロイします。
$ wrangler deploy
これで Cloudflare 側の設定が完了しました。
動作確認
実際に動作確認をしてみます。負荷がない状況でアクセスすると通常のコンテンツが表示されます。

ロードテスターで負荷を再現します。

仮想ユーザー数を30、維持時間を3mに設定して実行してみます。

負荷がかかっている状態でアクセスすると待機室の画面が表示されます。なお待機室の画面のドメインはagent-lib.stclab.comです。サービスで使用するドメインに変更する場合は、NetFUNNEL サービスチームに希望ドメインを伝え、Worker 設定を変更してください。

進入許容数を 1 に設定しているため 1 秒毎に待機人数が 1 ずつ減っていきます。1 秒毎に流入が細かく制御されるのは NetFUNNEL の特徴の一つです。リアルタイムに順番が進むのが見えればユーザー体験を損ないにくいのではないかと思います。

待機が完了すると、元のページに戻りコンテンツが表示されます。

さいごに
NetFUNNEL を使用すると、グローバルでメジャーな CDN である Akamai、CloudFront、Cloudflare、Fastly では対応するエージェントがあります。そのためアプリケーションに手を加えること無く、プラットフォームのサーバーレスコンピューティング環境に設定さえすれば、手軽に仮想待機室を実装できます。
CDN を使用して無くても、クライアントやサーバーサイドへの組み込みも可能です。様々なパターンで導入できるので、他のパターンも試してみようと思います。







