Application Load Balancer (ALB) のセッション維持を有効にすると、同じクライアントからのリクエストが常に同じバックエンドサーバーに転送されます。これにより、一貫したユーザーエクスペリエンスとデータの整合性が確保されます。
背景
デフォルトでは、ALB はリクエストを異なるバックエンドサーバーに分散します。セッションの永続化を有効にすると、同じクライアントからのリクエストは同じバックエンドサーバーに転送されます。これにより、バックエンドサーバーはステータス情報を維持し、クライアントに継続的なサービスを提供できます。
セッションの永続化が無効: 同じクライアントからのリクエストが、ALB の異なるバックエンドサーバーに分散される場合があります。バックエンドサーバーにログインしてインタラクション情報を取得するシナリオなど、一部のシナリオでは、バックエンドサーバーに複数回ログインする必要がある場合があります。
セッションの永続化が有効: 同じクライアントからのリクエストは、ALB の同じバックエンドサーバーに分散されます。バックエンドサーバーにログインしてインタラクション情報を取得するシナリオなど、一部のシナリオでは、バックエンドサーバーに複数回ログインする必要はありません。
ALB インスタンスでセッション維持を有効にする場合、Cookie 戦略として Cookie の挿入または Cookie の書き換えを選択する必要があります。
-
Cookie の挿入:クライアントが最初のリクエストを送信すると、ALB インスタンスはレスポンスに Cookie を挿入します。ALB インスタンスは SERVERID と SERVERCORSID という 2 つの Cookie を挿入します。SERVERCORSID は SERVERID に基づいており、samesite=None 属性を含みます。クライアントがこれらの Cookie を含む後続のリクエストを送信すると、ALB インスタンスは以前に記録されたバックエンドサーバーにリクエストをルーティングします。
説明Cookie の挿入方法を使用する場合、
SameSite=None属性は自動的に含まれます。設定を行う必要はありません。これにより、ALB インスタンスの転送ルールで設定されているオリジン間のリソース共有 (CORS) シナリオにおいて、ブラウザが Cookie を破棄することを防ぎます。 -
Cookie の書き換え:ALB インスタンスがユーザー定義の Cookie を検出すると、元の Cookie を書き換えます。クライアントが新しい Cookie を含む後続のリクエストを送信すると、ALB インスタンスは以前に記録されたバックエンドサーバーにリクエストをルーティングします。
制限事項
Function Compute サーバーグループの場合、セッション維持を設定する必要はありません。詳細については、「サーバーグループの作成または削除」をご参照ください。
前提条件
-
実行中 状態のインターネット向け ALB インスタンスを作成済みであること。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
-
サーバータイプまたは IP タイプのサーバーグループを作成済みであること。詳細については、「サーバーグループの作成または削除」をご参照ください。
-
リクエストを受信する 2 つのバックエンドサーバー ECS01 と ECS02 を作成済みであること。異なるコンテンツを返すため、ECS01 と ECS02 には異なるバックエンドサービスがデプロイされています。たとえば、ECS01 にアクセスすると
"Hello World ! This is ECS01."が返され、ECS02 にアクセスすると"Hello World ! This is ECS02."が返されます。関連するサービスポートでトラフィックを許可するようにセキュリティグループルールが設定されていることを確認してください。 -
ECS01 と ECS02 をサーバーグループに追加済みであること。詳細については、「バックエンドサーバーの追加または削除」をご参照ください。
-
インスタンスのリスナーを設定済みであること。詳細については、「HTTP リスナーの追加」、「HTTPS リスナーの追加」、または「QUIC リスナーの追加」をご参照ください。
ステップ 1: セッション維持の設定
-
ALB コンソールにログインします。
-
上部メニューで、サーバーグループがデプロイされているリージョンを選択します。
-
ナビゲーションペインで、 の順に選択します。
-
サーバーグループ ページで、対象のサーバーグループを見つけ、操作 列で 基本情報の変更 をクリックします。
-
基本情報の変更 ダイアログボックスで、セッション維持を有効にします。
セッション維持 スイッチをオンにし、Cookie の持続性 を選択します。
-
Cookie の挿入 を選択し、セッション持続性のタイムアウト期間 の値を入力して、保存 をクリックします。
タイムアウト値を過度に長く設定しないでください。短期間の接続の場合、60 ~ 300 秒の値を推奨します。タイムアウト値が長すぎると、同じクライアントからのすべてのリクエストが同じバックエンドサーバーにルーティングされ、負荷の不均衡が生じる可能性があります。
-
Cookie の上書き を選択し、Cookie を入力して、保存 をクリックします。
この例では、Cookie 名を
BACKEND_SERVERに設定しています。この名前はデモンストレーション用です。カスタム名を指定できます。
-
(オプション) ステップ 2: バックエンドサーバーでの Cookie の設定
セッション維持を有効にし、Cookie の方式として Cookie の書き換えを設定した場合にのみ、バックエンドサーバーで Cookie を設定します。
-
ECS インスタンスにリモートログインします。詳細については、「ECS リモート接続ガイド」をご参照ください。
-
Web サーバーに応じて Cookie を設定します。
説明Cookie の設定は Web サーバーによって異なります。以下の例は一般的な Web サーバー用です。お使いのサーバーがリストにない場合は、公式ドキュメントをご参照ください。
NGINX
この例では、CentOS 7.9 と NGINX 1.20.1 を使用します。実際の設定は環境によって異なります。
-
Nginx 設定ファイルを変更して保存します。必要な変更については、以下の説明をご参照ください。
nginx -tコマンドを実行して、設定ファイルのパスを確認します。デフォルトのパスは通常/etc/nginx/nginx.confですが、実際のパスは環境によって異なる場合があります。http { # ... server { listen 80; # BACKEND_SERVER は、Cookie の書き換えを選択したときに指定した Cookie 名です。value には任意の文字列を設定します。 add_header Set-Cookie "BACKEND_SERVER=value"; # ... } } -
次のコマンドを実行して、NGINX 設定をリロードします。
sudo nginx -s reload
Apache
この例では、CentOS 7.9 と Apache 2.4.6 を使用します。実際の設定は環境によって異なります。
-
Apache サービス設定ファイルを変更して保存します。必要な変更については、以下の説明をご参照ください。ファイルは通常
/etc/httpd/conf/httpd.confにありますが、実際のパスは環境によって異なる場合があります。# ... Listen 80 # BACKEND_SERVER は、Cookie の書き換えを選択したときに指定した Cookie 名です。value には任意の文字列を設定します。 Header always set Set-Cookie "BACKEND_SERVER=value" # ... -
次のコマンドを実行して、Apache の設定をリロードして変更を適用します。
sudo systemctl reload httpd.service
-
-
サーバーグループ内の他のすべてのバックエンドサーバーに対して、これらの手順を繰り返します。
ステップ 3: セッション維持の検証
-
ALB コンソールにログインします。
-
上部メニューで、ALB インスタンスのリージョンを選択します。インスタンスを見つけて、そのドメイン名をコピーします。
-
ドメイン名をブラウザに貼り付けます。バックエンドサーバーのいずれかのページが表示されます。ページを数回更新します。
たとえば、最初のリクエストが ECS01 にルーティングされた場合、ページを複数回更新した後も、後続のリクエストは ECS01 にルーティングされます。

数回更新した後、レスポンスが ECS01 と ECS02 の間で交互に表示される場合、セッション維持が正しく機能していません。設定を確認して、再度テストしてください。
関連ドキュメント
-
設定中に問題が発生した場合は、トラブルシューティングのために「ALB FAQ」をご参照ください。
-
ヘルスチェックの問題が発生した場合は、「ALB ヘルスチェックの問題のトラブルシューティング」をご参照ください。