すべてのプロダクト
Search
ドキュメントセンター

Function Compute:セッション保持の構成プラクティス

最終更新日:Nov 09, 2025

Function Compute は、WebSocket、gRPC、ロングポーリングなどのセッション依存のシナリオ向けにセッション保持機能を提供します。この機能は持続的接続を有効にし、セッション状態の維持に役立ちます。このトピックでは、Function Compute コンソールでセッション保持を構成する方法について説明します。

制限事項

  • 一般的な制限事項

    • セッション分離を有効にすると、セッションアフィニティ機能は自動的に有効になり、無効にすることはできません。 次のアフィニティタイプのいずれかを選択する必要があります。MCP SSE アフィニティHeaderField アフィニティ、または Cookie アフィニティ

    • リクエスト分離を有効にすると、セッションアフィニティ機能は使用できません。

    • セッションアフィニティは、非同期タスクリクエストではサポートされていません。

    • 組み込みランタイムを選択した場合、インスタンスあたりの同時実行数は 1 に制限されます。 この場合、インスタンスあたりの同時セッション数も 1 に制限されます。

    • インスタンスあたりの同時セッション数は、インスタンスあたりの最大同時リクエスト数を超えることはできません。

  • MCP Streamable HTTP アフィニティに固有の制限

    • MCP Streamable HTTP アフィニティの Function Compute 実装は、MCP プロトコルバージョン 2025-03-26 および 2025-06-18 に基づいています。MCP Streamable HTTP アフィニティが有効になっている関数にアクセスする場合、クライアントと MCP 関数の両方が MCP バージョン 2025-03-26 または 2025-06-18 のトランスポートプロトコル規則に従う必要があります。

    • MCP トランスポートレイヤーの下位互換性ルールによると、単一の Web サーバーは MCP HTTP with SSE と MCP Streamable HTTP の両方のトランスポートモードをサポートできます。ただし、関数が両方のトランスポートメソッドをサポートし、MCP Streamable HTTP アフィニティで構成されている場合、セッション管理メカニズムに互換性がないため、MCP HTTP with SSE を使用して行われた MCP 呼び出しは失敗します。

      したがって、MCP Streamable HTTP アフィニティが有効になっている場合、MCP HTTP with SSE トランスポートを使用する関数を正しく呼び出すことはできません。

    • MCP Streamable HTTP アフィニティが有効になっている関数には、HTTP トリガーまたはカスタムドメイン名からのみアクセスできます。

    • HTTP トリガーを使用して関数にアクセスする場合、構成された HTTP トリガーは、少なくとも GET、POST、および DELETE リクエストメソッドをサポートする必要があります。

  • MCP SSE アフィニティに固有の制限事項

    • 関数を作成する際、MCP SSE アフィニティは組み込みランタイムではサポートされていません。MCP ランタイムを選択した場合、MCP SSE アフィニティのみがサポートされます。

    • MCP SSE アフィニティが有効になっている関数にアクセスするには、公式の MCP クライアントまたは SDK を使用する必要があります。

  • HeaderField アフィニティに固有の制限事項

    • 現在、HeaderField アフィニティは HTTP プロトコルのみをサポートしています。

  • Cookie アフィニティに固有の制限事項

    • サーバー側の Cookie 挿入モードのみがサポートされています。 つまり、クライアントが初めて関数にアクセスすると、Function Compute は自動的にレスポンスに Cookie を挿入します。

セッションアフィニティの予期される動作(アフィニティ、スロットリング、および新しいインスタンスへのスケジューリング)

セッション保持タイプを選択すると、インスタンスあたりの同時実行数は自動的に最大 200 に設定され、変更できません。複数のセッションからのリクエストは、単一インスタンスの最大同時実行クォータ 200 を共有します。単一インスタンスの同時実行数制限を超えるリクエストは、他のインスタンスにルーティングされるか、スロットリングされます。

  • アフィニティ

    単一インスタンス上のすべてのセッションでの同時リクエストの合計数が最大同時実行クォータ 200 を超えない場合に限り、システムは セッションライフサイクル 内でセッションアフィニティを保証します。

  • スロットリング

    単一インスタンス上のすべてのセッションでの同時リクエストの合計数が最大同時実行クォータ 200 を超えると、既存のセッションへの新しいリクエストはスロットリングされ、429 エラーが返されます。 新しいセッションは、新しく作成された関数インスタンスに自動的にスケジューリングされます。

    たとえば、インスタンスあたりの同時セッション数が 30 に設定されているとします。あるインスタンスで 20 のアクティブなセッションが実行されており、各セッションが 10 の同時リクエストを処理している場合、インスタンス上の同時リクエストの総数は最大クォータの 200 (20 × 10 = 200) に達します。この場合、これら 20 セッションに対する新しいリクエストはすべてスロットリングされます。21 番目のセッションなどの新しいセッションのリクエストは、新しい関数インスタンスに自動的にスケジュールされます。

  • 新しいインスタンスへのスケジューリング

    構成された インスタンスあたりの同時セッション数 を超えると、新しいセッションリクエストは新しく作成された関数インスタンスに自動的にスケジューリングされます。

