

# 加重ルールのセッション維持
<a name="gateway-rules-session-stickiness"></a>

A/B テストまたは Canary デプロイに加重ルールを使用する場合、各セッションが複数のリクエストで一貫したエクスペリエンスを受け取るようにします。セッションの維持がない場合、セッションは異なる設定バンドルを受信したり、リクエストごとに異なるターゲットにルーティングしたりできます。別のターゲットへのルーティングは、以前のリクエストからのコンテキストがない新しいエージェントランタイムを意味し、ユーザーエクスペリエンスが損なわれます。

これを解決するために、ゲートウェイはセッションの維持をサポートします。リクエストにセッション ID を含めると、ゲートウェイは最初のリクエストからのルーティング決定を保存し、同じセッション内の後続のすべてのリクエストに再利用します。

## セッション維持の仕組み
<a name="gateway-rules-session-stickiness-how"></a>

ゲートウェイは、各リクエストからセッション ID を抽出することでセッションを識別します。維持フローは次のように機能します。

1. セッション ID を持つ最初のリクエストで、ゲートウェイは設定された重みに基づいてバリアントを選択し、決定を保存します。

1. 同じセッション ID を持つ後続のリクエストは、重みを再評価することなく、保存された決定を再利用します。

1. セッション ID のないリクエストは、維持することなく個別に評価されます。

ゲートウェイがセッション ID を決定する方法は、ターゲットタイプによって異なります。
+  **AgentCore ランタイムターゲット** – ゲートウェイは `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id`ヘッダーを使用します。ヘッダー値は 33 文字以上にする必要があります。最初のリクエストでこのヘッダーを送信する必要はありません。ヘッダーがない場合、エージェントランタイムはセッション ID を自動生成し、ゲートウェイは自動生成されたセッション ID を使用して、後続のリクエストを含めると維持します。
+  **HTTP パススルーターゲット** – デフォルトでは、ゲートウェイは `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id`ヘッダーを使用します。ターゲットでカスタムセッション識別子とタイムアウトを設定することもできます。そのため、独自のセッションヘッダーを使用するパススルークライアントは、ランタイムセッションヘッダーを採用する必要はありません。詳細については、[「パススルーターゲットのセッション維持の設定](#gateway-rules-session-stickiness-passthrough)」を参照してください。

## パススルーターゲットのセッション維持を設定する
<a name="gateway-rules-session-stickiness-passthrough"></a>

HTTP パススルーターゲットの場合、ターゲット設定`stickinessConfiguration`でオプションの を設定して、ゲートウェイがセッションを識別する方法とセッションアフィニティの存続期間を制御できます。これは、クライアントが既に独自のセッションヘッダーを送信していて、標準のランタイムセッションヘッダーも送信しないようにする場合に便利です。

`stickinessConfiguration` オブジェクトには以下が含まれます。
+  **identifier** (必須) – リクエスト内のセッション ID の場所をゲートウェイに指示する式。現在、ゲートウェイはリクエストヘッダーからのみセッション ID を解決できます。ヘッダーは、次のいずれかの形式で指定できます。
  + などのプレーン HTTP ヘッダー名`x-session-id`。ゲートウェイはそのリクエストヘッダーからセッション ID を読み取ります。
  + `$.AMZN_AC_GW_CONTEXT.headers.{header-name}`などの 形式のコンテキストパス式`$.AMZN_AC_GW_CONTEXT.headers.x-session-id`。

    `headers` ソースのみが現在サポートされています。他のソース (JWT クレームなど) は現在利用できません。
+  **timeout** (オプション) – セッションアフィニティタイムアウト。秒単位、1～86400 (24 時間）。この非アクティブ期間が経過すると、セッションアフィニティは期限切れになります。ウィンドウはリクエストごとにリセットされます (スライディングウィンドウ）。

ターゲットに がある場合`stickinessConfiguration`、ゲートウェイは設定された からセッション ID を解決します`identifier`。

次の例では、カスタム`x-session-id`ヘッダーからセッション ID を抽出し、8 時間 (28800 秒) 後にセッションアフィニティを期限切れ`stickinessConfiguration`にする を使用してパススルーターゲットを作成します。

```
aws bedrock-agentcore-control create-gateway-target --cli-input-json '{
    "gatewayIdentifier": "GATEWAY_ID",
    "name": "my-passthrough-target",
    "targetConfiguration": {
        "http": {
            "passthrough": {
                "endpoint": "https://my-service.example.com",
                "protocolType": "CUSTOM",
                "stickinessConfiguration": {
                    "identifier": "$.AMZN_AC_GW_CONTEXT.headers.x-session-id",
                    "timeout": 28800
                }
            }
        }
    },
    "credentialProviderConfigurations": [
        {"credentialProviderType": "GATEWAY_IAM_ROLE"}
    ]
}'
```

パススルーターゲットの詳細については、[「HTTP パススルーターゲット](gateway-target-http-passthrough.md)」を参照してください。

## 重要な動作
<a name="gateway-rules-session-stickiness-behaviors"></a>

 **保存された決定は、ルールの変更よりも優先されます。**ルールを更新すると、既存のセッションは元の決定のままになります。これにより、セッションの一貫性が確保されます。新しいルールをセッションに適用するには、新しいセッション ID を使用して新しいセッションを開始します。

 **セッションは、非アクティブ期間が経過すると期限切れになります。**有効期限ウィンドウは、リクエストごとにリセットされます (スライディングウィンドウ）。AgentCore ランタイムターゲットの場合、セッションは 15 日間の非アクティブ後に期限切れになります。HTTP パススルーターゲットの場合、有効期限ウィンドウはターゲットの `stickinessConfiguration` (1 ～ 86400 秒) で`timeout`設定した です。タイムアウトを設定しない場合、デフォルトが適用されます。セッションの有効期限が切れたら、予期しないルーティング動作を避けるために、新しいセッションに新しいセッション ID を使用します。期限切れIDs は再利用しないことをお勧めします。

 **セッション状態はターゲットごとにスコープされます。**異なるターゲットは独立したセッション状態を維持します。

 **AgentCore ランタイムおよび HTTP パススルーターゲットでサポートされています。**MCP ターゲットではセッションの維持はサポートされていません。