一部のアプリケーションでは、ショッピングカート、ログオン情報、ユーザーの好み、ゲームなどのユーザーデータを保護するために、ユーザーセッションの永続性を維持する必要があります。 同じクライアントからのリクエストが異なるサーバーに配信されると、ユーザーデータが失われる可能性があります。 これは、ユーザ体験を損なう。 Application Load Balancer (ALB) インスタンスのセッション維持を有効にすると、同じクライアントからのリクエストが同じバックエンドサーバーに転送され、データの一貫性が確保され、ユーザーエクスペリエンスが向上します。
背景情報
デフォルトでは、ALBはリクエストを異なるバックエンドサーバーに配信します。 セッション永続化機能を有効にすると、同じクライアントからのリクエストが同じバックエンドサーバーに転送されます。 これにより、バックエンドサーバーはステータス情報を維持し、クライアントに継続的なサービスを提供できます。
セッション維持無効: 同じクライアントからのリクエストは、ALBの異なるバックエンドサーバーに配信される可能性があります。 バックエンドサーバーにログインしてインタラクション情報を取得するシナリオなど、一部のシナリオでは、バックエンドサーバーに複数回ログインする必要がある場合があります。
セッション持続性が有効: 同じクライアントからのリクエストは、ALBの同じバックエンドサーバーに配信されます。 バックエンドサーバーにログインしてインタラクション情報を取得するシナリオなど、一部のシナリオでは、バックエンドサーバーに複数回ログインする必要はありません。
ALBインスタンスのセッション維持を有効にするには、Cookieを管理する方法を選択する必要があります。 次の方法がサポートされています。
Cookieの挿入: ALBは、クライアントに送信される最初の応答にSERVERIDおよびSERVERCORSID Cookieを挿入します。 SERVERCORSIDクッキーは、SERVERIDクッキーに基づいて生成され、samesite=None属性を有する。 クライアントからの後続の要求は、クッキーを搬送し、ALBは、要求を記録されたバックエンドサーバに転送する。
説明セッション永続性が有効になっている場合、SameSite=Noneは自動的にCookieに設定されます。 属性を手動で設定する必要はありません。 これにより、ALBの転送ルールでクロスオリジンリソース共有 (CORS) が設定されている場合、ブラウザはCookieを保存できます。
cookieの書き換え: ALBがユーザー定義のcookieを検出すると、ALBは元のcookieをユーザー定義のcookieに書き換えます。 クライアントからの後続のリクエストはユーザー定義のcookieを持ち、ALBはそのリクエストを記録されたバックエンドサーバーに転送します。
制限事項
Function Computeタイプのサーバーグループを使用する場合、セッション永続性を設定する必要はありません。 詳細については、「サーバーグループの作成」をご参照ください。
前提条件
インターネット向けALBインスタンスが作成され、実行中です。 詳細については、「ALBインスタンスの作成」をご参照ください。
Function ComputeまたはIPタイプのサーバーグループが作成されます。 詳細については、「サーバーグループの作成」をご参照ください。
ECS01とECS02という名前の2つのElastic Compute Service (ECS) インスタンスが、リクエストを受信するバックエンドサーバーとして指定されています。 異なるバックエンドサービスがECS01とECS02にデプロイされています。 ECS01およびECS02への要求は、異なる応答を受け取る。 たとえば、ECS01は「Hello World! 」を返し
ます。 これはECS01 "
であり、ECS02は" Hello World! これはECS02 "
です。 ECSインスタンスのセキュリティグループが、バックエンドサービスで使用されるポートへのリクエストを許可していることを確認します。サーバグループにECS01とECS02が追加されます。 詳細については、「バックエンドサーバーの追加」をご参照ください。
ALBインスタンスのリスナーが作成されます。 詳細については、「HTTPリスナーの追加」、「HTTPSリスナーの追加」、および「QUICリスナーの追加」をご参照ください。
手順1: ALBインスタンスのセッション維持の設定
ALB コンソールにログインします。
上部のナビゲーションバーで、サーバーグループを作成するリージョンを選択します。
左側のナビゲーションウィンドウで、
を選択します。[サーバーグループ] ページで、管理するサーバーグループを見つけ、[操作] 列の [基本情報の変更] をクリックします。
[基本情報の変更] ダイアログボックスで、[セッション永続性] をオンにします。
Session Persistence: Session Persistenceをオンにし、Cookie Persistenceパラメーターを設定します。
[Cookieの挿入] を選択した場合、[Session Persistence Timeout Period] パラメーターを設定し、[Save] をクリックします。
[Cookieの書き換え] を選択した場合、[Cookie名] パラメーターを設定し、[保存] をクリックします。
この例では、cookieの名前は
BACKEND_SERVER
です。 ビジネス要件に基づいて名前を指定できます。
(オプション) 手順2: バックエンドサーバーのCookieの設定
セッション維持を有効にし、cookieオプションをRewrite Cookieに設定した場合、バックエンドサーバーのcookieを設定する必要があります。
ECSインスタンスにリモートでログインします。 詳細については、「ECS インスタンスへの接続」をご参照ください。
webサーバーのCookieを設定します。
説明Cookieの設定方法は、webサーバーの種類によって異なります。 次の手順では、一般的に使用されるwebサーバーでCookieを設定する方法を示します。 別のwebサーバを使用する場合は、webサーバのユーザーガイドを参照してください。
Nginx
この例では、CentOS 7.9オペレーティングシステムとNGINX 1.20.1が使用されています。 使用する環境に基づいて設定を調整します。
NGINX設定ファイルを変更して保存します。 次のコードブロックは、例を示しています。
nginx -t
コマンドを実行して、設定ファイルのパスを照会します。 ほとんどの場合、設定ファイルのパスは/etc/nginx/nginx.conf
です。 パスは、使用する環境によって異なる場合があります。http { # ... server { listen 80; # Set BACKEND_SERVER to the cookie name used to rewrite cookies. Set value to a custom string. 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 # Set BACKEND_SERVER to the cookie name used to rewrite cookies. Set value to a custom string. Header always set Set-Cookie "BACKEND_SERVER=value" # ...
次のコマンドを実行して、設定を有効にするためにApache設定ファイルをリロードします。
sudo systemctl reload httpd.service
上記の手順を繰り返して、サーバーグループ内の他のバックエンドサーバーの設定を変更します。
ステップ3: セッション維持が有効かどうかをテストする
ALB コンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。 管理するALBインスタンスのドメイン名をコピーします。
ブラウザからドメイン名にアクセスし、ページを更新して、同じサーバーにアクセスするかどうかをテストします。
たとえば、最初のリクエストはECS01に送信されます。 ページを更新して、後続の要求もECS01に送信されるかどうかをテストします。
リクエストがECS01とECS02の間で配信される場合、セッションの永続化は失敗します。 セッション永続化の設定を確認し、もう一度お試しください。
関連ドキュメント
問題が解決しない場合は、「ALBに関するFAQ」をご参照ください。
ヘルスチェックの問題が解決しない場合は、「ヘルスチェックエラーのトラブルシューティング方法?」をご参照ください。