【正解】A
【0からの解説】
このアプリケーションは「セッションアフィニティ(セッション維持=スティッキーセッション)」を必要とします。ところが、ターゲットグループのルーティングアルゴリズムが「weighted random(加重ランダム)」に設定されています。
AWS の仕様上、ALB の weighted random アルゴリズムは
スティッキーセッション(セッションアフィニティ)をサポートしていません。そのため、本来は同じインスタンスへ送られ続けるべき同一ユーザーのリクエストが毎回別々のインスタンスに分散してしまい、セッション情報が引き継がれず「ランダムなエラー」として現れます。ヘルスチェックはインスタンスの健全性を見るだけなので、この種のセッション不整合は検知されず「ヘルスチェックは合格しているのにエラー」という症状になります。
解決策は、スティッキーセッションをサポートするルーティングアルゴリズムに変更することです。ALB では「round robin(ラウンドロビン)」と「least outstanding requests(未処理リクエスト数最小)」がスティッキーセッションに対応しています。したがって、ルーティングアルゴリズムを least outstanding requests に変更する選択肢 A が正解です。これによりスティッキーセッションが正しく機能し、セッションアフィニティが回復してエラーが解消します。
【誤りの選択肢】
B:異常緩和(anomaly mitigation)は
weighted random アルゴリズムでのみ利用可能な機能です。有効化しても weighted random のままであり、スティッキーセッション非対応という根本原因は解消しません。むしろ weighted random を使い続けることになるため、セッションアフィニティの問題は残ります。
C:クロスゾーン負荷分散をオフにすると、トラフィックは同一 AZ 内のターゲットにのみ分散されますが、AZ 内に複数インスタンスがあればやはりセッションは分散され、セッションアフィニティの欠如という原因は解決しません。
D:登録解除遅延(deregistration delay/コネクションドレイン)は、インスタンスをターゲットから外す際に処理中のリクエストを完了させるための待ち時間設定です。新規リクエストのセッション維持とは無関係で、ランダムエラーの原因に対処しません。
【参考】
ターゲットグループのルーティングアルゴリズム - Application Load Balancerスティッキーセッション - Application Load Balancer