仮想待合室サービス NetFUNNEL を Cloudflare で試してみた

仮想待合室サービス NetFUNNEL を Cloudflare で試してみた

仮想待合室サービスである NetFUNNEL を Cloudflare に組み込んでみました。
2026.03.24

ウィスキー、シガー、パイプをこよなく愛する大栗です。

仮想待合室サービスである NetFUNNEL を試す機会があったため、Cloudflare に組み込んでみました。

仮想待合室サービス NetFUNNEL

以下のエントリで NetFUNNEL を解説しているため詳しい説明は省きますが、大量アクセスによるサーバーのダウンを防ぎユーザー体験を低下させないためのソリューションです。ECサイトの一斉セールなどで有用です。

https://dev.classmethod.jp/articles/getting-started-with-netfunnel-via-cloudfront-integration/

やってみる

CDN として Cloudflare を使用しているサイトを対象とします。コンテンツとしては Bitnami の LAMP サーバーで phpinfo() を表示しているだけです。

  • 対象ドメイン:netfunnel-1.example.com
  • オリジンサーバー:203.0.113.1
  • 制御タイプ:基本制御
  • 侵入制御モデル:固定進入型

NetFUNNEL プロジェクト作成

こちらのエントリを元に NetFUNNEL のプロジェクトを作成しておきます。

NetFUNNEL セグメント作成

対象プロジェクトの [セグメント] で、をクリックします。

スクリーンショット 2026-03-24 15.35.34のコピー

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

スクリーンショット 2026-03-24 15.35.44のコピー

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

スクリーンショット 2026-03-24 15.36.07のコピー

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

スクリーンショット 2026-03-24 15.36.35のコピー2

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

スクリーンショット 2026-03-24 15.37.07のコピー

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

スクリーンショット 2026-03-24 15.37.51のコピー

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

スクリーンショット 2026-03-24 15.38.11のコピー

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

スクリーンショット 2026-03-24 15.40.02のコピー

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

スクリーンショット 2026-03-24 15.40.54のコピー

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

スクリーンショット 2026-03-24 15.41.53のコピー

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

スクリーンショット 2026-03-24 15.42.07

Cloudflare Workers 作成

以下のドキュメントを参考に、Cloudflare Workers を作成していきます。前提として、wrangler コマンドでログイン済みとします。

Cloudflare Agent

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 でダウンロードしたファイルをインポートして、以下のように設定します。

src/index.js
import handleEvent from './netfunnel-cloudflare-agent.js'

export default {
        async fetch(request, env, ctx) {
                return await handleEvent(request, env, ctx);
        },
};

設定ファイルwrangler.jsoncは以下のように記載します。routespatternは対象のドメインに/*を追加したもの。zone_nameはゾーン名です。varsCLIENT_IDに NetFUNNEL のダッシュボード右上の統合資格証明から Client ID、COOKIE_DOMAINにゾーンのドメイン、GOOD_BOTSに問題無い BOT を設定します。

wrangler.jsonc
{
        "$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 側の設定が完了しました。

動作確認

実際に動作確認をしてみます。負荷がない状況でアクセスすると通常のコンテンツが表示されます。

スクリーンショット 2026-03-24 17.37.29

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

スクリーンショット 2026-03-24 17.38.38のコピー

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

スクリーンショット 2026-03-24 17.39.58のコピー

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

スクリーンショット 2026-03-24 17.43.32(2)のコピー

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

スクリーンショット 2026-03-24 17.43.34(2)のコピー

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

スクリーンショット 2026-03-24 17.44.00(2)のコピー2

さいごに

NetFUNNEL を使用すると、グローバルでメジャーな CDN である Akamai、CloudFront、Cloudflare、Fastly では対応するエージェントがあります。そのためアプリケーションに手を加えること無く、プラットフォームのサーバーレスコンピューティング環境に設定さえすれば、手軽に仮想待機室を実装できます。

CDN を使用して無くても、クライアントやサーバーサイドへの組み込みも可能です。様々なパターンで導入できるので、他のパターンも試してみようと思います。

この記事をシェアする

FacebookHatena blogX

関連記事