このページでは、Cloud Run サービス リビジョンのセッション アフィニティを有効にする方法について説明します。
セッション アフィニティの仕組み
デフォルトでは、セッション アフィニティは有効になっていないため、次のように、同じクライアントからのリクエストが異なるインスタンスによって処理される場合があります。
セッション アフィニティを有効にすると、Cloud Run は特定のクライアントからの連続したリクエストを同じリビジョン インスタンスに転送します。次の図のように、Cloud Run は TTL を 30 日に設定したセッション アフィニティ Cookie を使用し、その値により同じクライアントによる複数のリクエストを識別して、これらのリクエストを同じインスタンスに転送します。
注意すべき動作
上の図のように、セッション アフィニティを有効にすると、クライアントは同じインスタンスに到達します。ただし、インスタンスは異なるクライアントからリクエストを受信できることに注意してください。セッション アフィニティは、インスタンスが 1 つのクライアントの専用であることを意味するわけではありません。
Cloud Run の自動スケーリング動作のため、セッション アフィニティは、ベスト エフォート アフィニティになります。なんらかの理由でインスタンスが終了した場合、またはリクエストの同時実行数または CPU 使用率が最大値に達した場合、セッション アフィニティは破棄され、それ以降のリクエストは別のインスタンスに転送されます。
クライアント セッション データはインスタンスのメモリ キャッシュに保存できますが、セッション アフィニティが有効になっている場合でも、クライアントが常に同じインスタンスに再接続できるとは限りません。
Cloud Load Balancing セッション アフィニティと Cloud Run セッション アフィニティは、セッション アフィニティの 2 つの別個の独立した実装です。Cloud Run サービスで Cloud Run のセッション アフィニティを有効にできます。これは、ロードバランサの背後にある場合でも可能です。ただし、サーバーレス ネットワーク エンドポイント グループでは、Cloud Load Balancing セッション アフィニティはサポートされていないため、有効にしないでください。
セッション アフィニティとトラフィック分割
セッション アフィニティは、リビジョン レベルで有効または無効にできます。Cloud Run リビジョンでセッション アフィニティを有効にして、トラフィック分割も使用する場合、セッション アフィニティはトラフィック分割よりも優先されます。セッション アフィニティを使用する単一のクライアントがリクエストのほとんどを処理しているような極端なケースでは、トラフィック分割の構成に関係なく、すべてのリクエストを特定のリビジョンにルーティングできます。
一部のリビジョンでセッション アフィニティが有効になっていて、有効になっていないリビジョンでトラフィック分割を有効にすると、トラフィック分割の構成の変更を明示的に行わなくても、セッション アフィニティが有効になっているリビジョンにリクエストが徐々にシフトされます。これは、セッション アフィニティの Cookie がないリクエストはすべてランダム分割の対象となり、最終的に一部はセッション アフィニティのあるリビジョンに割り当てられ、その後、これらのリクエストがそのリビジョンに残るためです。
Cloud Run サービスのトラフィック分割の構成を更新すると、セッション アフィニティの Cookie のある後続のリクエストが、別のリビジョンに割り当てられることがあります。Cloud Run は、新しいリビジョンにリダイレクトされるクライアントの数を最小限に抑えます。
たとえば、サービスがトラフィックを 90% と 10% に分割していて、この比率が 80% と 20% に更新された場合、現在のリビジョンにトラフィックの 10% がリダイレクトされ、処理されるトラフィックが 20% になります。
セッション アフィニティを設定する
構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。
新しいサービスを作成するときや新しいリビジョンをデプロイするときに、Google Cloud コンソール、gcloud コマンドライン、または .yaml ファイルを使用して、セッション アフィニティを設定できます。
コンソール
Google Cloud コンソールで、[Cloud Run] に移動します。
[コンテナをデプロイ] をクリックし、[サービス] を選択して、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[ネットワーキング] タブをクリックします。
- [セッション アフィニティ] テキスト ボックスをクリックします。
[作成] または [デプロイ] をクリックします。
gcloud
セッション アフィニティを指定するには、次のコマンドを使用します。
gcloud run services update SERVICE --session-affinity
次のように置き換えます。
- SERVICE は、更新するサービスの名前に置き換えます。
セッション アフィニティを削除するには、次のコマンドを使用します。
gcloud run services update SERVICE --no-session-affinity
YAML
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
アノテーション
run.googleapis.com/sessionAffinity:
を追加します。spec: template: metadata: annotations: run.googleapis.com/sessionAffinity: 'BOOL'
次のように置き換えます。
- セッション アフィニティを設定する場合は、「BOOL」の値を「
true
」に置き換えます。セッション アフィニティを削除する場合は、「false
」に置き換えます。
- セッション アフィニティを設定する場合は、「BOOL」の値を「
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
セッション アフィニティの設定を表示する
Cloud Run サービスの現在のセッション アフィニティ設定を表示するには:
コンソール
Google Cloud コンソールで、[Cloud Run] に移動します。
目的のサービスをクリックして、[サービスの詳細] ページを開きます。
[リビジョン] タブをクリックします。
右側の詳細パネルの [ネットワーキング] タブに、セッション アフィニティの設定が表示されます。
gcloud
次のコマンドを使用します。
gcloud run services describe SERVICE
返された構成で、セッション アフィニティの設定を見つけます。