わたしが見つけたわけでも直接解決したわけでもないのですが、身近で表題のトラブルが発生したので、こちらに残しておきます。
※2021/03/18 現在の情報です。今後、Edge や ALB の動作が変更される可能性があります。
Microsoft Edge のバージョン
これを書いている時点で最新の 89.0.774.54(64 ビット)で確認しています。
ALB 側の設定
ターゲットグループでスティッキーセッションを有効にし、Stickiness type を「lb_cookie」にしている場合に、この事象が発生します。この設定では ALB が「AWSALB」という Cookie を発行して、それをセッションキーにしてアクセスをターゲットサーバに振り分けます。
なお、ここでは Stickiness duration を 1 日にしています。
障害が発生する条件
-
Cookie「AWSALB」の値が複数ある状態で ALB にリクエストが行われる
- 例えば、Domain 属性が無指定(=発行 FQDN のみ有効な Cookie)のものと、Domain 属性が指定されているものが混在している状態
- (ALB は、そn仕様上 Cookie「AWSALB」を Domain 属性無指定で発行するが)何らかの事情で Domain 属性が指定された「AWSALB」が誤って発行(保存)されてしまった、など
- 複数値のうちのいずれかがすでに有効期限がきれたセッションキーか、セッションキーとして無意味な値である
つまり、Edge 以外のブラウザでも発生する可能性があるトラブルですが、実は Edge で以下のような操作を行うことにより、この状態になることがわかっています。
- IE11 で対象の ALB に接続
- その後、Edge で IE11 の Cookie をインポート
- Edge で IE11 の Cookie をインポートする際、Domain 属性無指定の Cookie が Domain 属性=発行元の FQDN に変換されて保存されてしまう←ここが問題
※わたしが再現テストで確認した範囲では、「AWSALB」の値(セッションキー)が複数あっても、いずれも有効期限内かつ同じターゲットサーバに振り分けられる状態で保存されたものであれば、継続して同じターゲットサーバに振り分けられていました。
再現テスト
ALB とターゲットグループ・ターゲットサーバを設定・配置
まず、前掲のようなターゲットグループを持つ ALB を用意し、ターゲットグループに 2 台以上の Web サーバを登録します。
※今回は 2 台のサーバを登録し、それぞれ「Server 1」「Server 2」というレスポンスが返るように設定しました。
Edge で初回アクセス
Cookie「AWSALB」(および「AWSALBCORS」)が発行されるのが確認できました。
IE11 でアクセス
ここで一旦、ALB のターゲットグループの Stickiness duration を 1 秒に縮めます。これは、振り分けの有効期限が切れた Cookie「AWSALB」を IE11 で生成するためです。
アクセス後、ALB のターゲットグループの Stickiness duration を 1 日に戻します。
Edge で IE11 の Cookie をインポート
対象のドメインを見ると、「AWSALB」が複数になっており、
- 一方が IE11 で発行したもの(ドメインが「.」で始まっている= Domain 属性が指定されている)
- もう一方が先ほど Edge でアクセスしたときに発行されたもの(ドメインが「.」で始まっていない= Domain 属性無指定)
であることが分かりました。
再度 Edge でアクセス
再度 Edge でアクセスすると、Cookie「AWSALB」を複数含む形でリクエストが送られます。何度か繰り返しアクセスしてもこれは変わりません。
続けて何度かアクセスすると、スティッキーセッションが有効、かつ先ほど Stickiness duration を 1 日に戻したにも関わらず、複数のターゲットサーバに振り分けられてしまいます。
ALB では、通常なら Domain 属性無指定の Cookie「AWSALB」をアクセスの都度(値を)更新しながら同じターゲットサーバに結び付けてセッション管理するのですが、このケースでは Domain 属性ありの Cookie(すでに振り分けの有効期限が切れたセッションキーを値に持つもの)が邪魔をして、アクセスの都度新たにターゲットサーバの振り分けを行ってしまいます。
なお、現時点では、**ターゲットグループの Stickiness duration の指定に関わらず、Cookie 自体の有効期限は 7 日で固定的に発行されます。**つまり、IE11 から Edge にインポートした Cookie を削除せずに放置すると、最長で 7 日間トラブルが継続します。
対処方法
対象の Cookie「AWSALB」(Domain 属性あり)を削除すればスティッキーセッションによる振り分けが復活します。基本的にはブラウザ側で削除してもらえば良いはずですが、場合によってはサーバ側で Domain 属性と有効期限(過去の日付など)を指定して強制的に削除することも考えられるでしょう。
※「AWSALBCORS」が複数になってしまったときも同様に削除します。