対象読者
AWS初心者
ロードバランサー設定したいけどよくわからん
ロードバランサーの設定でハマった
自分がAWS ALBを初めて設定した時になんかあまりうまくイメージできずにハマったところの備忘録です
やりたかったこと
- VPC内のプライベートサブネットにあるアプリケーションサーバー(2個)に負荷分散させたい
- インターネットからのアクセスを想定
構成
- アベイラビリティゾーン二つ
- それぞれでパブリック、プライベートサブネットに分かれている
ハマりどころ1:内部向け?インターネット向け?
ハマったというかよくわからなかったところ
僕がネットワークの知識に乏しかったからかもしれませんが、まずロードバランサを作る時にスキームを
インターネット向け、内部向け
どちらにするか迷って何回か作り直しました。
今考えたら当たり前やんって感じ満載ですが。
今回はインターネットから飛んでくるトラフィックをプライベートサブネット内のアプリケーションサーバに捌きたいので
スキームはインターネット向けです。
内部向けはVPC内で完結する通信を分散させたい時ですね。
ハマりどころ2:サブネットの選択
ALBを置くアベイラビリティゾーン(AZ)を設定する時に各AZの中のどのサブネットにALBを置くか決める必要があるのですが、インターネット向けの場合はパブリックサブネットに置かないとインターネットからの通信が届きません。
これも考えれば当たり前でした、すいません
ハマりどころ3:ヘルスチェック
最初設定した時ちゃんとセキュリティグループやルートテーブルの設定はしているのに一向にヘルスチェックに通らない時がありました。
原因はパスをうまく設定してなかったことでした。
ヘルスチェックのパスはデフォルトでは
/
ですが、サーバ側では
/health
になってました。
そりゃうまくいかんわって感じでした。
あともう一つはポートです。
ヘルスチェックの通信に使用するポートがあってなかったりするとダメです。
コンソールでヘルスチェックの欄にあるポートでサーバ側の開いているポートをしっかり指定しましょう。
ハマりどころ4:ポート
またポートかよって感じで恐縮です。
これはローカルからロードバランサに対してcurlコマンドを打っていた時にハマりました。
ヘルスチェックは通ったのに...
ロードバランサにはちゃんと通信届いているのに...
ってなりました。
結局ターゲットに指定しているポートが違ったのが原因でした。
ヘルスチェック用とは別に指定する必要があります。
もちろんどちらも同じポートにすることは可能です。
HTTP通信のデフォルトの80番を指定してたんですが、サーバ側では3000番を開いてました...
まとめ
よ〜く考えよ〜ポートは大事だよ〜
ってなりました。
多分一度経験しておくと何が原因かの目星もつけやすくなってすぐ解決できると思うのですが、最初はちょっとあれでしたね、うん、あれでした。