パラメーター構成ガイド

  1. インスタンスあたりの同時セッション数を低い値に設定すると、システムはより多くの関数インスタンスを作成するため、コストが増加します。 関数のリソース仕様をダウングレードすることでコストを削減できます。

  2. リソースは、単一インスタンス上の複数のセッション間で共有されます。ユースケースでリソース共有が許容できるかどうかを評価する必要があります。これにより、リソース使用率が向上し、コストが削減されます。

手順

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数管理] > [関数] を選択します。

  2. 上部のナビゲーションバーでリージョンを選択します。[関数] ページで、[関数の作成] をクリックします。

  3. 表示されるダイアログボックスで、関数タイプを選択します。[関数の作成] ページで、[分離とアフィニティ] セクションを見つけます。次の手順で説明するようにパラメーターを構成し、[作成] をクリックします。

    1. インスタンスの分離

      インスタンス分離機能は無効のままにします。

    2. セッションアフィニティ

    • MCP Streamable HTTP アフィニティ

      構成項目

      説明

      セッション保持タイプ

      MCP Streamable HTTP アフィニティを選択します。システムは、同じ MCP Streamable HTTP セッションに属するリクエストが、常にセッションを生成した関数インスタンスにルーティングされるようにします。

      MCP Streamable HTTP アフィニティ

      インスタンスあたりの同時セッション数

      単一のインスタンスが同時に処理できるセッションの最大数。デフォルト値は 20 です。同時セッションの最大数は 200 です。

      20

      単一セッションのライフサイクル

      セッションの作成、使用から最終的な破棄までの全プロセス。単一セッションのライフサイクルを超えると、サーバーはプラットフォーム側で MCP Streamable HTTP に関連付けられたセッションを自動的に破棄し、その MCP Streamable HTTP セッションのアフィニティを保証しなくなります。

      21600 秒

      セッションアイドル期間

      一定期間リクエストを関数インスタンスが受信しない場合、セッションはアイドル状態になります。構成されたセッションアイドル期間を超えると、サーバーはプラットフォーム側で MCP Streamable HTTP に関連付けられたセッションを自動的に破棄し、その MCP Streamable HTTP セッションのアフィニティを保証しなくなります。

      1800 秒

    • MCP SSE アフィニティ

      構成項目

      説明

      セッションアフィニティタイプ

      [MCP SSE affinity] を選択します。MCP SSE プロトコルの仕様に基づき、同じセッション ID を持つクライアントリクエストが常に同じインスタンスにルーティングされることで、アフィニティ動作が実装されます。

      MCP SSE アフィニティ

      SSE パス

      SSE 接続リクエストを開始するためのパス。

      /sse

      インスタンスあたりの同時セッション数

      単一インスタンスで同時に処理できるセッションの最大数。 デフォルト値は 20 です。同時セッションの最大数は 200 です。

      20

    • HeaderField アフィニティ

      構成項目

      説明

      セッションアフィニティ

      [HeaderField] を選択すると、HTTP リクエストヘッダー内の指定されたフィールドの値に基づいてセッション保持を実装します。

      HeaderField アフィニティ

      ヘッダー名

      アフィニティのクライアント ID を送信するために使用されるヘッダーの名前。 たとえば、送信するアフィニティ ID が mySessionId で、[ヘッダー名] が x-custom-affinity-header の場合、HTTP プロトコルを使用して呼び出しを行うときに、次のヘッダーと値を送信する必要があります。x-custom-affinity-header:mySessionId.

      x-custom-affinity-header

      インスタンスあたりの同時セッション数

      単一インスタンスで同時に処理できるセッションの最大数。 デフォルト値は 20 です。同時セッションの最大数は 200 です。

      20

      単一セッションのライフサイクル

      セッションの作成と使用から最終的な破棄までの一連のプロセス。単一セッションのライフサイクルを超過した場合、サーバーはセッションを自動的に破棄し、アフィニティは保証されなくなります。

      21600 秒

      セッションのアイドル時間

      一定期間操作が実行されない場合、セッションはアイドル状態になります。設定された[セッションアイドル期間]を超過した場合、サーバーは自動的にセッションを破棄し、アフィニティを保証しなくなります。

      1800 秒

    • Cookie アフィニティ

      構成項目

      説明

      セッションアフィニティ

      HTTP クッキーの属性値に基づいてセッション保持を実装するには、[Cookie アフィニティ] を選択します。

      Cookie アフィニティ

      Cookie 処理方法

      現在、Cookie 挿入方法のみがサポートされています。 つまり、クライアントが初めて関数にアクセスすると、Function Compute は自動的にレスポンスに Cookie を挿入します。 具体的には、Set-Cookie:x-fc-cookie-session-id={CookieID} が HTTP/HTTPS レスポンスメッセージに挿入されます。 クライアントが後で Cookie:x-fc-cookie-session-id={CookieID} を使用して関数にアクセスすると、Function Compute は最初のリクエストが配置された関数インスタンスにリクエストを転送します。

      [Cookie を挿入]

      インスタンスあたりの同時セッション数

      単一インスタンスで同時に処理できるセッションの最大数。 デフォルト値は 20 です。同時セッションの最大数は 200 です。

      20

      単一セッションのライフサイクル

      セッションの作成から使用、最終的な破棄までの一連のプロセス。単一セッションのライフサイクルを超えた場合、サーバーは自動的にセッションを破棄し、アフィニティを保証しなくなります。

      21600 秒

      セッションのアイドル時間

      一定期間、操作が実行されない場合、セッションはアイドル状態になります。設定された[セッションアイドル期間]を超過した場合、サーバーはセッションを自動的に破棄し、アフィニティを保証しなくなります。

      1800 秒

