セッション アフィニティの設定(サービス)

このページでは、Cloud Run サービス リビジョンのセッション アフィニティを有効にする方法について説明します。

デフォルトでは、セッション アフィニティは有効になっていないため、次のように、同じクライアントからのリクエストが異なるインスタンスによって処理される場合があります。画像

セッション アフィニティを有効にすると、Cloud Run は特定のクライアントからの連続したリクエストを同じリビジョン インスタンスに転送します。次の図のように、Cloud Run は TTL を 30 日に設定したセッション アフィニティ Cookie を使用し、その値により同じクライアントによる複数のリクエストを識別して、これらのリクエストを同じインスタンスに転送します。 画像

注意すべき動作

上の図のように、セッション アフィニティを有効にすると、クライアントは同じインスタンスに到達します。ただし、インスタンスは異なるクライアントからリクエストを受信できることに注意してください。セッション アフィニティは、インスタンスが 1 つのクライアントの専用であることを意味するわけではありません。

Cloud Run の自動スケーリング動作のため、セッション アフィニティは、ベスト エフォート アフィニティになります。インスタンスがスケールインの結果として再起動、終了、過負荷、または使用不能になった場合、セッション アフィニティは中断され、それ以降のリクエストは別のインスタンスに転送されます。

クライアント セッション データはインスタンスのメモリ キャッシュに保存できますが、セッション アフィニティが有効になっている場合でも、クライアントが常に同じインスタンスに再接続できるとは限りません。

Cloud Load Balancing を使用すると、Cloud Run サービスのセッション アフィニティをグローバル ロードバランサと内部ロードバランサのセッション アフィニティに関連付けることができます。

セッション アフィニティとトラフィック分割

セッション アフィニティは、リビジョン レベルで有効または無効にできます。Cloud Run リビジョンでセッション アフィニティを有効にして、トラフィック分割も使用する場合、セッション アフィニティはトラフィック分割よりも優先されます。セッション アフィニティを使用する単一のクライアントがリクエストのほとんどを処理しているような極端なケースでは、トラフィック分割の構成に関係なく、すべてのリクエストを特定のリビジョンにルーティングできます。

一部のリビジョンでセッション アフィニティが有効になっていて、有効になっていないリビジョンでトラフィック分割を有効にすると、トラフィック分割の構成の変更を明示的に行わなくても、セッション アフィニティが有効になっているリビジョンにリクエストが徐々にシフトされます。これは、セッション アフィニティの Cookie がないリクエストはすべてランダム分割の対象となり、最終的に一部はセッション アフィニティのあるリビジョンに割り当てられ、その後、これらのリクエストがそのリビジョンに残るためです。

Cloud Run サービスのトラフィック分割の構成を更新すると、セッション アフィニティの Cookie のある後続のリクエストが、別のリビジョンに割り当てられることがあります。Cloud Run は、新しいリビジョンにリダイレクトされるクライアントの数を最小限に抑えます。

たとえば、サービスがトラフィックを 90% と 10% に分割していて、この比率が 80% と 20% に更新された場合、現在のリビジョンにトラフィックの 10% がリダイレクトされ、処理されるトラフィックが 20% になります。

セッション アフィニティを設定する

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

新しいサービスを作成するときや新しいリビジョンをデプロイするときに、Google Cloud コンソール、gcloud コマンドライン、または .yaml ファイルを使用して、セッション アフィニティを設定できます。

コンソール

  1. Google Cloud コンソールで、[Cloud Run] に移動します。

    Cloud Run に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [ネットワーキング] タブをクリックします。

    画像

    • [セッション アフィニティ] テキスト ボックスをクリックします。
  5. [作成] または [デプロイ] をクリックします。

コマンドライン

セッション アフィニティを指定するには、次のコマンドを使用します。

gcloud run services update SERVICE --session-affinity

次のように置き換えます。

  • SERVICE は、更新するサービスの名前に置き換えます。

セッション アフィニティを削除するには、次のコマンドを使用します。

gcloud run services update SERVICE --no-session-affinity

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順でフィールドを変更し、gcloud run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. アノテーション run.googleapis.com/sessionAffinity: を追加します。

    spec:
     template:
       metadata:
         annotations:
           run.googleapis.com/sessionAffinity: 'BOOL'

    次のように置き換えます。

    • セッション アフィニティを設定する場合は、「BOOL」の値を「true」に置き換えます。セッション アフィニティを削除する場合は、「false」に置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

セッション アフィニティの設定を表示する

Cloud Run サービスの現在のセッション アフィニティ設定を表示するには:

コンソール

  1. Google Cloud コンソールで、[Cloud Run] に移動します。

    Cloud Run に移動

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [リビジョン] タブをクリックします。

  4. 右側の詳細パネルの [ネットワーキング] タブに、セッション アフィニティの設定が表示されます。

コマンドライン

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、セッション アフィニティの設定を見つけます。