ロードバランサはネットワーク系の知識がいるから苦手。

awsではELB(Elastic Load Balancer)って名前。2025年時点のラインナップは4つ。

ALBとNLBしか今は使う場面がない・・・。

CLB(Classic Load Balancer)

使ったことなくてわからん。

Classicってあるから昔のタイプなんやろけど、進んで使う場面ない。

ALB(Application Load Balancer)

apacheとかnginxみたいなwebアプリケーションを負荷分散するのに使う。

ゾーン障害あったときのために、azまたがってホスト作っとくとかするのな。

ALBターゲットグループの作成

バックエンドどうするかの設定する。ec2ホストやったらインスタンス指定する。

aws-lb

IPアドレス指定はやったことないけど、dockerコンテナとかECS/EKSでもええんやろな。

ヘルスチェックの確認もしたいからバックエンドの対象ホストは起動しといて対象選択する。

aws-lb

最初の数分間は「保留」になる。

aws-lb

このへんは動作するアプリケーションの性質に応じて設定する。

aws-lb

構築中やったり、サービス停止してたらヘルスステータスはUnhealthyになる。

aws-lb

このへんも動作するアプリケーションの性質に応じて設定する。

aws-lb

ALBの設定

本体の設定作る。VPCと参加ホストのサブネットを指定。

aws-lb

デフォルトアクションにある転送先に、作成したターゲットを指定する。

aws-lb

構成確認して作成。

aws-lb

属性はあとで変えてく。アイドルタイムアウトは600秒もいらんかな。

aws-lb

NLB(Network Load Balancer)

インターネットに面したサブネットにロードバランサ置いといて、バックエンドとしてプライベートサブネットにあるホストが応答するようにしたりする。

+---+     +--public subnet--+     +--private subnet-+
|in |     | +-----+         |     | +-----+         |
|ter| <-> | | NLB |         | <-> | | EC2 |         |
|net|     | +-----+         |     | +-----+         |
+---+     +-----------------+     +-----------------+

スマホは動的にグローバルIPを持ってるから、そこにだけ接続許可するようにしてみる。

セキュリティグループ作成

スマホのIPを許可するように作る。後でわかったんやけど、NLBはping応答できん仕様なんやて。

icmp許可設定つけても応答戻ってこん。

aws-nlb

外向けは全許可。

aws-nlb

NLBのバックエンドにする予定のec2ホストについてるセキュリティグループに、今作ったセキュリティグループを許可するようにしとく。

aws-nlb

サブネットのACL確認

サブネットのネットワークACLは特に制限してへんからデフォルトのまま使ってたら設定不要。

aws-nlb

デフォルト設定から変えて制限つけてたら、許可設定入れる。

NLBターゲットグループの作成

普通に作る。インスタンス指定して、ヘルスチェックするポートも設定しとく。

aws-nlb

tomcatとかwebサービスやったら、http://(ec2ホストのIP):8080をヘルスチェック対象にしといたらええ。

市販のアプリケーションやったら、バージョン情報を見せてくれるURLあるはずやからそこ使う。

サービス提供ポートをヘルスチェック対象にすると、バックエンドで動作不良になるサービスもある。

windowsホストやったら、ファイル共有サービスがほぼ必ず動いてるから、代わりにTCPの445をヘルスチェック対象にしたらええ。

NLBの作成

インターネット向けでIPv4使うNLBも普通に作る。

忘れたらアカンのは、NLB作った後にセキュリティグループの紐付け変えられへんから、先に作っといたものをNLB作成したときに紐づけなアカンで。

aws-nlb

リソースマップに「正常」って表示されてること確認。

aws-nlb

作っといたセキュリティグループ入れて手元のスマホから使えるようにする。

aws-nlb

NLBの画面から離れるんやけど、インターネット公開のNLBは内部と外部のIPを1つずつ使う。

EC2のネットワーク画面で「load」で絞ってみたらわかる。

aws-nlb

DNS名が設定されるから名前引きできることを確認。外部IPが一致してるのを確認。

aws-nlb

手元のパソコンのブラウザから、名前引き確認したDNS名でつながらへんことを確認。スマホのグローバルIPだけ許可してるから開かへんのが正解。

aws-nlb

手元のスマホで開けることを確認。セキュリティグループでスマホのグローバルIPだけ許可してるから表示できてるやん!

aws-nlb

接続確認だけやからかまへんけど、スマホで開いたら見づらいな。

ログ出力

ログ出せるらしい。

そしたら「アクセスログが作成されるのは、ロードバランサーに TLS リスナーがあり、TLS リクエストに関する情報のみが含まれる場合のみです」ってある。

httpsやのうてhttp使ったからログ出力は無理っぽいな。

実運用で使うときはバックエンドのログ見て確認っちゅうことで。

GLB(Gateway Load Balancer)

使ったことなくてわからん。

いつか試せたら追記。