結果の確認

このセクションでは、HeaderField アフィニティを例として使用します。アフィニティを有効にした後、HTTP リクエストヘッダーを指定して関数を呼び出すことができます。その後、構成されたインスタンスあたりの同時セッション数を超えない限り、同じセッションのリクエストが同じ関数インスタンスにルーティングされるかどうかを確認できます。

  1. テストのために、異なる HTTP リクエストヘッダーを使用して関数を複数回呼び出します。 このトピックでは、cURL コマンドを例として使用します。

    次の例はコマンドを示しています。`example` と `regionID` を関数の URL に置き換えてください。関数の URL は、関数詳細ページの [トリガー] タブにある HTTP トリガーの [設定情報] 列で確認できます。

    curl -H "x-custom-affinity-header:mySessionId" https://example.{regionID}.fcapp.run

    [Cookie アフィニティ] を選択した場合、cURL コマンドのフォーマットは次のとおりです:

    curl -H "Cookie:x-fc-cookie-session-id={CookieID}" https://example.{regionID}.fcapp.run
  2. 関数詳細ページで、[ログ] タブをクリックします。構成されたインスタンスあたりの同時セッション数を超えない限り、同じセッション ID を持つリクエストが同じ関数インスタンスにルーティングされることがわかります。

よくある質問

MCP Streamable HTTP アフィニティ

シナリオ

システムの動作

ステータスコード

クライアント側のアクション

DELETE メソッドが HTTP トリガーに構成されていません。

MCP クライアントがセッションを終了するために DELETE リクエストを送信すると、サーバーはリクエストを拒否します。関数インスタンスは DELETE リクエストを受信せず、セッションは削除されません。セッションは、有効期限が切れるかタイムアウトするまで、インスタンスのセッションクォータを占有し続けます。クォータはセッションが終了した後にのみ回収されます。

403

HTTP トリガーのリクエストメソッドに DELETE メソッドを追加します。

MCP Streamable HTTP に対応するセッションの有効期限が切れます。

システムはリクエストを拒否します。

401

新しい MCP Streamable HTTP セッション初期化リクエストを開始して、新しいセッションを作成します。

MCP Streamable HTTP リクエストのセッション ID が無効です。

システムはリクエストを拒否します。

401

