株式会社パーソンリンクアドベントカレンダー21日目です!🎉
はじめに
案件作業中、dev環境においてALBを通してwebサーバーにブラウザ接続すると1分ほど接続に時間がかかった。この現象がGoogle Chromeのみ現れsafariなどでは特に問題はなかった。stg環境ではChromeでも特に問題なくブラウザ接続でき、dev環境だけ現れる現象ということで調査した。
ALB(Application Load Balancer)とは
AWSのシステムの一部で、webサービスに発生する負荷を分散するロードバランサーのこと。
突然webアプリケーションへアクセスが集中したときに、webサービスにかかる負荷を分散し、安定性や高可用性を向上させることができる。
原因
ALBのアベイラビリティーゾーン(以下AZ)設定の際に、igwがないsubnet(以下private subnet)がアタッチされていると、Chromeでの接続が遅くなる。画像にprivate subnetをアタッチしている簡易的な構成図を示す。(本来はALBの役割として、負荷分散があるためec2は複数台設置するべき)
画像のように、ALBの作成は別々のAZにある2つのサブネットが必要であり、またその選択しているサブネットがprivate subnetであると警告文のようなのが出る。
この設定でALBを作成するとGoogle Chromeでのブラウザ接続が遅くなるようだ。
解決策
1.新しくpublic subnetを作成し、ALBにアタッチする
以下の構成図のようにpublic subnetを増築し、ALBにアタッチしてprivate subnetをアタッチしない様にする
2. private subnetをpublic subnetにする
以下の構成図の様に、private subnetをigwを接続されるルートテーブルに編集し、public subnetに変更することで、ALBにアタッチしているサブネットにprivate サブネットがないようにします。
注意点:webサーバが置いてあるsubnetがprivateではなくpublic subnetになり、外のネットワークと直接繋がってしまうため外部から攻撃を受けたりする可能性がある。
結論
stg環境では、構成的に解決策1のようになっていたため、問題なく接続できておりdev環境にだけ現れた現象だった。
解決策1と2どちらも試した結果、Chromeでの接続が特に問題のない接続の速さになった。
今後としてALBの作成の際に選択するsubnetを2つともpublic subnetにすれば良い。
もし最初の構成図のようにprivate subnetをアタッチしてしまっていた場合は、解決策1のような方法を取れば良い。