新しい MCP Streamable HTTP セッション初期化リクエストを開始して、新しいセッションを作成します。

インスタンスあたりの同時セッション数が使い果たされました。

既存のインスタンス数がリージョンの最大数に達していない場合、システムは自動的に新しいインスタンスをスケールアウトしてセッションリクエストをアタッチします。

200

-

既存のインスタンス数がリージョンの最大数に達した場合、システムはリクエストをスロットリングして拒否します。

429

1. バックオフ再試行ポリシーを使用します。 2. Quota Center でリージョン内の最大インスタンス数のクォータ増加をリクエストします。

単一インスタンスの同時実行クォータ 200 が使い果たされました。

システムはリクエストをスロットリングして拒否します。

429

1. 単一インスタンスにアタッチされた同時セッション数が 1 より大きい場合は、構成を減らすことを検討してください。 2. 単一インスタンスにアタッチされた同時セッション数が 1 の場合は、チケットを送信して当社にご連絡ください。

MCP SSE アフィニティ

シナリオ

システムの動作

ステータスコード

クライアント側のアクション

インスタンスあたりの同時セッション数が使い果たされています。

既存のインスタンスの数が、リージョン内のインスタンスの最大数を超えていません。 システムは自動的に新しいインスタンスをスケールアウトして、セッションリクエストをアタッチします。

200

-

既存のインスタンス数がリージョン内の最大インスタンス数に達しています。システムはリクエストをスロットリングして拒否します。

429

1. バックオフ再試行ポリシーを使用します。 2. Quota Center でリージョン内の最大インスタンス数のクォータ増加をリクエストします。

単一インスタンスの同時実行クォータ 200 が使い果たされています。

システムはリクエストをスロットリングして拒否します。

429

1. 単一インスタンスにアタッチされた同時セッション数が 1 より大きい場合は、構成を減らすことを検討してください。 2. 単一インスタンスにアタッチされた同時セッション数が 1 の場合は、チケットを送信して当社にご連絡ください。

HeaderField アフィニティ

シナリオ

システムの動作

ステータスコード

クライアント側の操作

インスタンスあたりの同時セッション数が使い果たされています。

既存のインスタンス数がリージョンの最大数に達していない場合、システムは自動的に新しいインスタンスをスケールアウトしてセッションリクエストをアタッチします。

200

-

既存のインスタンス数がリージョンの最大数に達した場合、システムはリクエストをスロットリングして拒否します。

429

1. バックオフ再試行ポリシーを使用します。 2. Quota Center でリージョン内の最大インスタンス数のクォータ増加をリクエストします。

単一インスタンスの同時実行クォータ 200 が使い果たされています。

システムはリクエストをスロットリングして拒否します。

429

1. 単一インスタンスにアタッチされた同時セッション数が 1 より大きい場合は、構成を減らすことを検討してください。 2. 単一インスタンスにアタッチされた同時セッション数が 1 の場合は、チケットを送信して当社にご連絡ください。

HeaderField の値が無効です。

システムはリクエストを拒否します。

400

プラットフォームパラメータの制限を確認し、有効な構成を提供します。

HeaderField に対応するセッションの有効期限が切れました。

システムはリクエストを拒否します。

401

新しい HeaderField でリクエストを開始します。

Cookie アフィニティ

シナリオ

システムの動作

ステータスコード

クライアント側のアクション

インスタンスあたりの同時セッション数が使い果たされています。

既存のインスタンス数がリージョンの最大数に達していない場合、システムは自動的に新しいインスタンスをスケールアウトしてセッションリクエストをアタッチします。

200

-

既存のインスタンス数がリージョンの最大数に達した場合、システムはリクエストをスロットリングして拒否します。

429

1. バックオフ再試行ポリシーを使用します。 2. Quota Center でリージョン内の最大インスタンス数のクォータ増加をリクエストします。

単一インスタンスの同時実行クォータ 200 が使い果たされています。

システムはリクエストをスロットリングして拒否します。

429

1. 単一インスタンスにアタッチされた同時セッション数が 1 より大きい場合は、構成を減らすことを検討してください。 2. 単一インスタンスにアタッチされた同時セッション数が 1 の場合は、チケットを送信して当社にご連絡ください。

Cookie が無効であるか、有効期限が切れています。

システムはリクエストを拒否します。

401

Cookie なしでリクエストを開始して、新しいものを生成します。